PHP奇怪的行为。在服务器和本地主机上的结果不同
我在使用php时遇到了奇怪的问题。我有一个检查文件夹中文章的脚本(和检查文件夹中图像的非常类似的脚本),并基于该脚本创建文章菜单(或图库) 在我的本地主机上,这工作正常,可以找到所有文件并按预期处理它们。 但在真正的服务器上,两个脚本在几个文件之后意外中断 图像检查脚本是这样的吗PHP奇怪的行为。在服务器和本地主机上的结果不同,php,Php,我在使用php时遇到了奇怪的问题。我有一个检查文件夹中文章的脚本(和检查文件夹中图像的非常类似的脚本),并基于该脚本创建文章菜单(或图库) 在我的本地主机上,这工作正常,可以找到所有文件并按预期处理它们。 但在真正的服务器上,两个脚本在几个文件之后意外中断 图像检查脚本是这样的吗 function GalleryList() { echo ' <div class="GalleryGrid"> <ul>'; error_reporting(
function GalleryList() {
echo '
<div class="GalleryGrid">
<ul>';
error_reporting(E_ALL);
$thumbs = array_diff(scandir('images/Thumbs'),array ('..','.','Thumbs.db'));
foreach ($thumbs as $key => $current) {
$imagelist[filectime('images/Thumbs/'.$current)] = $current;
}
krsort($imagelist);
foreach ($imagelist as $key => $thumb) {
$fullImage = substr($thumb,6);
echo '<li><a href="images/'.$fullImage.'"><img src="images/Thumbs/'.$thumb.'"> </a> </li>'.PHP_EOL;
}
echo '</ul>';
}
函数GalleryList(){
回声'
”;
错误报告(E_全部);
$thumbs=array_diff(scandir('images/thumbs')、array('..'、'thumbs.db');
foreach($key=>$current的拇指){
$imagelist[filectime('images/Thumbs/'。$current)]=$current;
}
krsort($imagelist);
foreach($key=>$thumb的图像列表){
$fullImage=substr($thumb,6);
echo''.PHP\u EOL;
}
回声“
”;
}
文章检查几乎是相同的脚本,只是不同的文件夹和不同的输出HTML。权限没有差别。
不用说,我没有收到任何错误。如果不知道当您说它“中断”时实际发生了什么,我猜您遇到了文件权限问题。也许Apache是以您的用户名运行的,或者在您的本地主机上具有广泛的权限,而在您的服务器上,它的限制更大 如果更改此选项,会发生什么情况:
echo '<li><a href="images/'.$fullImage.'"><img src="images/Thumbs/'.$thumb.'"> </a> </li>'.PHP_EOL;
echo''.PHP\u EOL;
为此(代码特意超级简化):
$fullImagePath=“images/$fullImage”;
$fullThumbPath=“images/Thumbs/$thumb”;
如果(是否可读($fullImagePath)){
echo“$fullImagePath可读” ;
}否则{
echo“$fullImagePath不可读”;
}
if(是否可读($fullThumbPath)){
echo“ $fullThumbPath可读” ;
}否则{
echo“$fullThumbPath不可读”;
}
现在,您至少可以知道是否存在文件可读性问题。您一定会遇到错误。你能访问服务器上的目录吗?它们是否包含文章和图像?启用错误报告
错误报告(~0)代码>并告诉我们错误。什么PHP版本?另外,当你说它“意外中断”时,是崩溃还是刚刚退出循环?您是否尝试过对数组执行打印\u r()
,以证明它符合您的预期?您说没有错误,但您确定正在记录或显示它们吗?错误报告本身不会显示任何错误如果显示错误为false当我打印数组时,它只返回正确使用的文件。php版本是5.4.6。试着调试它,输出scandir('images/Thumbs'),看看它是否包含您想要的内容,并检查您是否在您认为您所在的文件夹中。运行此脚本(谢谢您,顺便说一句,我不会想到这一点)告诉我,正常工作的文件是可读的。没有其他文件。我的意思是,我没有“不可读”输出。但它们都具有相同的权限设置。古怪。那么,当它破裂时到底会发生什么呢?执行停止了,你会看到5个左右的缩略图吗?脚本的其余部分是否执行?页面是否呈现?页面上是否有关闭HTML之类的内容?当它中断时,它会退出循环。它看起来甚至不像是一个实际错误,只是没有获取数组中的所有文件。我是否会错误地排除它们?页面的其余部分通常呈现为关闭HTML和所有内容。filectime()是否有问题?这是否会失败,因为文件可能具有相同的创建时间戳,因为我一次上载了所有文件?您可以(并且应该)删除filectime
,以进行测试。filectime返回文件上次更改的时间,或者失败时返回FALSE-因此,如果文件未更改,则可能不会将其添加到数组中。
$fullImagePath = "images/$fullImage";
$fullThumbPath = "images/Thumbs/$thumb";
if (is_readable($fullImagePath)) {
echo "<li>$fullImagePath is readable</li>".PHP_EOL;
} else {
echo "<li>$fullImagePath is not readable</li>".PHP_EOL;
}
if (is_readable($fullThumbPath)) {
echo "<li>$fullThumbPath is readable</li>".PHP_EOL;
} else {
echo "<li>$fullThumbPath is not readable</li>".PHP_EOL;
}