什么会导致PHP脚本无故停止?

时间:2011-10-26 01:37:56

标签: php

我正在使用class.upload.php将图片上传到网页。似乎以前工作的脚本现在基本上停止了一段时间没有任何错误。在脚本的每一行,我都在回显一个数字,这样我就能知道它停在哪一点,即:

// save uploaded image with a new name
$foo->file_new_name_body = $image_name;
$foo->Process($save_directory);

if ($foo->processed) {
echo 'original image copied 1';
} else {
echo 'error 1: ' . $foo->error;
}

echo '1';    $foo->file_new_name_body = $image_name . '_medium';


echo '2';    $foo->image_resize = true;


echo '3';    $foo->image_convert = jpg;


echo '4';    $foo->image_x = 300;


echo '5';    $foo->image_ratio_y = true;


echo '6';    $foo->file_overwrite = true;


echo '7';    $foo->Process($save_directory);


echo '8';

if ($foo->processed) {
echo 'original image copied';
} else {
echo 'error 2: ' . $foo->error;
}

输出:

original image copied 1
1
2
3
4
5
6
7

我无法解释它。没有错误。没有反馈。 echo'7'后没有其他代码;被执行。到底是怎么回事?我该如何调试?

会导致这种行为的原因是什么?

修改 我只需更改正在上传的文件就可以解决问题。它是2000px宽,当我将其保存为较小的800px图像时,它完成了这个过程。

我将建议的内存更改为40米,但是这仍然不允许我处理2000px宽的图像,这对我来说并没有多大意义。处理这些大小的文件需要多少内存?

3 个答案:

答案 0 :(得分:2)

嗯,我不是火箭科学家(a)但在我看来,最可能的原因是你没有退出$foo->Process($save_directory)的电话。

你可能需要调试那只小兽来找出原因。

第一步是输出$save_directory$image_name以查看它们包含的内容。

其次,我会注释掉所有这些标志设置语句,看看它是否仅适用于副本。然后一次一个地添加它们,直到它再次开始失败。

可能是转换代码中存在错误或上传的图像文件出现问题导致其挂起。如果是后者,也许另一个(更简单的)图像文件可能有效 - 值得检查。

毫不奇怪,它会挂起,因为所有其他声明只是为process电话设置标志。

最后,您可以访问the source。您可以简单地制作它自己的副本(如果您还没有)并将调试语句插入其中以查看它停止的位置。

process的代码实际上非常符合逻辑。它似乎是一系列形式的块:

if ($this->processed) {
    # Attempt to do next stage, setting
    #   $this->processed to false if there's a problem.
}

所以你可以在每个块之前插入一个echo语句,找出哪个块导致问题,然后开始在块中插入更多调试语句,直到你缩小它一直到实际线。

您可能还想查看FAQ,尤其是提高PHP内存限制可能有助于处理更大图像的位。还有forums,但我看到you've already started to go down that route: - )


(a):火箭科学家在这种情况下说了什么?

答案 1 :(得分:2)

检查你的内存限制,我发现如果我点击它,PHP可以(确实?)只是退出而不说什么。

答案 2 :(得分:1)

你的php.ini中设置了什么 - 例如,这将显示几乎所有错误。

error_reporting = E_ALL & ~E_NOTICE