Предупреждение: filesize (): сбой статистики для 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() просто не похоже на работу. Я немного читал и нашел этот но это не решило проблему. Любая помощь высоко ценится!

5

Решение

['name'] в массиве $ _FILES — имя файла на компьютере КЛИЕНТА. Это только информация, и она не имеет абсолютно никакого отношения к тому, что на самом деле хранится на вашем сервере. Вам нужно посмотреть на ['tmp_name'], где PHP временно сохранил файл на сервере после завершения загрузки:

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

Другие решения

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

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

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

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

$_FILE['profile']['size']
3

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'];

НЕ указывает на правильное расположение файла на СЕРВЕРЕ и вместо этого находится среди:

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

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

Лука

ОБНОВИТЬ

Как предположил Марк Б, вы должны использовать $_FILES['profile']['tmp_name'];

1
По вопросам рекламы [email protected]