Intereting Posts

Как отображать изображения с FTP-сервера на странице HTML?

Я пытаюсь создать галерею изображений для отображения изображений с FTP-сервера. Для FTP-сервера требуется аутентификация по паролю. Я успешно сканирую файлы, но изображение не отображается на странице и, щелкнув на странице справки, спросите имя пользователя и пароль.

$content = ''; $ftp_server = "255.122.111.111"; $ftp_user = "user_name"; $ftp_pass = "password"; $conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server"); if (@ftp_login($conn_id, $ftp_user, $ftp_pass)) { $content .= "<br />Connected as $ftp_user@$ftp_server\n"; } else { $content .= "<br />Couldn't connect as $ftp_user\n"; } $files = ftp_nlist($conn_id, $dir); foreach($files as $file_name) { $content.= ' <div> <a href="ftp://'.$ftp_server.'/'.$file_name.'"> <img src="ftp://'.$ftp_server.'/'.$file_name.'" width="150" height="150"> </a> </div>'; } 

Что мне нужно сделать, чтобы изображения отображались на странице?

Вы можете подготовить сценарий (например, getimage.php ), который по запросу …

  • получает файл изображения с FTP-сервера в (двоичную) строковую переменную, как в вашем скрипте, затем
  • правильно подготавливает заголовок изображения, как в приведенном ниже фрагменте,
    (также см. эту ссылку из stackoverflow )
  • печатает (двоичную) строку изображения.

В коде HTML вставьте обычный теги.

Выполняет фрагмент сценария getimage.php . Тип изображения извлекается вручную:

 // Get the image contents from FTP server into $binary // $binary contains image text now // Then .... header('Content-type: ' . image_file_type_from_binary($binary)); echo $binary; function image_file_type_from_binary($binary) { if ( !preg_match( '/\A(?:(\xff\xd8\xff)|(GIF8[79]a)|(\x89PNG\x0d\x0a)|(BM)|(\x49\x49(?:\x2a\x00|\x00\x4a))|(FORM.{4}ILBM))/', $binary, $hits ) ) { return 'application/octet-stream'; } $type = array ( 1 => 'image/jpeg', 2 => 'image/gif', 3 => 'image/png', 4 => 'image/x-windows-bmp', 5 => 'image/tiff', 6 => 'image/x-ilbm', ); return $type[count($hits) - 1]; } 

Открытое FTP-соединение и не может переходить с вашего сервера на клиент (веб-браузер). Хотя вы можете добавить учетные данные на URL-адрес FTP, таким образом сделать учетные данные общедоступной информацией.


Лучшее решение заключается в маршрутизации изображения через ваш веб-сервер, скрывая не только учетные данные, но и исходный источник изображения.

Создайте сценарий (PHP или любой другой, который вы используете), который действует как источник изображения (вы будете использовать его в атрибуте <img src=...> . Сценарий будет «создавать» изображение, загрузив его с FTP-сервера.

Самый тривиальный способ реализовать такой скрипт (скажем, image.php ):

 <? header('Content-Type: image/jpeg'); echo file_get_contents('ftp://username:password@ftp.example.com/path/image.jpg'); 

И затем вы используете его в HTML как:

 <a src="image.php" /> 

(предполагая, что image.php находится в той же папке, что и ваша HTML-страница)


Скрипт использует обертки URL-адресов FTP . Если это не разрешено на вашем веб-сервере, вам нужно идти более жестко с функциями FTP. См. PHP: Как читать файл с FTP-сервера в переменную?


Хотя для действительно правильного решения вы должны предоставить некоторые HTTP-заголовки, связанные с файлом, такие как Content-Length , Content-Type и Content-Disposition . Для этого см. Загрузка файла через PHP-скрипт с FTP-сервера в браузер с заголовком Content-Length без сохранения файла на веб-сервере .