Загруженная фотография приводит к «500 внутренняя ошибка сервера» - PHP / IIS7 / Windows Server 2008 - PullRequest
1 голос
/ 13 марта 2011

Я недавно переместил веб-сайт, который был написан для среды LAMP, на Windows Server 2008. Теперь мне удалось заставить все работать, но у меня есть еще одна проблема, которую я не могу решить.

Я разрешаю администратору загружать фотографию, размер которой будет изменен на большой и маленький файлы с помощью сценария 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 ]

1 голос
/ 24 апреля 2015

Я знаю, что этот вопрос задавали 4 года назад, но я столкнулся с этой же проблемой и подумал, что оставлю ответ для всех, кто может прийти сюда позже.

Я нашел ответ здесь , но основная предпосылка состоит в том, чтобы изменить права доступа к временной папке, в которую PHP первоначально загружает. Предоставление учетной записи IUSR доступа для чтения к временной папке позволит им просматривать файл, когда он достигает конечного пункта назначения. Предположительно, IIS7 предоставит разрешения из временной папки для временного файла загрузки, который при перемещении в каталог вашего сайта сохранит эти разрешения для временной папки.

В плане безопасности вы разрешаете доступ на чтение к вашей временной папке; поэтому, если у вас есть конфиденциальная информация, которая в любой момент оказывается там, вам, возможно, придется найти другое решение.

Немного больше информации можно найти здесь

0 голосов
/ 11 июля 2016

Я застрял в той же проблеме, и я думаю, что это кому-нибудь поможет

  1. Щелкните правой кнопкой мыши загрузку каталога / папки и выберите «Свойства»
  2. Перейдите на вкладку «Безопасность»
  3. Нажмите «Редактировать»
  4. Выберите «IUSR» под именем группы или пользователя
  5. Выберите «Чтение и выполнение» под разрешениями для IUSR
  6. Нажмите «Применить» и'Ok'

Найдено на http://wingedpost.org/2016/07/preventing-500-internal-server-error-uploaded-files-iis-php-sites/

...