#php #file-io
#php #file-io
Вопрос:
Когда я попытался использовать file_put_contents для создания HTML-файла с помощью php mysql, я столкнулся с некоторыми проблемами. в моем коде, как показано ниже, произошла ошибка в первой строке echo. Нужна некоторая помощь. Спасибо.
Ошибка, которую я получаю, это
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
В этой строке
$php = "echo '<div class="title">'.htmlspecialchars($row['title'],UTF-8).'</div><br />';
Вот остальная часть моего кода
header('Content-type:text/html; charset=utf-8');
set_time_limit(30);
require_once dirname(__FILE__) . '/conn.php';
mysql_select_db("ba_10978243",$handle_db5);
$result = @mysql_query("SELECT title,content,date FROM new_heelp Order By date DESC LIMIT 15");
while ($row = @mysql_fetch_array($result))
{
$php = "echo '<div class="title">'.htmlspecialchars($row['title'],UTF-8).'</div><br />';//echo wrong in this line : Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
$data = date("w j n Y H:i:s", $row['date']);
echo '<div class="date">'.$data.'</div>';
if(!empty($row['content'])){
echo '<div class="content">'.$row['content'].'</div>';
}";
}
file_put_contents("$article_20100421_132.html", $php);
?>
Комментарии:
1. -1 за то, что не опубликовал правильное сообщение об ошибке (или описание того, что пошло не так). После 113 вопросов это ожидаемо.
2. Кроме того, вы используете
$php = ''
вместо$php .= ''
. Вы вообще не объединяете строку3. @Pekka, я опубликовал свою ошибку после первой строки echo,
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
4. @JohnP, я пробовал $ php .= «, все еще выдает неправильное эхо. Спасибо.
Ответ №1:
Это довольно уродливый код. И вы создаете строки, содержащие синтаксис PHP, чтобы затем сохранить их в HTML-файле? Не сработает.
<?php
set_time_limit( 30 );
require_once( dirname( __FILE__ ) . '/conn.php' );
mysql_select_db( 'ba_10978243' , $handle_db5 );
$result = @mysql_query( 'SELECT `title , `content` , `date` FROM `new_heelp` ORDER BY `date` DESC LIMIT 15' );
if( !$result || mysql_num_rows( $result )>0 ){
echo 'ERROR: No SQL Rows Returned.';
}else{
$output = array();
$rowTpl = '<div class="title">%s</div><br/><div class="date">%s</div>%s';
while( $r = @mysql_fetch_array( $result ) ){
$output[] = sprintf( $rowTpl ,
htmlspecialchars( $row['title'] , ENT_COMPAT , 'UTF-8' ) ,
date( 'w j n Y H:i:s' , $row['date'] ) ,
( !empty( $row['content'] ) ? $row['content'] : '' ) );
}
file_put_contents( "{$article}_20100421_132.html" , implode( "n" , $output ) ); # NOTE: $article is not declared anywhere above this line
?>
Краткое описание проблем в вашем коде:
- Вы используете
header()
для установки типа содержимого, когда в этом нет необходимости — создаваемый вами HTML-файл не унаследует эту информацию, и если этот PHP-скрипт ничего не выводит в браузер, он избыточен. - Дважды проверьте название таблицы в вашем SQL — это действительно «heelp»?
- В
while()
цикле вы заменяете значение$php
в каждом цикле, поэтому только последние значения будут перенесены вниз по странице. - Ваша строка, которую вы используете для установки
$php
, содержит PHP-код, который в HTML-файле ничего не будет делать. - Вы избегаете двойных кавычек, когда окружены одинарными кавычками — избыточно
- Вы используете переменную в имени нового HTML-файла, которая нигде не объявлена выше этой строки, что вызовет у вас проблемы.
Ответ №2:
Множество проблем в вашем коде. Ниже перечислены наиболее яркие из них.
"echo '<div class="title">'.htmlspecialchars($row['title'],UTF-8).'</div><br />';
----------------------------^
Вы открываете свое утверждение двойной кавычкой "
, но закрываете его одинарной кавычкой '
. Просто закройте его двойной кавычкой.
$php = "e....";
Вы продолжаете переопределять значение $php
переменной в цикле. Что вы хотите, так это объединить его
$php .= "...";
Вы подавили ошибки в своей команде запроса. Как вы узнаете, если что-то пойдет не так? Используйте @
оператор разумно.
@mysql_query....
Из того, что я вижу, вы создаете беспорядок в своей строке, потому что пытаетесь поместить PHP-код в текстовый файл (возможно, чтобы включить позже или оценить его?). Есть более чистые способы обработки вашей строки. Также значительно упрощает чтение. Мы можем помочь вам, если вы дадите более подробную информацию о том, что вы пытаетесь сделать.
Ответ №3:
Чтобы исправить:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
Измените строку примера, чтобы включить заключительную цитату:
$php = "echo '<div class="title">'.htmlspecialchars($row['title'],UTF-8).'</div><br />'";