Загрузил изображение с помощью `file_put_contents` с 0 байтами (пусто)? - PullRequest
0 голосов
/ 21 марта 2012

Я загрузил изображение, используя file_get_contents с URL, затем загрузил его на свой веб-сайт, используя file_put_contents, изображение появляется в указанном каталоге, однако его размер равен нулю.Я изменил разрешения на 777 в этом каталоге и родительских каталогах, но ничего не произошло.

Я уже попробовал тот же код на локальном хосте, и он работал отлично.Я использую веб-сайт joomla и компонент под названием RSform Pro, он используется для создания форм и предоставляет область, где вы можете редактировать данные POST перед сохранением их в базе данных.Вот код.

$content = file_get_contents($_POST['image_url']);

$date = date ('d-m-Y_h-m-i');   $random = rand(0,1000);
$name = 'mysite_'.$date.$random.'.png';

$filename = '/home/mysite/images/'.$name;

file_put_contents($filename, $content);

1 Ответ

2 голосов
/ 21 марта 2012

Когда я начинаю, в этом коде так много неправильного ...

  1. Вы должны проверить возвращаемое значение file_get_contents и убедиться, что ваш хост позволяет получать удаленные данные (для allow_url_fopen установлено значение On в php.ini)
  2. После этого все остальное ужасно неправильно и пробивает дыру в безопасности вашего приложения. Результат, который вы сохраняете в переменной $ content, должен быть записан в уникальный временный файл, единственный правильный способ генерации которогоиспользует функцию tempnam ().
  3. После присвоения file_put_contents имени файла, сгенерированного tempnam (), и проверки возвращаемых значений операции, вы должны проверить, является ли файл действительно изображением png, используя функции php fileinfo.
  4. Если предыдущий шаг выполнен успешно, используйте rename () для перемещения файла в постоянное хранилище, используя имя, которое вряд ли когда-либо будет повторяться.для этого используйте $filename = hash('sha256', openssl_random_pseudo_bytes(16)) . 'png'., затем сохраните полученное имя файла, чтобы его можно было использовать для построения ссылок, которые ваше приложение будет показывать пользователям.
...