Предупреждение: filesize (): stat failed for img.jpg

Я пытаюсь получить размер файла изображения, и я продолжаю получать Warning: filesize(): stat failed for img.jpg

Это то, что я сделал:

 $path = $_FILES['profile']['name']; $path = iconv('UTF-8', 'ISO-8859-1',$path); if (!in_array(pathinfo($path,PATHINFO_EXTENSION),$allowed)) { return "file"; } elseif (filesize($path)>(1024*600)) 

Я могу получить расширение файла без проблем, но filesize() просто не работает. Я читал немного и нашел это, но это не решило проблему. Любая помощь высоко ценится!

['name'] в массиве $ _FILES – это имя файла на машине CLIENT. Это только информация и не имеет абсолютно никакого отношения к тому, что на самом деле хранится на вашем сервере. Вам нужно посмотреть ['tmp_name'] , где PHP временно хранит файл на сервере после завершения загрузки:

 $path = $_FILES['profile']['tmp_name']; ^^^^^^^^^^^^ 

$_FILES['profile']['name'] имеет только имя файла .. вам нужно получить доступ

 $_FILES['profile']['tmp_name'] 

предоставит вам временный путь к файлу вашей системы. Здесь http://php.net/manual/en/reserved.variables.files.php

также вы можете получить доступ к размеру файла с помощью

 $_FILE['profile']['size'] 
 echo "---- NULL ---------------\n"; $path = null; echo "File size is: " . filesize($path) . "\n"; echo "---- FILE EXISTS --------\n"; $path = '/home/luca/Scrivania/file_that_exists.jpg'; echo "File size is: " . filesize($path) . "\n"; echo "---- FILE NOT EXISTS ----\n"; $path = 'file/does/not/exists.jpg'; echo "File size is: " . filesize($path) . "\n"; 

Это приведет к:

 ---- NULL --------------- File size is: ---- FILE EXISTS -------- File size is: 78953 ---- FILE NOT EXISTS ---- Warning: filesize(): stat failed for file/does/not/exists.jpg in /home/luca/Scrivania/test.php on line 13 Call Stack: 0.0001 642120 1. {main}() /home/luca/Scrivania/test.php:0 0.0002 642448 2. filesize() /home/luca/Scrivania/test.php:13 

Это означает, что ваша переменная

 $_FILES['profile']['name']; 

НЕ указывает на правильное расположение файла на сервере SERVER и является одним из следующих:

  1. Путь к файлу на клиентском ПК (не на сервере), и в этом случае вы точно не имеете доступа к нему
  2. Что-то, что не является строкой
  3. НО это не null (иначе вы бы просто вернули null (см. Первый пример)

Пожалуйста, в следующий раз отправьте действующий PHP-код.

Лука

ОБНОВИТЬ

Поскольку Marc B предложил вам использовать $_FILES['profile']['tmp_name'];