move_uploaded_file не работает, нет ошибки

Я запускаю сценарий, который перемещает загруженный файл с помощью move_uploaded_file() . Я делал это тысячи раз, но по какой-то причине он не работает. Я приписал следующее:

  1. <form> используя method="post" и правильный enctype
  2. правильный файл, на который ссылается форма
  3. у каталога есть разрешения 777
  4. все memory_limit , max_execution_time и т. д. настроены на супервысокие настройки, чтобы избежать тайм-аутов

В принципе, приведенный ниже сценарий возвращается только с Your image is too big. , Я также включил ВСЕ ошибки для отображения и до сих пор не получил ошибку. Есть идеи?

 $time = time(); $target_path = "/absolute/path/to/temp/directory/temp/"; $target_path = $target_path.$time.'.jpg'; if(move_uploaded_file($_FILES['image']['tmp_name'], $target_path)) { } else{ $error .= '<li>Your image is too big.</li>'; } 

Использование хоста 1and1 с взломом php.ini: P

ОБНОВЛЕНИЕ 1

Я хотел бы добавить, что ответ от скрипта происходит ровно через 60 секунд.

ОБНОВЛЕНИЕ 2

Возможно, мы с этим справимся. Просто print_r($_FILES) и это результат массива:

 Array ( [image] => Array ( [name] => P2120267.JPG [type] => [tmp_name] => [error] => 1 [size] => 0 ) ) 

Так что это заставляет меня думать, что файл не будет правильно загружен на сервер или что-то еще? Я проверил, и форма сообщения <form action="" method="post" enctype="multipart/form-data"> . Итак, что я могу сказать, файл не загружается на временную область сервера?

ОБНОВЛЕНИЕ 3

Заметил [error] => 1 в приведенном выше массиве. Очевидно, что размер файла больше, чем upload_max_filesize . Однако, когда я устанавливаю это как 128M , я получаю белый экран смерти через 60 секунд. Файл, который я загружаю, составляет 2,5 МБ

Вот мой файл php.ini:

 register_globals=off memory_limit = 128M max_execution_time=3600 post_max_size = 128M upload_max_filesize= 128M 

ОБНОВЛЕНИЕ 4

С подробностями выше, похоже, что я получаю WSOD, но изображение загружается. Итак, как остановить WSOD? Я не могу найти никаких ошибок.

ОБНОВЛЕНИЕ 5 – НАЙДЕНО!

Мне стыдно за то, что вы не дали вам парней весь код. Похоже, что это связано с этой строкой:

 resizeImage($feedBurnerStatsSource, PHOTOMSGDIR.'temp/'.$time.'-tmp.jpg',$width,$height); 

В следующем коде:

 function resizeImage($source, $destination = NULL,$wdt, $height = NULL){ if(empty($height)){ // Height is nit set so we are keeping the same aspect ratio. list($width, $height) = getimagesize($source); if($width > $height){ $w = $wdt; $h = ($height / $width) * $w; $w = $w; }else{ $w = $wdt; $h = $w; $w = ($width / $height) * $w; } }else{ // Both width and Height are set. // this will reshape to the new sizes. $w = $wdt; $h = $height; } $source_image = @file_get_contents($source) or die('Could not open'.$source); $source_image = @imagecreatefromstring($source_image) or die($source.' is not a valid image'); $sw = imagesx($source_image); $sh = imagesy($source_image); $ar = $sw/$sh; $tar = $w/$h; if($ar >= $tar){ $x1 = round(($sw - ($sw * ($tar/$ar)))/2); $x2 = round($sw * ($tar/$ar)); $y1 = 0; $y2 = $sh; }else{ $x1 = 0; $y1 = 0; $x2 = $sw; $y2 = round($sw/$tar); } $slate = @imagecreatetruecolor($w, $h) or die('Invalid thumbnail dimmensions'); imagecopyresampled($slate, $source_image, 0, 0, $x1, $y1, $w, $h, $x2, $y2); // If $destination is not set this will output the raw image to the browser and not save the file if(!$destination) header('Content-type: image/jpeg'); @imagejpeg($slate, $destination, 75) or die('Directory permission problem'); ImageDestroy($slate); ImageDestroy($source_image); if(!$destination) exit; return true; } 

Таким образом, WSOD означает, что его какой-то штамп без сообщения. Есть идеи?

Просто чтобы проверить, установлен ли post_max_filesize на высокий уровень? Потому что согласно php.net:

Если размер пост-данных больше, чем post_max_size, суперглавы $ _POST и $ _FILES пустые. Это можно отслеживать различными способами, например, передавая переменную $_GET скрипту, обрабатывающему данные, т. <form action="edit.php?processed=1"> , а затем проверяет, является ли $_GET['processed'] задавать.

Что-то нужно учитывать.

для получения дополнительной информации см. эту ссылку и прокрутите вниз до раздела post_max_filesize

ОБНОВИТЬ

По моему опыту, если вы получаете WSOD, это обычно происходит с отключением error_reporting и выключением display_errors или с достижением memory_limit . В сценарии вверху я обычно устанавливаю memory_limit на 1024M, чтобы убедиться, что это не проблема, и включить error_reporting и display_errors … поэтому поставьте это перед загрузкой файла:

 error_reporting(E_ALL); // or E_STRICT ini_set("display_errors",1); ini_set("memory_limit","1024M"); 

Это обычно избавляет от WSOD и дает вам и ошибки для работы.

ОБНОВИТЬ

Вы пробовали отключить подавление ошибок @ перед всеми вашими функциями, чтобы увидеть, что они создают определенную ошибку? Кроме того, что вы выполняете и вводите таймауты? и можете ли вы проверить, какие заголовки отправляются? (убедитесь, что это Content-Type=text/html; )

Попробуйте изменить целевой путь к каталогу non temp.

После некоторых обновлений здесь приведена резолюция:

 set_time_limit(0); ini_set('upload_max_filesize', '500M'); ini_set('post_max_size', '500M'); ini_set('max_input_time', 4000); // Play with the values ini_set('max_execution_time', 4000); // Play with the values 

… добавьте это в начало вашего файла, который обрабатывает загрузку.

[error] => 1 означает, что загруженный файл превышает директиву upload_max_filesize в php.ini.
http://www.php.net/manual/en/features.file-upload.errors.php

Итак, вы должны изменить свои настройки.

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

У меня была такая же проблема на прошлой неделе, это было просто из-за того, что мой серверный дисковый диск был заполнен! Надеюсь, это поможет кому-то …

У меня была такая же проблема, но я хотел перезаписать файл, поэтому мне нужно удалить старый файл, и он работает.