У меня проблема с readfile () с внешнего сервера. Загруженный файл всегда сломан и имеет размер около 3,4kb. Он работает на локальном хосте.
первая:
$file_name = $_POST['myname']; readfile("http://www.ftj.eu/.../3n.pdf"); header("Content-Disposition: attachment; filename=$file_name" .date("mdy") . ".pdf");
второй:
Вы знаете, почему он не работает даже на локальном компьютере?
readfile("3n.pdf"); header("Content-Disposition: attachment; filename=$_POST['myname']" .date("mdy") . ".pdf");
Ошибка анализа: синтаксическая ошибка, неожиданный T_ENCAPSED_AND_WHITESPACE, ожидающий T_STRING или T_VARIABLE или T_NUM_STRING
Пожалуйста, помогите мне.
РЕДАКТИРОВАТЬ:
помогите мне сделать readfile с внешнего URL-адреса.
У вас есть синтаксическая ошибка, а не проблема с readfile()
как @Will уже упоминалось.
Замените это:
header("Content-Disposition: attachment; filename=$_POST['myname']" .date("mdy") . ".pdf");
С этим (добавление фигурных скобок вокруг $_POST['myname']
):
header("Content-Disposition: attachment; filename={$_POST['myname']}" .date("mdy") . ".pdf"); ^ ^
Редактировать:
Что касается readfile()
из внешнего URL-адреса, это то, что должно сказать об этом Руководство PHP:
URL-адрес может использоваться как имя файла с этой функцией, если обертки fopen включены. См. Fopen () для получения дополнительной информации о том, как указать имя файла. См. Поддерживаемые протоколы и обертки для ссылок на информацию о том, какие способности могут иметь различные обертки, заметки об их использовании и информация о любых предопределенных переменных, которые они могут предоставить.
Это означает, что вам нужно включить allow_url_fopen
в php.ini
или вы можете использовать завиток, чтобы загрузить файл на своем сервере, а затем передать его своим клиентам.
Пример использования curl:
<?php $remote_file_url = 'http://www.ftj.eu/.../3n.pdf'; $downloadedFileName = "your_pdf_file.pdf"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $remote_file_url); $downloadedFile = fopen($downloadedFileName, 'w+'); curl_setopt($ch, CURLOPT_FILE, $downloadedFile); curl_exec ($ch); curl_close ($ch); fclose($downloadedFile); readfile($downloadedFileName); header("Content-Disposition: attachment; filename={$_POST['myname']}" .date("mdy") . ".pdf");
Вероятно, ваш сервер настроен на то, чтобы не открывать удаленные файлы, поэтому вы не можете использовать fopen, readfile и подобные ему команды, если вы не измените его конфигурацию.