使用带有php mysql的file_put_contents创建html文件

时间:2011-04-21 09:36:05

标签: php file-io

当我尝试使用php mysql的file_put_contents创建html文件时,我遇到了一些麻烦。我的代码如下,在第一个回声线中出现了一些错误。需要一些帮助。感谢。

我得到的错误是

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);
?>

3 个答案:

答案 0 :(得分:8)

这是一些相当难看的代码。您是否正在创建包含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()设置Content-Type - 您创建的HTML文件将不会继承此信息,如果此PHP脚本没有向浏览器输出任何内容,则它是多余的
  • 仔细检查SQL中的表名 - 它真的是“heelp”吗?
  • while()循环中,您将在每个循环中替换$php的值,因此只会在页面中执行最后的值。
  • 您用来设置$php的字符串包含PHP代码,在HTML文件中,它不会执行任何操作。
  • 当用单引号括起来时,你正在逃避双引号 - Redundant
  • 您在新HTML文件的名称中使用了一个变量,该变量未在该行上方的任何位置声明,这会导致您遇到问题。

答案 1 :(得分:4)

代码中有很多问题。最明显的是下面列出的。

"echo '<div class=\"title\">'.htmlspecialchars($row['title'],UTF-8).'</div><br />';
----------------------------^

您要使用双引号"打开您的对帐单,但请使用单引号'关闭它。用双引号关闭它。

$php = "e....";

您将继续覆盖循环中$php变量的值。你想要的是连接它

$php .= "...";

您已经抑制了查询命令的错误。如果出现问题你怎么知道?明智地使用@运算符。

@mysql_query....

从我看到的,你正在弄乱你的字符串,因为你试图将PHP代码放入一个文本文件中(可能稍后包含或eval它?)。有更简洁的方法来制作你的字符串。使阅读更容易。如果您提供有关您正在尝试做的更多详细信息,我们可以帮助您。

答案 2 :(得分: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 />'";