Warning: file_get_contents

Sankaboy

Постоялец
Регистрация
1 Фев 2012
Сообщения
112
Реакции
3
Привет! Сделал авторизацию через твиттер. И иногда выдает такую ошибку(опасность) -
Warning: file_get_contents(Для просмотра ссылки Войди или Зарегистрируйся..) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in /index.php on line 22
Warning: Division by zero in /index.php on line 25

Как это понять?
Для просмотра ссылки Войди или Зарегистрируйся.. - рабочая. Твиттер лагает что ли?

Строка с ошибкой:
PHP:
$response = file_get_contents($url);
 
Вообще 400 ошибку сервисы любят выдавать при неверных параметрах в запросе, попробовал с твоим запросом поизвращаться поэкспериментировать, 400 получить не смог. Так что приводи скрипт полностью или как минимум всё до момента ошибки.
 
Вот текст:
PHP:
$url_api_info_user = "http://twitter.com/users/show.json?screen_name=$nam";
$json_file_get_info_user = file_get_contents($url_api_info_user);
$aviable_user_info = json_decode($json_file_get_info_user, true);
Стоит на странице, которая постоянно обновляется. Может из-за больше количества обновлений оно глючит?
 
Стоит на странице, которая постоянно обновляется. Может из-за больше количества обновлений оно глючит?
Да, скорее всего так и есть, твитер отдает 400 ошибку из за слишком частых запросов от тебя, добавь кеширование ответа, например так:
PHP:
<?php
//путь к папке куда будем кешировать (используем временную папку системы)
$twitterCacheDir = sys_get_temp_dir()."/twitterCache";

//имя файла в который кешируем
$cacheFileName = $twitterCacheDir."/".$nam.".twittcache";

//время инвалидации кеша, возьмем 10 минут
$cacheInvalidate = 600;

//проверим, существует ли папка в которую мы будем писать кеш, если нет - создадим ее
if(!file_exists($twitterCacheDir))
      mkdir($twitterCacheDir);

$url_api_info_user = "http://twitter.com/users/show.json?screen_name=$nam";

//условия инвалидации кеша
if(!file_exists($cacheFileName) or (time() - filemtime($cacheFileName) >= $cacheInvalidate))
{
      //кешируем данные
      $json_file_get_info_user = file_get_contents($url_api_info_user);
      file_put_contents($cacheFileName, $json_file_get_info_user);
}

//берем данные из кеша
else
     $json_file_get_info_user = file_get_contents($cacheFileName);

$aviable_user_info = json_decode($json_file_get_info_user, true);
 
Решил испытать.
Ошибки:

Код:
Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/tmp/temporarycache) is not within the allowed path(s (/home/alexa102/:/usr/local/php5/lib/php/) in /home/alexa102/domains/сайт/public_html/файл.php on line 31
Warning: mkdir() [function.mkdir]: open_basedir restriction in effect. File(/tmp/temporarycache) is not within the allowed path(s (/home/alexa102/:/usr/local/php5/lib/php/) in /home/alexa102/domains/ сайт /public_html/ файл .php on line 32
Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/tmp/temporarycache/HancCox.infocache) is not within the allowed path(s (/home/alexa102/:/usr/local/php5/lib/php/) in /home/alexa102/domains/ сайт /public_html/ файл .php on line 37
Warning: file_put_contents() [function.file-put-contents]: open_basedir restriction in effect. File(/tmp/temporarycache/HancCox.infocache) is not within the allowed path(s (/home/alexa102/:/usr/local/php5/lib/php/) in /home/alexa102/domains/ сайт /public_html/ файл .php on line 41
Warning: file_put_contents(/tmp/temporarycache/HancCox.infocache) [function.file-put-contents]: failed to open stream: Operation not permitted in/home/alexa102/domains/ сайт /public_html/ файл .php on line 41

Папка с временными файлами называется - phptmp. Хотя думаю это не важно.
Помогите пожалуйста.
 
sys_get_temp_dir() - Возвращает путь к каталогу который указан в настройках. По умолчанию это tmp
А у тебя настройками хостинга запрещен доступ к папке tmp. Следовательно данная функция работать не будет.

Поэтому делай без этой функции, как-нибудь так, имя папки ставь какое нужно.

PHP:
//путь к папке куда будем кешировать (используем временную папку системы)
$twitterCacheDir = "/twitterCache";
 
if(!file_exists($twitterCacheDir)){
    //создаем каталог, с правами 0777
    @mkdir ($twitterCacheDir, 0777);
    @chmod ($twitterCacheDir, 0777);//на всякий случай :)
}

Ну или проси хостера отключить open_basedir))))
 
У вас просто нет прав писать в папку /tmp, создайте tmp в папке со скриптом и пишите туда (не забудьте chmod 777 на неё)
 
Попробуй использовать это
Код:
function file_get_contents_curl($url) {
    $ch = curl_init();
 
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Set curl to return the data instead of printing it to the browser.
    curl_setopt($ch, CURLOPT_URL, $url);
 
    $data = curl_exec($ch);
    curl_close($ch);
 
    return $data;
}
 
Назад
Сверху