上传的照片会导致“500内部服务器错误” - PHP / IIS7 / Windows Server 2008

时间:2011-03-13 17:44:19

标签: php iis-7 windows-server-2008

我最近将一个为LAMP环境编写的网站移动到了Windows Server 2008.我已经设法获得了现在正在运行的所有内容,但我有一个我似乎无法解决的最后一个问题。 / p>

我让管理员用户上传一张照片,该照片将通过PHP脚本调整为大文件和小文件的大小。两个文件都被完美上传,但是大文件不会显示,并且在查看时会导致“500内部服务器错误”?

我可以登录服务器并打开小文件和大文件,但网站上只显示小文件?我已经复制了下面的PHP脚本,但两个文件的权限似乎相同。

我正在使用PHP,IIS7和Windows Server 2008.希望有人可以提供帮助,

史蒂芬。

            // only process if the first image has been found
        if(isset($image_file)) {
            // get photo attributes
            $image_filename = $image_file['name'];
            $image_temp = $image_file['tmp_name'];
            $image_ext = substr($image_filename,strpos($image_filename,'.'),strlen($image_filename)-1);

            // validate photo attributes
            if(strtolower($image_ext) == '.jpg' && filesize($image_temp) <= 4194304) {
                // create custom timestamp
                $image_timestamp = date('dmYHis');

                // clean up filename
                $image_filename = trim(str_replace('\'','',$image_filename));
                $image_filename = str_replace('\\','',$image_filename);
                $image_filename = str_replace('&','',$image_filename);
                $image_filename = str_replace(' ','-',$image_filename);

                // set file names
                $image_large_file = strtolower($image_timestamp . '-large-1-' . $image_filename);
                $image_small_file = strtolower($image_timestamp . '-thumb-1-' . $image_filename);

                // image url source
                $image_source = $_SERVER['DOCUMENT_ROOT'] . '/images/';

                // upload image file
                if(move_uploaded_file($image_temp,$image_source . $image_large_file)) {
                    // resize, save & destroy LARGE image
                    list($image_width,$image_height) = getimagesize($image_source . $image_large_file);
                    $image_container = imagecreatetruecolor(420,315);
                    $image_temp = imagecreatefromjpeg($image_source . $image_large_file);
                    imagecopyresampled($image_container,$image_temp,0,0,0,0,420,315,$image_width,$image_height);
                    imagejpeg($image_container,$image_source . $image_large_file,75);
                    imagedestroy($image_container);

                    // resize, save & destroy SMALL image
                    list($image_width,$image_height) = getimagesize($image_source . $image_large_file);
                    $image_container = imagecreatetruecolor(90,68);
                    $image_temp = imagecreatefromjpeg($image_source . $image_large_file);
                    imagecopyresampled($image_container,$image_temp,0,0,0,0,90,68,$image_width,$image_height);
                    imagejpeg($image_container,$image_source . $image_small_file,100);
                    imagedestroy($image_container);
                }
                else
                    $status = '<h3 class="red">Sorry, but there was a problem uploading one of the images to the server</h3>';
            }
            else
                $status = '<h3 class="red">Please check that all the image size\'s are less than 4MB and they\'re all in JPG format</h3>';
        }

2 个答案:

答案 0 :(得分:1)

我知道这个问题是4年前提出来的,但是我遇到了同样的问题,并且认为我会给可能会来这里的人留下答案。

I found an answer here,但基本前提是修改PHP最初上传到的临时文件夹的权限。允许IUSR帐户读取对temp文件夹的访问权限将允许他们在文件到达其最终目的地时查看该文件。据说IIS7会将临时文件夹的权限授予临时上传文件,当移动到您的网站目录时,会保留这些临时文件夹的权限。

安全方面,您允许对临时文件夹进行读取访问;因此,如果您的敏感信息在任何时候结束,您可能需要找到另一种解决方案。

可以找到更多信息here

答案 1 :(得分:0)

我遇到了同样的问题,我认为这会对某人有所帮助

  1. 右键单击上传目录/文件夹,然后选择“属性”
  2. 转到“安全”标签
  3. 点击修改
  4. 在群组或用户名下选择“IUSR”
  5. 选择'阅读&amp;执行'IUSR权限
  6. 点击“应用”和“确定”
  7. http://wingedpost.org/2016/07/preventing-500-internal-server-error-uploaded-files-iis-php-sites/

    上找到了这个