06 февраля 2006

РНР: способы получить содержимое файла

Допустим, к нам в скрипт GET-запросом пришла переменная URL, содержащая имя файла, который нужно прочитать.

1. Заметил, что многие делают так:
<?
ob_start();
$arrContent = file($_GET['url']);
foreach ($arrContent as $val)
echo $val;
$fullContent = ob_get_contents();
ob_end_clean();
?>
То есть по сути, file() во второй строке возвращает содержимое файла в виде массива его строк, а всё остальное требуется для перегона этого массива в одну длинную строку. Способ, на мой взгляд, не самый элегантный (хотя что-то подобное в комментах на php.net рекомендовалось использовать для получения объёма памяти в байтах, требуемого для хранения массива, т.е. буферизовать вывод print_r($massiv) и посчитать длину получившейся строки).

2. Можно продолжать брать содержимое массива через file(), т.к. это довольно быстрый и удобный способ, но перегонять его в строку через implode():
<?
$fullContent = implode("", file($_GET['url']));
?>
3. Самое простое - использовать специальную функцию file_get_contents():
<?
$fullContent = file_get_contents($_GET['url']);
?>
Правда, в этом случае РНР, кажется, должен открывать ссылки как файлы (см. php.ini). Я это проверяю так:
<?
$can = (function_exists("ini_get") &&
ini_get("allow_url_fopen") ? true : false);
?>

0 комментов:

Отправить комментарий