Intereting Posts
Json-файл не работает / не читает jsonarray не может быть преобразован в jsonobject Ошибка PHP Parse: синтаксическая ошибка, неожиданный T_ENCAPSED_AND_WHITESPACE, ожидающий T_STRING или T_VARIABLE или T_NUM_STRING MVC Design. Сколько контроллеров может / должно / должно быть иметь в проекте веб-приложения CodeIgniter MVC? Как вставить данные формы из нескольких полей в один столбец таблицы sql Преобразование Mysql Timestamp во времени с момента размещения php curl localhost медленен при выполнении параллельных запросов Соединение отклонено при запуске stream_socket_server & client через apache JWT API с Laravel, не может читать заголовок обновления токена на клиенте как получить доступ к переменным PHP из JavaScript? получение mysql_insert_id () при использовании ON DUPLICATE KEY UPDATE с PHP Включение файлового_компьютера на общем сервере Получить название страницы / URL Объединение двух многомерных массивов по определенному ключу Это хорошая идея использовать $ _SERVER в составе? Я хочу построить дерево с этим массивом. Это категории и подкатегории Id.

PHP-браузер, загружающий изображение, Facebook

Я ищу способ заставить браузер загружать изображение, а не просто отображать его.

Я уже много смотрел (и глубоко), и, похоже, нет стандартного способа сделать это правильно.

То, как Facebook это делает, это с некоторым PHP, я думаю, они поставили параметр в конце 😕 Dl = 1

Так что это, безусловно, страница PHP с переписыванием url, я думаю

<a class="itemAnchor" role="menuitem" tabindex="-1" href="http://img.ruphp.com/php/327910_2733459209258_1040639162_2895571_6924037615_o.jpg?dl=1" rel="ignore"><span class="itemLabel fsm">Download</span></a> 

Поэтому, если у вас есть какая-то подсказка, как они это делают … Моя подсказка заключается в том, что они, вероятно, что-то делают в заголовках страницы PHP

Они просто принудительно загружают с использованием HTTP-заголовков так же, как и с любым другим файлом:

 <?php $file = 'C:\\test.jpg'; header('Cache-Control: public'); header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename='.basename($file)); header('Content-Type: '.mime_content_type($file)); header('Content-Transfer-Encoding: binary'); header('Content-Length: '.filesize($file)); readfile($file); ?> 

X-SendFile

Для больших файлов или занятых веб-серверов я бы предложил использовать заголовок X-SendFile вместо использования функции readfile() (обратите внимание, что вам нужен mod_xsendfile установленный в Apache).

  header('X-Sendfile: '.$file); //readfile($file); 

.htccess

Как вы заметили, URL-адрес Facebook указывает на файл jpg, а не на PHP. Вам нужно будет переписать URL-адрес в файле .htaccess чтобы сделать этот трюк.

Что-то вроде следующего должно работать (обратите внимание, что вам нужно будет использовать реальный URL-адрес, проверяя содержимое $_SERVER для этого).

 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> 

Вам нужно будет определить переменную Content-Disposition в заголовке :

 <?php header("Content-Disposition: attachment; filename='downloaded.png'"); ?> 

Вы можете добиться этого, установив соответствующие заголовки перед отправкой файла. В частности, вы можете установить Content-Type независимо от типа вашего контента и Content-Disposition: attachment; filename=<yourfilename> Content-Disposition: attachment; filename=<yourfilename> .

Есть некоторые gotchas с IE; проверьте этот ответ для получения дополнительной информации.