PHP:语法错误,意外的T_STRING

cas*_*ney 2 php syntax-error

我收到此PHP代码的语法错误

syntax error, unexpected T_STRING
Run Code Online (Sandbox Code Playgroud)

它表示第2行,即包含行:

<?php  
  include 'config.inc.php';  
  
  // initialization  
  $photo_upload_fields = '';  
  $counter = 1;  
  
  // If we want more fields, then use, preupload.php?number_of_fields=20  
  $number_of_fields = (isset($_GET['number_of_fields'])) ?  
    (int)($_GET['number_of_fields']) : 5;  
  
  // Firstly Lets build the Category List  
  $result = mysql_query('SELECT category_id,category_name FROM gallery_category');  
  while($row = mysql_fetch_array($result)) {  
    $photo_category_list .= <<<__HTML_END

<option value="$row[0]">$row[1]</option>\n  
__HTML_END;  
  }  
  mysql_free_result( $result );    
  
  // Lets build the Image Uploading fields  
  while($counter <= $number_of_fields) {  
    $photo_upload_fields .= <<<__HTML_END  
<tr><td>  
  Photo {$counter}:  
  <input name="photo_filename[]"  
type="file" />  
</td></tr>  
<tr><td>  
  Caption:  
  <textarea name="photo_caption[]" cols="30"  
    rows="1"></textarea>  
</td></tr>  
__HTML_END;  
    $counter++;  
  }  
  
  // Final Output  
  echo <<<__HTML_END  
<html>  
<head>  
<title>Lets upload Photos</title>  
</head>  
<body>  
<form enctype="multipart/form-data"  
  action="upload.php" method="post"  
  name="upload_form">  
  <table width="90%" border="0"  
    align="center" style="width: 90%;">  
    <tr><td>  
      Select Category  
      <select name="category">  
      $photo_category_list  
      </select>  
    </td></tr>  
    <! - Insert the image fields here -->  
    $photo_upload_fields  
    <tr><td>  
      <input type="submit" name="submit"  
        value="Add Photos" />  
    </td></tr>  
  </table>  
</form>  
</body>  
</html>  
__HTML_END;  
?>
Run Code Online (Sandbox Code Playgroud)

我的include文件如下所示:

<?php  
  $mysql_link = mysql_connect("localhost","user","password");  
  mysql_select_db("db_name") or die("Could not select database");  
  $images_dir = "photos";  
?> 
Run Code Online (Sandbox Code Playgroud)

解:

我在代码中隐藏了隐形unicode字符,导致PHP解析器抱怨上述语法错误.

use*_*118 5

在HEREDOC语法变量的开头和结尾有多个空格; 这会导致问题.之后删除空格

<<<__HTML_END
Run Code Online (Sandbox Code Playgroud)

之后

__HTML_END;
Run Code Online (Sandbox Code Playgroud)

你的代码应该正常工作.

另见我找到答案的这个帖子:http://board.phpbuilder.com/board/showthread.php?t = 10333424

  • _非常重要的是要注意具有结束标识符的行必须不包含其他字符...这意味着标识符可能不会缩进,并且在分号之前或之后可能没有任何空格或制表符. .**如果此规则被破坏...它将不被视为结束标识符,PHP将继续查找.如果在当前文件结束之前找不到合适的结束标识符,则会在最后一行产生解析错误.**[Heredoc - PHP:字符串 - 手册](http://php.net/manual/en/ language.types.string.php) (2认同)