2014-11-05 4 views
0

Я создаю дискуссионный форум как часть большего приложения, которое я создаю, форум - это всего лишь 1 раздел приложения.Загрузить/загрузить/сохранить изображение на локальный сервер с удаленного сервера, используя URL-адрес изображения и PHP?

Для полей TextArea при публикации новой темы или сообщения Ответ, я решил, что ничего не так хорошо, как PageDown Markdown Library. Это тот же, что StackOverflow использует на всех своих сайтах, и он работает лучше, чем многие из его конкурентов.

Способ передачи библиотеки, хотя я не доволен функциональностью по умолчанию Insert Image. Вы нажимаете кнопку, чтобы вставить изображение, и оно позволяет вам вводить URL-адрес изображения, а затем вставляет соответствующий синтаксис MarkDown для отображения связанного изображения.

Это просто не отрежет. Мне нужна функциональность, которую вы видите в StackOverflow! Очень похоже.

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

  • Загрузить изображение с вашего компьютера
  • Вставьте URL-адрес изображения, затем он будет СКАЧИВАТЬ изображение с этого URL-адреса и вставить его в сообщение так же, как если бы вы его загрузили с вашего компьютера. Это важно, чтобы не путать этот шаг. ИТ не следует просто вставлять изображение, привязывая его к исходному URL-адресу изображения. Вместо этого он будет принимать этот URL-адрес и загружать/загружать изображение на тот же сервер, что и опция upload from computer, а затем вставляет новый URL-адрес изображения, указывающий на недавно загруженное изображение!

На основе некоторого простого HTML, как показано ниже, для диалогового окна с файлом для загрузки с компьютеров, которое у меня уже есть. Мне нужно придумать какой-нибудь JavaScript и PHP, который будет загружать/сохранять удаленное изображение в мою папку загрузки на моем сервере, когда нажимается кнопка, используя только URL-адрес, который будет внутри поля ввода текста URL.

Так что нужно будет сделать несколько вещей ...

  • Fetch и сохранить файл изображения на мои загрузки папки с помощью PHP, когда единственное, что функция PHP получит это URL изображения который может находиться на одном сервере или, скорее всего, на удаленном сервере.
  • После успешного сохранения/выгрузки изображения с URL-адреса функция PHP вернет строку JSON со статусом/ошибкой и в случае успеха затем вернет фактический URL-адрес и имя файла, в котором новое изображение сохраняется на локальном сервер. Сценарий JavaScript/AJAX получит этот ответ JSON и вставляет синтаксис Markdown для изображения в редактор PageDown.
  • Функция PHP должна гарантировать, что URL-адрес, который он пытается сохранить/загрузить, является допустимым файлом изображения, а не каким-то вредоносным файлом! Кроме того, просто не просто файл неправильного типа файлов, например, файл без изображения, если мы не разрешаем тип файла.
  • Он будет частью модуля, установленного на многих серверах динозавров, поэтому он должен работать как можно больше серверов!

    Из Интернета

    С вашего компьютера

Я был бы признателен любой помощи, подсказки, фрагменты кода или что-нибудь, чтобы помочь с этим. На этом этапе мне просто нужно создать nie-функцию PHP, которая будет загружать изображения с удаленного URL-адреса, а также убедиться, что URL-адрес, переданный в файл, является реальным файлом изображения или даже лучше, чем в массиве разрешенных типов файлов!

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

ответ

2

Самый простой способ загрузить файл с удаленного сервера будет использовать копию (http://php.net/manual/en/function.copy.php):

copy('http://someurl.com/image.png', '/var/www/uploads/image.png'); 

Поскольку эта функция возвращает логическое значение, то легко определить, была ли операция успешной и создать ответ JSON.

Чтобы убедиться, что файл является реальным изображением, к сожалению, нет уверенности в том, что это файл. Вероятно, достаточно проверить миметик. Вы можете использовать для этого FINFO (http://php.net/manual/en/function.finfo-file.php):

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
echo finfo_file($finfo, $filename); 
finfo_close($finfo); 

Для GIF, это будет возвращать изображения/GIF, например. Вам нужно будет скопировать список всех типов mimetypes, которые вы хотите разрешить.

+0

Обратите внимание, что вы можете использовать библиотеку php для проверки формата изображения, например Imagick с getImageFormat(). – technico

Смежные вопросы