有人能向我解释如何获取使用文件开头的 shebang 来通过 XHTML 验证器的 .php 文档吗?我不断收到一个错误,指出我必须将 xml utf-8 声明放在文件开头。当我这样做时,我必须从第一行删除我的 shebang。结果,服务器无法读取我的文档,我收到错误。例如,以下文件未通过 XHTML 验证:
#!/usr/local/bin/php
<?= '<' . '?xml version="1.0" encoding="utf-8"?' . '>' ?>
<?php
$strLessonDescription = file_get_contents('http://example.com/.../lesson5.txt');
if ($strLessonDescription == NULL)
print "Error - lesson5.txt cannot be opened";
$arrLessonVocabulary = array();
$arrLessonVocabulary = file("http://example.com/.../vocabulary5.txt");
if ($arrLessonVocabulary == NULL)
print "Error - vocabulary5.txt cannot be opened";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
答案1
要么配置您的服务器以删除 shebang 行,要么配置服务器以通过 PHP 解释器解析 .php 文件,然后删除 shebang 行。
我从来没有遇到过(据我所知)甚至有能力的使用该 shebang 行,所以我甚至无法想象您使用什么来提供比这更具描述性的内容。如果您在帖子中提供更多详细信息,也许有经验的人可以为您提供更好的答案。
答案2
您是在尝试验证原始 PHP 源代码,还是脚本执行的输出?我怀疑后者会更有用,在这种情况下,唯一需要担心的是 shebang 是否最终会出现在脚本输出中。
您能否发布您如何执行 PHP 脚本(例如,它是从命令行/定期脚本还是 Web 请求调用)?
答案3
/usr/local/bin/php -l file.php
will parse the file for any errors
/usr/local/bin/php file.php | xmllint
will parse the output from your php script (that is the xhtml)
答案4
看起来你的 shebang 行之后但在第一个 之前有一个空行<?=
。不要这样做,那个空行是输出,所以你的 xml 文件将以一个空行开头,而不是<?xml ...?>