I was resolve all problem, it’s work all links
public function getTitle($url)
{
try {
if (strpos($url, 'www.youtube.com/watch') !== false) {
$apikey = 'AIzaSyCPeA3MlMPeT1CU18NHfJawWAx18VoowOY';
$videoId = explode('&', explode("=", $url)[1])[0];
$url = 'https://www.googleapis.com/youtube/v3/videos?id=' . $videoId . '&key=' . $apikey . '&part=snippet';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response);
$value = json_decode(json_encode($data), true);
$title = $value['items'][0]['snippet']['title'];
} else {
set_error_handler(
function () {
return false;
}
);
if (($str = file_get_contents($url)) === false) {
$title = $url;
} else {
preg_match("/<title>(.*)</title>/i", $str, $title);
$title = $title[1];
if (preg_replace('/[x00-x1Fx7F-xFF]/', '', $title))
$title = utf8_encode($title);
$title = html_entity_decode($title);
}
restore_error_handler();
}
} catch (Exception $e) {
$title = $url;
}
return $title;
}
I am making use of simplehtmldom which has this funciton:
// get html dom form file
function file_get_html() {
$dom = new simple_html_dom;
$args = func_get_args();
$dom->load(call_user_func_array('file_get_contents', $args), true);
return $dom;
}
I use it like so:
$html3 = file_get_html(urlencode(trim("$link")));
Sometimes, a URL may just not be valid and I want to handle this. I thought I could use a try and catch but this hasn’t worked since it doesn’t throw an exception, it just gives a php warning like this:
[06-Aug-2010 19:59:42] PHP Warning: file_get_contents(http://new.mysite.com/ghs 1/) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/example/public_html/other/simple_html_dom.php on line 39
Line 39 is in the above code.
How can i correctly handle this error, can I just use a plain ifcondition, it doesn’t look like it returns a boolean.
Thanks all for any help
Update
Is this a good solution?
if(fopen(urlencode(trim("$next_url")), 'r')){
$html3 = file_get_html(urlencode(trim("$next_url")));
}else{
//do other stuff, error_logging
return false;
}
I am making use of simplehtmldom which has this funciton:
// get html dom form file
function file_get_html() {
$dom = new simple_html_dom;
$args = func_get_args();
$dom->load(call_user_func_array('file_get_contents', $args), true);
return $dom;
}
I use it like so:
$html3 = file_get_html(urlencode(trim("$link")));
Sometimes, a URL may just not be valid and I want to handle this. I thought I could use a try and catch but this hasn’t worked since it doesn’t throw an exception, it just gives a php warning like this:
[06-Aug-2010 19:59:42] PHP Warning: file_get_contents(http://new.mysite.com/ghs 1/) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/example/public_html/other/simple_html_dom.php on line 39
Line 39 is in the above code.
How can i correctly handle this error, can I just use a plain ifcondition, it doesn’t look like it returns a boolean.
Thanks all for any help
Update
Is this a good solution?
if(fopen(urlencode(trim("$next_url")), 'r')){
$html3 = file_get_html(urlencode(trim("$next_url")));
}else{
//do other stuff, error_logging
return false;
}
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
file_get_contents — Читает содержимое файла в строку
Описание
file_get_contents(
string $filename,
bool $use_include_path = false,
?resource $context = null,
int $offset = 0,
?int $length = null
): string|false
Использование функции file_get_contents()
наиболее предпочтительно в случае необходимости получить
содержимое файла целиком, поскольку для улучшения производительности
функция использует технику отображения файла в память
(memory mapping), если она поддерживается вашей операционной системой.
Замечание:
Если вы открываете URI, содержащий спецсимволы, такие как пробел,
вам нужно закодировать URI при помощи urlencode().
Список параметров
-
filename -
Имя читаемого файла.
-
use_include_path -
Замечание:
Можно использовать константу
FILE_USE_INCLUDE_PATHдля поиска файла
в include path.
Только помните, что если вы используете строгую типизацию,
то так сделать не получится, поскольку
FILE_USE_INCLUDE_PATHимеет тип int.
В таком случае используйтеtrue. -
context -
Корректный ресурс контекста, созданный с помощью функции
stream_context_create(). Если в использовании
особого контекста нет необходимости, можно пропустить этот параметр
передав в него значениеnull. -
offset -
Смещение, с которого начнётся чтение оригинального потока.
Отрицательное значение смещения будет отсчитываться с конца потока.Поиск смещения (
offset) не поддерживается при
работе с удалёнными файлами. Попытка поиска смещения на нелокальных
файлах может работать при небольших смещениях, но результат будет
непредсказуемым, так как функция работает на буферизованном потоке. -
length -
Максимальный размер читаемых данных. По умолчанию чтение
осуществляется пока не будет достигнут конец файла. Учтите, что
этот параметр применяется и к потоку с фильтрами.
Возвращаемые значения
Функция возвращает прочтённые данные или 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 Получить и вывести исходный код домашней страницы сайта
<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>
Пример #2 Поиск файлов в include_path
<?php
// Если включены строгие типы, то есть объявлено (strict_types=1);
$file = file_get_contents('./people.txt', true);
// Иначе
$file = file_get_contents('./people.txt', FILE_USE_INCLUDE_PATH);
?>
Пример #3 Чтение секции файла
<?php
// Читаем 14 символов, начиная с 21 символа
$section = file_get_contents('./people.txt', FALSE, NULL, 20, 14);
var_dump($section);
?>
Результатом выполнения данного примера
будет что-то подобное:
string(14) "lle Bjori Ro"
Пример #4 Использование потоковых контекстов
<?php
// Создаём поток
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: enrn" .
"Cookie: foo=barrn"
)
);$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
Bart Friederichs ¶
10 years ago
file_get_contents can do a POST, create a context for that first:
<?php
$opts
= array('http' =>
array(
'method' => 'POST',
'header' => "Content-Type: text/xmlrn".
"Authorization: Basic ".base64_encode("$https_user:$https_password")."rn",
'content' => $body,
'timeout' => 60
)
);
$context = stream_context_create($opts);
$url = 'https://'.$https_server;
$result = file_get_contents($url, false, $context, -1, 40000);
?>
soger ¶
4 months ago
There's barely a mention on this page but the $http_response_header will be populated with the HTTP headers if your file was a link. For example if you're expecting an image you can do this:
<?php
$data = file_get_contents('https://example.net/some-link');$mimetype = null;
foreach ($http_response_header as $v) {
if (preg_match('/^content-type:s*(image/[^;snr]+)/i', $v, $m)) {
$mimetype = $m[1];
}
}
if (!
$mimetype) {
// not an image
}
Anonymous ¶
1 year ago
if the connection is
content-encoding: gzip
and you need to manually ungzip it, this is apparently the key
$c=gzinflate( substr($c,10,-8) );
(stolen from the net)
453034559 at qq dot com ¶
1 year ago
//从指定位置获取指定长度的文件内容
function file_start_length($path,$start=0,$length=null){
if(!file_exists($path)) return false;
$size=filesize($path);
if($start<0) $start+=$size;
if($length===null) $length=$size-$start;
return file_get_contents($path, false, null, $start, $length );
}
allenmccabe at gmail dot com ¶
1 year ago
I'm not sure why @jlh was downvoted, but I verified what he reported.
>>> file_get_contents($path false, null, 5, null)
=> ""
>>> file_get_contents($path, false, null, 5, 5)
=> "r/bin"
This blog post is all about how to handle errors from the PHP file_get_contents function, and others which work like it.
The file_get_contents function will read the contents of a file into a string. For example:
<?php
$text = file_get_contents("hello.txt");
echo $text;
You can try this out on the command-line like so:
$ echo "hello" > hello.txt
$ php test.php
hello
This function is widely used, but I’ve observed that error handling around it is often not quite right. I’ve fixed a few bugs involving incorrect I/O error handling recently, so here are my thoughts on how it should be done.
How file_get_contents fails
For legacy reasons, this function does not throw an exception when something goes wrong. Instead, it will both log a warning, and return false.
<?php
$filename = "not-a-real-file.txt";
$text = file_get_contents($filename);
echo $text;
Which looks like this when you run it:
$ php test.php
PHP Warning: file_get_contents(not-a-real-file.txt): failed to open stream: No such file or directory in test.php on line 3
PHP Stack trace:
PHP 1. {main}() test.php:0
PHP 2. file_get_contents() test.php:3
Warnings are not very useful on their own, because the code will continue on without the correct data.
Error handling in four steps
If anything goes wrong when you are reading a file, your code should be throwing some type of Exception which describes the problem. This allows developers to put a try {} catch {} around it, and avoids nasty surprises where invalid data is used later.
Step 1: Detect that the file was not read
Any call to file_get_contents should be immediately followed by a check for that false return value. This is how you know that there is a problem.
<?php
$filename = "not-a-real-file.txt";
$text = file_get_contents($filename);
if($text === false) {
throw new Exception("File was not loaded");
}
echo $text;
This now gives both a warning and an uncaught exception:
$ php test.php
PHP Warning: file_get_contents(not-a-real-file.txt): failed to open stream: No such file or directory in test.php on line 3
PHP Stack trace:
PHP 1. {main}() test.php:0
PHP 2. file_get_contents() test.php:3
PHP Fatal error: Uncaught Exception: File was not loaded in test.php:5
Stack trace:
#0 {main}
thrown in test.php on line 5
Step 2: Suppress the warning
Warnings are usually harmless, but there are several good reasons to suppress them:
- It ensures that you are not depending on a global error handler (or the absence of one) for correct behaviour.
- The warning might appear in the middle of the output, depending on
php.ini. - Warnings can produce a lot of noise in the logs
Use @ to silence any warnings from a function call.
<?php
$filename = "not-a-real-file.txt";
$text = @file_get_contents($filename);
if($text === false) {
throw new Exception("File was not loaded");
}
echo $text;
The output is now only the uncaught Exception:
$ php test.php
PHP Fatal error: Uncaught Exception: File was not loaded in test.php:5
Stack trace:
#0 {main}
thrown in test.php on line 5
Step 3: Get the reason for the failure
Unfortunately, we lost the “No such file or directory” message, which is pretty important information, which should go in the Exception. This information is retrieved from the old-style error_get_last method.
This function might just return empty data, so you should check that everything is set and non-empty before you try to use it.
<?php
$filename = "not-a-real-file.txt";
error_clear_last();
$text = @file_get_contents($filename);
if($text === false) {
$e = error_get_last();
$error = (isset($e) && isset($e['message']) && $e['message'] != "") ?
$e['message'] : "Check that the file exists and can be read.";
throw new Exception("File '$filename' was not loaded. $error");
}
echo $text;
This now embeds the failure reason directly in the message.
$ php test.php
PHP Fatal error: Uncaught Exception: File 'not-a-real-file.txt' was not loaded. file_get_contents(not-a-real-file.txt): failed to open stream: No such file or directory in test.php:9
Stack trace:
#0 {main}
thrown in test.php on line 9
Step 4: Add a fallback
The last time I introduced error_clear_last()/get_last_error() into a code-base, I learned out that HHVM does not have these functions.
Call to undefined function error_clear_last()
The fix for this is to write some wrapper code, to verify that each function exists.
<?php
$filename = 'not-a-real-file';
clearLastError();
$text = @file_get_contents($filename);
if ($text === false) {
$error = getLastErrorOrDefault("Check that the file exists and can be read.");
throw new Exception("Could not retrieve image data from '$filename'. $error");
}
echo $text;
/**
* Call error_clear_last() if it exists. This is dependent on which PHP runtime is used.
*/
function clearLastError()
{
if (function_exists('error_clear_last')) {
error_clear_last();
}
}
/**
* Retrieve the message from error_get_last() if possible. This is very useful for debugging, but it will not
* always exist or return anything useful.
*/
function getLastErrorOrDefault(string $default)
{
if (function_exists('error_clear_last')) {
$e = error_get_last();
if (isset($e) && isset($e['message']) && $e['message'] != "") {
return $e['message'];
}
}
return $default;
}
This does the same thing as before, but without breaking other PHP runtimes.
$ php test.php
PHP Fatal error: Uncaught Exception: Could not retrieve image data from 'not-a-real-file'. file_get_contents(not-a-real-file): failed to open stream: No such file or directory in test.php:7
Stack trace:
#0 {main}
thrown in test.php on line 7
Since HHVM is dropping support for PHP, I expect that this last step will soon become unnecessary.
How not to handle errors
Some applications put a series of checks before each I/O operation, and then simply perform the operation with no error checking. An example of this would be:
<?php
$filename = "not-a-real-file.txt";
// Check everything!
if(!file_exists($filename)) {
throw new Exception("$filename does not exist");
}
if(!is_file($filename)) {
throw new Exception("$filename is not a file");
}
if(!is_readable($filename)) {
throw new Exception("$filename cannot be read");
}
// Assume that nothing can possibly go wrong..
$text = @file_get_contents($filename);
echo $text;
You could probably make a reasonable-sounding argument that checks are a good idea, but I consider them to be misguided:
- If you skip any actual error handling, then your code is going to fail in more surprising ways when you encounter an I/O problem that could not be detected.
- If you do perform correct error handling as well, then the extra checks add nothing other than more branches to test.
Lastly, beware of false positives. For example, the above snippet will reject HTTP URL’s, which are perfectly valid for file_get_contents.
Conclusion
Most PHP code now uses try/catch/finally blocks to handle problems, but the ecosystem really values backwards compatibility, so existing functions are rarely changed.
The style of error reporting used in these I/O functions is by now a legacy quirk, and should be wrapped to consistently throw a useful Exception.
Я использую simplehtmldom, который имеет этот funciton:
// get html dom form file function file_get_html() { $dom = new simple_html_dom; $args = func_get_args(); $dom->load(call_user_func_array('file_get_contents', $args), true); return $dom; }
Я использую его так:
- получить id видео vimeo с regexp preg_match
- Вызовите php из javascript и верните массив из php в функцию Javascript
- Как разместить массив в MySQL
- как вставить пустое значение в поле типа даты mysql?
- DOMDocument :: loadHTMLFile () изменить пользовательский агент
$html3 = file_get_html(urlencode(trim("$link")));
Иногда URL-адрес может быть недействительным, и я хочу обработать это. Я думал, что могу использовать try и catch, но это не сработало, поскольку оно не генерирует исключение, оно просто дает php-предупреждение:
[06-Aug-2010 19:59:42] PHP Warning: file_get_contents(http://new.mysite.com/ghs 1/) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/example/public_html/other/simple_html_dom.php on line 39
Строка 39 находится в приведенном выше коде.
Как я могу правильно обработать эту ошибку, могу ли я просто использовать условие plain if , это не похоже, что возвращает логическое значение.
Спасибо всем за любую помощь
Обновить
Это хорошее решение?
if(fopen(urlencode(trim("$next_url")), 'r')){ $html3 = file_get_html(urlencode(trim("$next_url"))); }else{ //do other stuff, error_logging return false; }
- Как очистить URI заголовков с помощью PHP?
- PHP + PhantomJS Rasterize
- PHP неожиданно умирает без ошибок
- Вставка персидского текста в таблицу mysql
- Внутренняя ошибка сервера PHP 500 при вызове Volley
Вот идея:
function fget_contents() { $args = func_get_args(); // the @ can be removed if you lower error_reporting level $contents = @call_user_func_array('file_get_contents', $args); if ($contents === false) { throw new Exception('Failed to open ' . $file); } else { return $contents; } }
В основном это оболочка для file_get_contents . Он выдает исключение при неудаче. Чтобы избежать необходимости переопределять file_get_contents , вы можете
// change this $dom->load(call_user_func_array('file_get_contents', $args), true); // to $dom->load(call_user_func_array('fget_contents', $args), true);
Теперь вы можете:
try { $html3 = file_get_html(trim("$link")); } catch (Exception $e) { // handle error here }
Подавление ошибок (либо с помощью @ либо путем снижения уровня error_reporting является допустимым решением.Это может генерировать исключения, и вы можете использовать это для обработки ваших ошибок.Есть много причин, по которым file_get_contents могут генерировать предупреждения, а руководство по PHP рекомендует понижать error_reporting: См. Руководство
Используйте CURL, чтобы получить URL-адрес и обработать ответ об ошибке таким образом.
Простой пример из curl_init () :
<?php // create a new cURL resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); curl_setopt($ch, CURLOPT_HEADER, 0); // grab URL and pass it to the browser curl_exec($ch); // close cURL resource, and free up system resources curl_close($ch); ?>
Из моего POV хорошая обработка ошибок – одна из больших проблем в PHP. К счастью, вы можете зарегистрировать собственный обработчик ошибок и сами решить, что делать.
Вы можете определить довольно простой обработчик ошибок следующим образом:
function throwExceptionOnError(int $errorCode , string $errorMessage) { // Usually you would check if the error code is serious // enough (like E_WARNING or E_ERROR) to throw an exception throw new Exception($errorMessage); }
и зарегистрируйте его в своей функции следующим образом:
function file_get_html() { $dom = new simple_html_dom; $args = func_get_args(); set_error_handler("throwExceptionOnError"); $dom->load(call_user_func_array('file_get_contents', $args), true); restore_error_handler(); return $dom; }
- Полный список кодов ошибок приведен в http://php.net/manual/errorfunc.constants.php.
- Полная документация set_error_handler приведена в http://php.net/manual/en/function.set-error-handler.php.
ЕСЛИ youre извлекает из внешнего URL-адреса, лучшая обработка будет поступать из его введения библиотеки HTTP, такой как Zend_Http. Это не сильно отличается от использования CURL или fopen, за исключением того, что он собирается извлечь данные этих «dirvers» в универсальный API, а затем вы можете выбрать, который вы хотите использовать. Его также будет иметь встроенный захват ошибок, чтобы облегчить вам работу.
Если вы не хотите накладных расходов на другую библиотеку, вы можете сами ее закодировать – в этом случае я всегда предпочитаю CURL.
Я написал такой PHP-код
$site="http://www.google.com";
$content = file_get_content($site);
echo $content;
Но когда я удаляю http: // из $site Я получаю следующее предупреждение:
Предупреждение: file_get_contents (www.google.com) [function.file-get-contents]: не удалось открыть поток:
Я пытался try и catch но это не сработало.
20 ответы
Шаг 1: проверьте код возврата: if($content === FALSE) { // handle error here... }
Шаг 2: подавите предупреждение, поставив оператор контроля ошибок (т.е. @) перед вызовом file_get_contents ():
$content = @file_get_contents($site);
ответ дан 12 апр.
Вы также можете установите свой обработчик ошибок как анонимная функция это вызывает Исключение и используйте try / catch для этого исключения.
set_error_handler(
function ($severity, $message, $file, $line) {
throw new ErrorException($message, $severity, $severity, $file, $line);
}
);
try {
file_get_contents('www.google.com');
}
catch (Exception $e) {
echo $e->getMessage();
}
restore_error_handler();
Похоже, много кода, чтобы отловить одну небольшую ошибку, но если вы используете исключения во всем приложении, вам нужно будет сделать это только один раз, вверху (например, во включенном файле конфигурации), и он будет преобразовать все ваши ошибки в исключения.
Создан 20 ноя.
Мой любимый способ сделать это довольно просто:
if (false !== ($data = file_get_contents("http://www.google.com"))) {
$error = error_get_last();
echo "HTTP request failed. Error was: " . $error['message'];
} else {
echo "Everything went better than expected";
}
Я обнаружил это после экспериментов с try/catch из @enobrev выше, но это позволяет использовать менее длинный (и IMO, более читаемый) код. Мы просто используем error_get_last чтобы получить текст последней ошибки, и file_get_contents возвращает false в случае неудачи, поэтому простое «если» может это уловить.
ответ дан 30 авг.
Вы можете добавить @:
$content = @file_get_contents($site);
Это подавит любое предупреждение — используйте экономно!. Посмотреть Операторы контроля ошибок
Изменить: когда вы удаляете http: //, вы больше ищете не веб-страницу, а файл на вашем диске под названием «www.google …..»
Создан 07 ноя.
Одна из альтернатив — подавить ошибку, а также выбросить исключение, которое вы можете поймать позже. Это особенно полезно, если в вашем коде есть несколько вызовов file_get_contents (), поскольку вам не нужно подавлять и обрабатывать их все вручную. Вместо этого можно сделать несколько вызовов этой функции в одном блоке try / catch.
// Returns the contents of a file
function file_contents($path) {
$str = @file_get_contents($path);
if ($str === FALSE) {
throw new Exception("Cannot access '$path' to read contents.");
} else {
return $str;
}
}
// Example
try {
file_contents("a");
file_contents("b");
file_contents("c");
} catch (Exception $e) {
// Deal with it.
echo "Error: " , $e->getMessage();
}
Создан 24 июн.
Вот как я это сделал … Нет необходимости в блоке try-catch … Лучшее решение всегда самое простое … Наслаждайтесь!
$content = @file_get_contents("http://www.google.com");
if (strpos($http_response_header[0], "200")) {
echo "SUCCESS";
} else {
echo "FAILED";
}
ответ дан 06 мар ’09, в 05:03
function custom_file_get_contents($url) {
return file_get_contents(
$url,
false,
stream_context_create(
array(
'http' => array(
'ignore_errors' => true
)
)
)
);
}
$content=FALSE;
if($content=custom_file_get_contents($url)) {
//play with the result
} else {
//handle the error
}
ответ дан 12 апр.
Вот как я с этим справляюсь:
$this->response_body = @file_get_contents($this->url, false, $context);
if ($this->response_body === false) {
$error = error_get_last();
$error = explode(': ', $error['message']);
$error = trim($error[2]) . PHP_EOL;
fprintf(STDERR, 'Error: '. $error);
die();
}
ответ дан 21 авг.
Лучше всего было бы установить свои собственные обработчики ошибок и исключений, которые будут делать что-то полезное, например, регистрировать их в файле или отправлять по электронной почте важные.
http://www.php.net/set_error_handler
Вы можете использовать этот скрипт
$url = @file_get_contents("http://www.itreb.info");
if ($url) {
// if url is true execute this
echo $url;
} else {
// if not exceute this
echo "connection error";
}
ответ дан 29 мая ’12, 19:05
Поскольку PHP 4 использует Отчет об ошибках():
$site="http://www.google.com";
$old_error_reporting = error_reporting(E_ALL ^ E_WARNING);
$content = file_get_content($site);
error_reporting($old_error_reporting);
if ($content === FALSE) {
echo "Error getting '$site'";
} else {
echo $content;
}
Создан 08 ноя.
Самый простой способ сделать это — просто добавить @ перед file_get_contents, т.е. е .:
$content = @file_get_contents($site);
Создан 08 фев.
что-то вроде этого:
public function get($curl,$options){
$context = stream_context_create($options);
$file = @file_get_contents($curl, false, $context);
$str1=$str2=$status=null;
sscanf($http_response_header[0] ,'%s %d %s', $str1,$status, $str2);
if($status==200)
return $file
else
throw new Exception($http_response_header[0]);
}
ответ дан 23 апр.
if (!file_get_contents($data)) {
exit('<h1>ERROR MESSAGE</h1>');
} else {
return file_get_contents($data);
}
Создан 17 фев.
Включите allow_url_fopen из cPanel или WHM, затем попробуйте, надеюсь, это исправит
Создан 01 фев.
Вы должны использовать функцию file_exists (), прежде чем использовать file_get_contents (). Таким образом вы избежите предупреждения php.
$file = "path/to/file";
if(file_exists($file)){
$content = file_get_contents($file);
}
ответ дан 03 окт ’16, 19:10
try {
$site="http://www.google.com";
$content = file_get_content($site);
echo $content;
} catch (ErrorException $e) {
// fix the url
}
set_error_handler(function ($errorNumber, $errorText, $errorFile,$errorLine )
{
throw new ErrorException($errorText, 0, $errorNumber, $errorFile, $errorLine);
});
ответ дан 14 дек ’16, 08:12
Вы также должны установить
allow_url_use = On
в вашей php.ini чтобы перестать получать предупреждения.
ответ дан 21 авг.
Измените файл php.ini
allow_url_fopen = On
allow_url_include = On
Создан 13 ноя.
Это попытается получить данные, если это не сработает, оно перехватит ошибку и позволит вам сделать все, что вам нужно, в пределах перехвата.
try {
$content = file_get_contents($site);
} catch(Exception $e) {
return 'The file was not found';
}
Создан 28 июля ’16, 17:07
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками
php
function
exception-handling
warnings
or задайте свой вопрос.
16 ответов
Шаг 1: проверьте код возврата: if($content === FALSE) { // handle error here... }
Шаг 2: подавите предупреждение, поставив оператор управления ошибками (т.е. @) перед вызовом file_get_contents():
$content = @file_get_contents($site);
Roel
07 нояб. 2008, в 16:59
Поделиться
Вы также можете установить обработчик ошибок как анонимную функцию , который вызывает Exception и использует try/catch для этого исключения.
set_error_handler(
create_function(
'$severity, $message, $file, $line',
'throw new ErrorException($message, $severity, $severity, $file, $line);'
)
);
try {
file_get_contents('www.google.com');
}
catch (Exception $e) {
echo $e->getMessage();
}
restore_error_handler();
Кажется, что много кода поймает одну небольшую ошибку, но если вы используете исключения во всем приложении, вам нужно будет сделать это один раз, в верхней части (например, в включенном файле конфигурации) и он полностью преобразует все ваши ошибки в Исключения.
enobrev
04 авг. 2010, в 14:04
Поделиться
Мой любимый способ сделать это довольно просто:
if (!$data = file_get_contents("http://www.google.com")) {
$error = error_get_last();
echo "HTTP request failed. Error was: " . $error['message'];
} else {
echo "Everything went better than expected";
}
Я нашел это после экспериментов с try/catch из @enobrev выше, но это позволяет использовать менее длинный (и IMO, более читаемый) код. Мы просто используем error_get_last для получения текста последней ошибки, а file_get_contents возвращает false при сбое, поэтому простое «if» может это поймать.
Laurie
13 нояб. 2012, в 18:27
Поделиться
Вы можете добавить @:
$content = @file_get_contents($site);
Это будет предупреждать любое предупреждение — использовать экономно!. См. Операторы контроля ошибок
Изменить: Когда вы удаляете «http://», вы больше не ищете веб-страницу, а файл на вашем диске под названием «www.google…..»
Greg
07 нояб. 2008, в 15:50
Поделиться
Один из вариантов — подавить ошибку, а также выбросить исключение, которое вы можете поймать позже. Это особенно полезно, если в коде есть несколько вызовов file_get_contents(), так как вам не нужно подавлять и обрабатывать все их вручную. Вместо этого можно сделать несколько вызовов для этой функции в одном блоке try/catch.
// Returns the contents of a file
function file_contents($path) {
$str = @file_get_contents($path);
if ($str === FALSE) {
throw new Exception("Cannot access '$path' to read contents.");
} else {
return $str;
}
}
// Example
try {
file_contents("a");
file_contents("b");
file_contents("c");
} catch (Exception $e) {
// Deal with it.
echo "Error: " , $e->getMessage();
}
Aram Kocharyan
24 июнь 2011, в 06:04
Поделиться
function custom_file_get_contents($url) {
return file_get_contents(
$url,
false,
stream_context_create(
array(
'http' => array(
'ignore_errors' => true
)
)
)
);
}
$content=FALSE;
if($content=custom_file_get_contents($url)) {
//play with the result
} else {
//handle the error
}
RafaSashi
24 фев. 2014, в 01:01
Поделиться
Вот как я это сделал… Нет необходимости в блоке try-catch… Лучшее решение всегда самое простое… Наслаждайтесь!
$content = @file_get_contents("http://www.google.com");
if (strpos($http_response_header[0], "200")) {
echo "SUCCESS";
} else {
echo "FAILED";
}
MORFEMAN
06 март 2009, в 06:53
Поделиться
Вот как я справляюсь с этим:
$this->response_body = @file_get_contents($this->url, false, $context);
if ($this->response_body === false)
{
$error = error_get_last();
$error = explode(': ', $error['message']);
$error = trim($error[2]) . PHP_EOL;
fprintf(STDERR, 'Error: '. $error);
die();
}
Jrm
24 фев. 2014, в 00:20
Поделиться
Лучше всего было бы установить собственные ошибки и обработчики исключений, которые будут делать что-то полезное, например, записывать его в файл или отправлять по электронной почте критические сообщения.
http://www.php.net/set_error_handler
Arkh
07 нояб. 2008, в 18:14
Поделиться
Поскольку PHP 4 использует error_reporting():
$site="http://www.google.com";
$old_error_reporting = error_reporting(E_ALL ^ E_WARNING);
$content = file_get_content($site);
error_reporting($old_error_reporting);
if ($content === FALSE) {
echo "Error getting '$site'";
} else {
echo $content;
}
BobStein-VisiBone
18 июль 2014, в 19:57
Поделиться
Вы можете использовать этот script
$url = @file_get_contents("http://www.itreb.info");
if ($url) {
// if url is true execute this
echo $url;
} else {
// if not exceute this
echo "connection error";
}
ogie
27 фев. 2012, в 08:57
Поделиться
Это попытается получить данные, если это не сработает, оно поймает ошибку и позволит вам делать все, что вам нужно в catch.
try {
$content = file_get_contents($site);
} catch(Exception $e) {
return 'The file was not found';
}
Brad
28 июль 2016, в 17:12
Поделиться
Прежде чем использовать файл_get_contents(), вы должны использовать функцию file_exists().
Таким образом вы избежите предупреждения php.
$file = "path/to/file";
if(file_exists($file)){
$content = file_get_contents($file);
}
Jesús Díaz
03 окт. 2016, в 18:27
Поделиться
Вы также должны установить
allow_url_use = Вкл
в вашем php.ini, чтобы остановить получение предупреждений.
GHAV
16 март 2016, в 01:56
Поделиться
Измените файл php.ini
allow_url_fopen = On
allow_url_include = On
Antério Vieira
13 нояб. 2015, в 14:46
Поделиться
try {
$site="http://www.google.com";
$content = file_get_content($site);
echo $content;
} catch (ErrorException $e) {
// fix the url
}
set_error_handler(function ($errorNumber, $errorText, $errorFile,$errorLine )
{
throw new ErrorException($errorText, 0, $errorNumber, $errorFile, $errorLine);
});
kta
14 дек. 2016, в 10:43
Поделиться
Ещё вопросы
- 0jQuery> Измените getElementbyId.selectedIndex с текстовым значением опции
- 0Обновление переменной угловой модели слишком рано до обновления DOM, в результате чего пользовательский интерфейс находится «позади»?
- 0Как отправить документ FPDF с помощью PHPMailer
- 1Строка поиска из массива и номер ссылочного массива
- 0Что не так с этим?
- 1Объединить состояние модели с условием ее ассоциации в Sequelize
- 0динамическое распределение и освобождение
- 0jquery скрыть элемент в свитке
- 0Angular: Ошибка: [$ parse: синтаксис] Синтаксическая ошибка
- 1Как я могу выделить модульные тесты по классам?
- 1Отображать на клиенте, только если коллекция существует на узле mongoDB JS
- 0Ошибка при свертывании изображения с фильтром в opencv c ++
- 0gluLook ничего не появлялось
- 1Как заменить ‘\’ на » в байтовом файле?
- 0Ширина Fancybox не применяется — autoSize: false не ответ
- 1Отображение значений в (Py) Spark DataFrame
- 1Цепочка серии обещаний
- 1Вращение и направление вектора в трехмерном пространстве — обратный порядок
- 0Использование jQuery Показать / Скрыть
- 0Установить систему C на Cygwin
- 0Тестирование углового кода, завернутого в $ scope. $ Apply () в jasmine
- 1Заголовки отсутствуют, даже если они явно указаны при чтении файла .ORC с помощью PySpark
- 0Как получить доступ к массиву идентификаторов, используя триггер события с флажками?
- 1отменить диалог через 3 секунды — продолжает сбой моего приложения после многократного использования
- 1Android GridLayout и космический бэкпорт
- 0проверить пустые или не значения в столбцах в R
- 0Получить значение элемента управления добавлением из кода в ASP.NET
- 0Как динамически создавать несколько слайд-шоу Flexslider
- 0CodeIgniter 3 — неагрегированная группа столбцов по
- 1Исключение шаблона и условных замен
- 0После вычитания 4 соседних пикселей всегда дают ноль
- 0JQuery выбрать флажки во вложенном gridview, когда родительский флажок установлен
- 1Node.js Выполнить после построчного чтения
- 0Метод удаления C ++ AVLtree
- 0Шаблон столбца Kendo Ui Grid с окном кендо, всплывающим в директиве
- 1Обработка RunTimeException для класса
- 1Защита идентификатора сеанса Cookie в Weblogic портит создание сеанса
- 0HTML не полностью жидкий
- 0C ++ Наследование: передача данных в базу
- 1Транспортир — Запустить сервер Selenium на заданном порту
- 0Cakephp: разделить логику между моделью и контроллером
- 0как работать с пользовательским окном выбора
- 0MonoDevelop (Ubuntu) и MySql
- 0Как пользователю filter () вернуть точку входа из $ .post
- 1Позвоните в Windows Calculator c #
- 0Должен ли я создать временный объект для создания экземпляра переменной-члена в C ++?
- 0Невозможно скрыть вложенный список, который находится внутри div
- 0Найти самую большую сумму из всех, она содержит числа и
- 1Ошибка при создании bean-компонента с именем securityConfig: не удалось внедрить автоназначенные зависимости
- 1Android DatagramSocket не работает правильно
file_get_contents
(PHP 4 >= 4.3.0, PHP 5, PHP 7)
file_get_contents — Читает содержимое файла в строку
Описание
string file_get_contents
( string $filename
[, bool $use_include_path = false
[, resource $context
[, int $offset = -1
[, int $maxlen
]]]] )
Использование функции file_get_contents()
наиболее предпочтительно в случае необходимости получить
содержимое файла целиком, поскольку для улучшения производительности
функция использует технику отображения файла в память
(memory mapping), если она поддерживается вашей операционной системой.
Замечание:
Если вы открываете URI содержащий спецсимволы, такие как пробел,
вам нужно закодировать URI при помощи urlencode().
Список параметров
-
filename -
Имя читаемого файла.
-
use_include_path -
Замечание:
Начиная с версии PHP 5 можно использовать константу
FILE_USE_INCLUDE_PATHдля поиска файла
в include path. -
context -
Корректный ресурс контекста, созданный с помощью функции
stream_context_create(). Если в использовании
особого контекста нет необходимости, можно пропустить этот параметр
передав в него значениеNULL. -
offset -
Смещение, с которого начнется чтение оригинального потока.
Поиск смещения (
offset) не поддерживается при
работе с удаленными файлами. Попытка поиска смещения на нелокальных
файлах может работать при небольших смещениях, но этот
результат является непредсказуемым, так как он работает на
буферизованном потоке. -
maxlen -
Максимальный размер читаемых данных. По умолчанию чтение
осуществляется пока не будет достигнут конец файла. Учтите, что
этот параметр применяется и к потоку с фильтрами.
Возвращаемые значения
Функция возвращает прочтенные данные или FALSE в случае возникновения ошибки.
Внимание
Эта функция
может возвращать как boolean FALSE, так и не-boolean значение,
которое приводится к FALSE. За более подробной информацией обратитесь к разделу
Булев тип. Используйте оператор === для проверки значения,
возвращаемого этой функцией.
Ошибки
Будет сгенерирована ошибка уровня E_WARNING, если
параметр filename не удается найти,
параметр maxlength меньше нуля или
поиск по смещению offset в потоке завершается неудачно.
Примеры
Пример #1 Получить и вывести исходный код домашней страницы вебсайта
<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>
Пример #2 Поиск файлов в include_path
<?php
// <= PHP 5
$file = file_get_contents('./people.txt', true);
// > PHP 5
$file = file_get_contents('./people.txt', FILE_USE_INCLUDE_PATH);
?>
Пример #3 Чтение секции файла
<?php
// Читаем 14 символов, начиная с 21 символа
$section = file_get_contents('./people.txt', NULL, NULL, 20, 14);
var_dump($section);
?>
Результатом выполнения данного примера
будет что-то подобное:
string(14) "lle Bjori Ro"
Пример #4 Использование потоковых контекстов
<?php
// Создаем поток
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: enrn" .
"Cookie: foo=barrn"
)
);$context = stream_context_create($opts);// Открываем файл с помощью установленных выше HTTP-заголовков
$file = file_get_contents('http://www.example.com/', false, $context);
?>
Список изменений
| Версия | Описание |
|---|---|
| 5.1.0 |
Добавлены аргументы offset иmaxlen.
|
Примечания
Замечание: Эта функция безопасна
для обработки данных в двоичной форме.
Подсказка
Для этой функции вы можете использовать URL
в качестве имени файла, если была включена опция fopen wrappers. Смотрите более
подробную информацию об определении имени файла в описании функции
fopen(). Смотрите также список поддерживаемых оберток URL, их возможности, замечания по использованию и список
предопределенных констант в Поддерживаемые протоколы и обработчики (wrappers).
Внимание
При использовании SSL,
Microsoft IIS нарушает протокол, закрывая соединение без отправки
индикатора close_notify. PHP сообщит об этом как «SSL: Fatal Protocol Error»
в тот момент, когда вы достигнете конца данных. Чтобы обойти это, вы должны
установить error_reporting на
уровень, исключающий E_WARNING.
PHP версий 4.3.7 и старше умеет определять, что на стороне сервера находится
проблемный IIS при открытии потока с помощью обертки https:// и не выводит предупреждение.
Если вы используете fsockopen() для создания ssl:// сокета,
вы сами отвечаете за определение и подавление этого предупреждения.
Смотрите также
- file() — Читает содержимое файла и помещает его в массив
- fgets() — Читает строку из файла
- fread() — Бинарно-безопасное чтение файла
- readfile() — Выводит файл
- file_put_contents() — Пишет строку в файл
- stream_get_contents() — Читает оставшуюся часть потока в строку
- stream_context_create() — Создаёт контекст потока
- $http_response_header
Вернуться к: Файловая система