Отримання контенту з файлів
Використання бібліотеки curl для отримання контенту. Увага! Необхідно перевірити php.ini, щоби впевнитися, чи відкрито розширення curl
(зазвичай, по замовчанню воно є).
/* $url URL віддаленого файлу $contents Отриманий контент */ $ch = curl_init(); $timeout = 5; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $contents = curl_exec($ch); curl_close($ch); echo $contents;
Перевіряємо, чи є файл на віддаленому сервері, отримуємо вміст у пам'ть сервера з подальшим виводом в браузер, або його обробкою при необхідності.
/* $url URL віддаленого файлу $http_code Отриманий контент */ public static function getContent($url){ $flag = 0; do { $hCurl = curl_init(); curl_setopt($hCurl, CURLOPT_HEADER, 0); curl_setopt($hCurl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($hCurl, CURLOPT_TIMEOUT, 120); curl_setopt($hCurl, CURLOPT_CONNECTTIMEOUT, 4); curl_setopt($hCurl, CURLOPT_URL, $url); $data = curl_exec($hCurl); if (curl_errno($hCurl)) { break; } $http_code = curl_getinfo($hCurl, CURLINFO_HTTP_CODE); if ($http_code >= 400) { //400 - 600 is server error break; } $flag = 1; } while (0); curl_close($hCurl); if ($flag) { return $data; } else { return false; } }
Перевіряємо, чи є файл на віддаленому сервері, отримуємо його вміст і записуємо в локальний файл для подальшого використання.
/* $filename Ім'я файлу для збереження $url URL віддаленого файлу */ public static function getContentToFile($fileName, $url) { $out = fopen($fileName, 'w'); if (empty($out)) { return false; } $flag = 0; do { $hCurl = curl_init(); curl_setopt($hCurl, CURLOPT_HEADER, 0); curl_setopt($hCurl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($hCurl, CURLOPT_TIMEOUT, 120); curl_setopt($hCurl, CURLOPT_CONNECTTIMEOUT, 4); curl_setopt($hCurl, CURLOPT_FILE, $out); curl_setopt($hCurl, CURLOPT_URL, $url); $data = curl_exec($hCurl); if (curl_errno($hCurl)) { break; } $http_code = curl_getinfo($hCurl, CURLINFO_HTTP_CODE); if ($http_code >= 400) { //400 - 600 is server error break; } $flag = 1; } while (0); curl_close($hCurl); fclose($out); if ($flag) { return $data; } else { return false; } }
Якщо необхідно лише отримати вміст файла у строку, використовуємо file_get_contents()
, бо швидкість його обробки набагато вища за fread()
.
$homepage = file_get_contents('http://www.example.com/'); echo $homepage;
Для отримання додаткових параметрів файла потрібні fread()
, та filesize()
.
$filename = "/usr/local/something.txt"; $handle = fopen ($filename, "r"); // При чтанні двоічного файлу необхіно додати другий параметр "rb" $contents = fread($handle, filesize ($filename)); fclose($handle);
Якщо файл для читання, це - віддалений файл, або файл потоку, то попередній приклад використовувати неможливо, оскільки filesize не може отримати розмір цих файлів. Тому, необхідно знайти кінець файлу по звротному значенню feof()
або fread()
.
$handle = fopen('http://www.baidu.com', 'r'); $content = ''; while(!feof($handle)){ $content .= fread($handle, 8080); } echo $content; fclose($handle);
Варіант отримання вмісту URL-адреси, але з перевіркою успіху дії (з використанням функції fgets()).
$handel = @fopen("/tmp/inputfile.txt", "r"); if ($handel) { while ($buffer = fgets($handel, 4096) != false) { echo $buffer; } if (!feof($handel)) { echo "Error: unexpected fgets() fail\n"; } fclose($handle); }
Построкове читання контенту з файла. Після виклику функції fgets()
вказівник зміщується на чергову строку.
$file = fopen("welcome.txt", "r") or exit("Unable to open file!"); while(!feof($file)) { echo fgets($file). "<br>"; } fclose($file);
Построкове читання контенту з файла. Після виклику цієї функції fgetss()
видалить будь-які теги HTML и PHP из прочитаного тексту. Можна скористатися необов'язковим третім параметром, щоб вказати, які теги не видаляються.
$handle = fopen('./file.txt', 'r'); while(!feof($handle)){ echo fgetss($handle, 1024, '<br>'); } fclose($handle);
Записати інформацію в data.txt в поточному каталозі. Якщо в поточному каталозі немає файла data.txt, то він буде створений.
$file = "data.txt"; $content = "Зміст вмісту \r\n Перша строка \r\n Друга строка"; if(!$fp = fopen($file,'a')) { echo "Відкриваємо файл $file!"; exit; } if(fwrite($fp,$content) === FALSE) { echo "Запис файлу невдалий!"; exit; } echo "Запис файлу закінчено."; fclose($fp);
Відкриття URL за допомоги fsockopen()
, яка вертає файловый вказівник false в разі невдачі при відкритті сокету інтернет-з'єднання.
$fp = fsockopen('http://www.baidu.com', 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br>\n"; } else { $out = "GET / HTTP/1.1\r\n"; $out .= "Host: www.example.com\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); }