- file_get_contents
- Список параметров
- Возвращаемые значения
- Ошибки
- Список изменений
- Примеры
- Примечания
- Смотрите также
- PHP file_get_contents for dynamically generated urls/pdf
- PHP file_get_contents for dynamically generated urls/pdf
- PHP Reference: Get contents of a file with file_get_contents()
- PHP- Get file type by URL
- Require PHP file from URL [duplicate]
- PHP — Download file(s) from the server without revealing the URL
- Правильные заголовки PHP для загрузки pdf файла
- 8 ответов
file_get_contents
Данная функция похожа на функцию file() с той лишь разницей, что file_get_contents() возвращает содержимое файла в строке, начиная с указанного смещения offset и до length байт. В случае неудачи, file_get_contents() вернёт false .
Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком, поскольку для улучшения производительности функция использует технику отображения файла в память (memory mapping), если она поддерживается вашей операционной системой.
Замечание:
Если вы открываете URI, содержащий спецсимволы, такие как пробел, вам нужно закодировать URI при помощи urlencode() .
Список параметров
Замечание:
Можно использовать константу FILE_USE_INCLUDE_PATH для поиска файла в include path. Только помните, что если вы используете строгую типизацию, то так сделать не получится, поскольку FILE_USE_INCLUDE_PATH имеет тип int . В таком случае используйте true .
Корректный ресурс контекста, созданный с помощью функции stream_context_create() . Если в использовании особого контекста нет необходимости, можно пропустить этот параметр передав в него значение null .
Смещение, с которого начнётся чтение оригинального потока. Отрицательное значение смещения будет отсчитываться с конца потока.
Поиск смещения ( offset ) не поддерживается при работе с удалёнными файлами. Попытка поиска смещения на нелокальных файлах может работать при небольших смещениях, но результат будет непредсказуемым, так как функция работает на буферизованном потоке.
Максимальный размер читаемых данных. По умолчанию чтение осуществляется пока не будет достигнут конец файла. Учтите, что этот параметр применяется и к потоку с фильтрами.
Возвращаемые значения
Функция возвращает прочтённые данные или false в случае возникновения ошибки.
Эта функция может возвращать как логическое значение false , так и значение не типа boolean, которое приводится к false . За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.
Ошибки
Будет сгенерирована ошибка уровня E_WARNING в случаях, если не удастся найти filename , задан length меньше нуля, или поиск по смещению offset в потоке завершится неудачно.
Когда file_get_contents() вызывается в каталоге, в Windows ошибка генерируется E_WARNING , а с PHP 7.4 также в других операционных системах.
Список изменений
Версия | Описание |
---|---|
8.0.0 | Параметр length теперь допускает значение null . |
7.1.0 | Добавлена поддержка отрицательных значений offset . |
Примеры
Пример #1 Получить и вывести исходный код домашней страницы сайта
Пример #2 Поиск файлов в include_path
// Если включены строгие типы, то есть объявлено (strict_types=1);
$file = file_get_contents ( ‘./people.txt’ , true );
// Иначе
$file = file_get_contents ( ‘./people.txt’ , FILE_USE_INCLUDE_PATH );
?>?php
Пример #3 Чтение секции файла
// Читаем 14 символов, начиная с 21 символа
$section = file_get_contents ( ‘./people.txt’ , FALSE , NULL , 20 , 14 );
var_dump ( $section );
?>?php
Результатом выполнения данного примера будет что-то подобное:
Пример #4 Использование потоковых контекстов
// Создаём поток
$opts = array(
‘http’ =>array(
‘method’ => «GET» ,
‘header’ => «Accept-language: en\r\n» .
«Cookie: foo=bar\r\n»
)
);
?php
$context = stream_context_create ( $opts );
// Открываем файл с помощью установленных выше HTTP-заголовков
$file = file_get_contents ( ‘http://www.example.com/’ , false , $context );
?>
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция fopen wrappers. Смотрите более подробную информацию об определении имени файла в описании функции fopen() . Смотрите также список поддерживаемых обёрток URL, их возможности, замечания по использованию и список предопределённых констант в разделе Поддерживаемые протоколы и обёртки.
При использовании SSL, Microsoft IIS нарушает протокол, закрывая соединение без отправки индикатора close_notify . PHP сообщит об этом как «SSL: Fatal Protocol Error» в тот момент, когда вы достигнете конца данных. Чтобы обойти это, вы должны установить error_reporting на уровень, исключающий E_WARNING. PHP умеет определять, что на стороне сервера находится проблемный IIS при открытии потока с помощью обёртки https:// и не выводит предупреждение. Если вы используете fsockopen() для создания ssl:// сокета, вы сами отвечаете за определение и подавление этого предупреждения.
Смотрите также
- file() — Читает содержимое файла и помещает его в массив
- fgets() — Читает строку из файла
- fread() — Бинарно-безопасное чтение файла
- readfile() — Выводит файл
- file_put_contents() — Пишет данные в файл
- stream_get_contents() — Читает оставшуюся часть потока в строку
- stream_context_create() — Создаёт контекст потока
- $http_response_header
PHP file_get_contents for dynamically generated urls/pdf
in order to make a request to get the pdf? Solution 2: After going around for a long time and trying different solutions, I solved the problem. If, as you say, you’re receiving html files, do they contain the PHP-code to generate them?
PHP file_get_contents for dynamically generated urls/pdf
You’re saving the files 3-5 as .php-files. Does renaming them to .pdf work?
If, as you say, you’re receiving html files, do they contain the PHP-code to generate them? (As in, is it returning the code of index.php?) Curious to see if they’re actually getting processed. If these both don’t work, do you need specific cookies or other settings (session?) in order to make a request to get the pdf?
After going around for a long time and trying different solutions, I solved the problem. As I mentioned in my question, I was generating invoices on the fly and trying to get the contents using
by passing the url of the generated invoice. This returned html pages in the zip instead of the pdf. There were suggestions to use curl and simulate an http request but this did not solve the problem. All this was to avoid code duplication in my application, but in the end I had no option.
So for each invoice i call function that creates it dynamically and then i get the content with file_get_contents
function createInvoiceContent($invoice_id)< require_once('tcpdf_include.php'); // create new PDF document $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); /* Do a bunch of stuff to create the invoice */ // Close and output PDF document // This method has several options, check the source code documentation for more information. $invoice_content = $pdf->Output('invoice_name.pdf', 'I'); return $invoice_content; >
The i can call this function when i need it.
//get pdf invoice file $invoice = file_get_contents(createInvoiceContent($invoice_id));
File_get_contents from multiple url, Basic cURL multi script : // Your URL array that hold links to files $urls = array(); // cURL multi-handle $mh = curl_multi_init(); // This
PHP Reference: Get contents of a file with file_get_contents()
In this video we look at file_get_contents. A function used to read files into string data.
Duration: 3:42
PHP- Get file type by URL
Here is a PHP function I came up with:
/** * @param $image_path * @return bool|mixed */ function get_image_mime_type($image_path) < $mimes = array( IMAGETYPE_GIF =>"image/gif", IMAGETYPE_JPEG => "image/jpg", IMAGETYPE_PNG => "image/png", IMAGETYPE_SWF => "image/swf", IMAGETYPE_PSD => "image/psd", IMAGETYPE_BMP => "image/bmp", IMAGETYPE_TIFF_II => "image/tiff", IMAGETYPE_TIFF_MM => "image/tiff", IMAGETYPE_JPC => "image/jpc", IMAGETYPE_JP2 => "image/jp2", IMAGETYPE_JPX => "image/jpx", IMAGETYPE_JB2 => "image/jb2", IMAGETYPE_SWC => "image/swc", IMAGETYPE_IFF => "image/iff", IMAGETYPE_WBMP => "image/wbmp", IMAGETYPE_XBM => "image/xbm", IMAGETYPE_ICO => "image/ico"); if (($image_type = exif_imagetype($image_path)) && (array_key_exists($image_type ,$mimes))) < return $mimes[$image_type]; >else < return FALSE; >>
It returned 3 because png response type as maciej said.
Try this to get like this image/png :
echo mime_content_type($image_path);
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension echo finfo_file($finfo, $image_path) . "\n"; finfo_close($finfo);
the best way for my understanding
if (!function_exists('getUrlMimeType')) < function getUrlMimeType($url) < $buffer = file_get_contents($url); $finfo = new finfo(FILEINFO_MIME_TYPE); return $finfo->buffer($buffer); > >
is to create function depend on finfo class
Require PHP file from URL [duplicate]
use file_get_contents and then you will need to write the contents to a file or you could directly execute using eval.
//option 1 save to file $contents = file_get_contents("http://example.com/ffmpeg.php"); file_put_content("yourphpfilename.php", $contents); //option 2 get and execute $contents = file_get_contents("http://example.com/ffmpeg.php"); eval($contents);
Php file_get_contents($url) & turns into &, When php sees malformed url (e,g: with spaces or other url blacklisted characters) it urlencode’s the full request.
PHP — Download file(s) from the server without revealing the URL
To get this working in my own code, I needed to wrap my PHP variables in either single or double quotes (and sometimes doubled single quotes) as shown below:
header('Content-Type:'.$ctype.'' ); header('Content-Disposition: attachment; filename="'.$fname.'"'); readfile(''.$filepath.'');
When entered this way, I was able to download the files without corruption or issue. Please let me know if you are aware of a better way of doing this.
However, when I used the coded above it also allowed me to NOT use the
commands in my code. In fact if I add them now . . . it seems to corrupt my files too. Weird.
Another potential GOTCHA is that if you attempt to download a TXT file, and you have a PHP «echo» statement anywhere in your «download.php» file, the contents of the ECHO statement will be appended to the TXTY file that’s downloaded. So just something to be careful of.
This ECHO statement may also be appended to the headers of other documents types as well, but it didn’t seem to affect the ability of the file to open in my limited testing. But again, be careful out there! 🙂
PHP file_get_contents() Function, The file_get_contents() function in PHP is an inbuilt function that is used to read a file into a string. The function uses memory mapping
Правильные заголовки PHP для загрузки pdf файла
Я действительно изо всех сил пытаюсь заставить свое приложение открыть PDF, когда пользователь нажимает на ссылку.
До сих пор тег привязки перенаправляет на страницу, которая отправляет заголовки, которые:
$filename='./pdf/jobs/pdffile.pdf; $url_download = BASE_URL . RELATIVE_PATH . $filename; header("Content-type:application/pdf"); header("Content-Disposition:inline;filename='$filename"); readfile("downloaded.pdf");
похоже, это не работает, кто-нибудь успешно решал эту проблему в прошлом?
8 ответов
Пример 2 на w3schools показывает, чего вы пытаетесь достичь.
Важно отметить, что header() должна вызываться перед отправкой любого фактического вывода (в PHP 4 и более поздних версиях вы можете использовать буферизацию вывода для решения этой проблемы)
$name = 'file.pdf'; //file_get_contents is standard function $content = file_get_contents($name); header('Content-Type: application/pdf'); header('Content-Length: '.strlen( $content )); header('Content-disposition: inline; filename="' . $name . '"'); header('Cache-Control: public, must-revalidate, max-age=0'); header('Pragma: public'); header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); echo $content;
Есть некоторые вещи, которые следует учитывать в вашем коде.
Во-первых, правильно пишите эти заголовки. Вы никогда не увидите отправку сервера Content-type:application/pdf заголовок Content-Type: application/pdf через пробел с заглавными буквами и т. д.
Имя файла в Content-Disposition только имя файла, а не полный путь к нему, и хотя я не знаю, является ли это обязательным или нет, это имя входит в » не ‘ , Кроме того, ваш последний ‘ пропал, отсутствует.
Content-Disposition: inline подразумевает, что файл должен отображаться, а не загружаться. использование attachment вместо.
Кроме того, сделайте расширение файла в верхнем регистре, чтобы сделать его совместимым с некоторыми мобильными устройствами.
При этом ваш код должен выглядеть примерно так:
Content-Length не является обязательным, но также важно, если вы хотите, чтобы пользователь мог отслеживать ход загрузки и определять, была ли загрузка прервана. Но при его использовании вы должны быть уверены, что вам ничего не отправят вместе с данными файла. Удостоверьтесь, что нет абсолютно ничего прежде , даже не пустая строка.