我正在使用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宽的图像,这对我来说并没有多大意义。处理这些大小的文件需要多少内存?
答案 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