Отримання контенту з файлів
Використання бібліотеки 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);
}