используйте file_put_contents для создания html-файла с помощью php mysql

#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 />'";