Отримання контенту з файлів

Використання бібліотеки 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);
}