我正在处理以下代码:
<?php
$dir=opendir("docs/recipes");
$files=array();
while (($file=readdir($dir)) !== false)
{
if ($file != "." and $file != ".." and $file != "index.php")
{
array_push($files, $file);
}
}
closedir($dir);
sort($files,SORT_STRING | SORT_FLAG_CASE);
print "<div class=\"blocktext\">";
foreach ($files as $file)
print "<A href=\"docs/recipes/$file\">$file</a><br>";
print "</div>";
?>
我在我的raspberry pi网络服务器上工作了,但是我把我的服务器移到了arch linux,它似乎没有用。当我加载页面时,它会旋转,但文件列表为空。
我已经检查过httpd与systemd一起运行,因为我的网页加载了。我知道php正在运行,因为我的phpinfo测试页面有效。
在包含此文件的文件夹中,我有一个名为docs的符号链接,我知道路径是正确的。我将目标中的所有文件都可读。这个文件是可执行的。
我还缺少其他什么吗?
答案 0 :(得分:0)
不一定是解决方案,但有些帮助可以通过良好做法以及找到脚本上发生的事情的方法
<?php
// initialize variables first
$dir = false;
$files = array();
// assign the handler
$dir = opendir( "docs/recipes" );
// work only if necessary
if ( $dir !== false ) {
while ( ( $file = readdir( $dir ) ) !== false ) {
if ($file != "." and $file != ".." and $file != "index.php") {
array_push($files, $file);
}
}
closedir( $dir );
sort( $files,SORT_STRING | SORT_FLAG_CASE );
print "<div class=\"blocktext\">";
foreach ( $files as $file ) {
print "<A href=\"docs/recipes/$file\">$file</a><br>";
}
print "</div>";
} else {
// get informed that something is wrong, print anything that helps you
echo( 'problems opening' );
exit( __FILE__.' '.__LINE__ );
}
?>
答案 1 :(得分:0)
出现警告:此函数可能返回布尔值FALSE,但也可能返回非布尔值,其值为FALSE。
您尚未指定使用的是哪个版本的PHP,也未指定在本地安装/编译的PHP版本。这会有所帮助。我的猜测是你没有打开所有错误,而readdir正在抓住其中一个角落案例。
试试这个:
$cycle = true;
while ( $cycle !== false ) {
$file = readdir( $dir );
print ( "GOT a FILe or a FALSE:". $file ."br>" );
// do your stuff here
$cycle = $file;
}
然后在php.ini中将错误设置为E_ALL。如果使用PHP&gt; = 5.4(我猜你是,因为你正在使用arch :)你可以启动内置服务器,所以所有错误/日志/消息都直接发送到STDERR。只需从index.php所在的文件夹中执行命令:
$ php -S <local ip>:<some port>
在浏览器中像往常一样打开(或卷曲,或其他)。输出转到浏览器,错误直接进入控制台,没有中间人来掩盖任何消息。
这应该可以让你抓住真正的问题。和/或,你可以把它全部包装在try-catch中,看看是否弹出了什么东西。