Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Замены file_get_content
цитата
02/11/08 в 16:38
 TRUE_AND_FALSE
Допустим имеем хост с версией php3, либо с отключеннными fopen оболочками, либо все вместе . Стоит допусим cURL. Нужно получить в строку исходный код страници что грабим для дальнейшей замены в нем некоторых тегов. Какие есть мысли? Я знаю что можно с помощью cURL, по сути так и делаю. Хочется увидеть ваши решения.
цитата
02/11/08 в 16:41
 _s_[sov]
ну в строку можно и так запихать Код:
file_get_contents()
собсно как ты и указал. если я верно понял твой вопрос
цитата
02/11/08 в 16:44
 TRUE_AND_FALSE
_s_[sov] писал:
ну в строку можно и так запихать Код:
file_get_contents()
собсно как ты и указал. если я верно понял твой вопрос


Дело в том, что эта функция была введена в PHP 4.3.0, URL в качестве с этой функцией, если "fopen-оболочки" включены.
цитата
02/11/08 в 16:51
 _s_[sov]
ну тогда используй Код:
file()
и далее Код:
implode()
так тоже можно...
цитата
02/11/08 в 16:55
 Corex
Цитата:
имеем хост с версией php3

...который восстановили после криогенной заморозки в 1998 году! icon_smile.gif

По сабжу - скачай клиентский php-код с sape.ru и посмотри как там сделано, вроде там аж 4 разных варианта на разные случаи реализовано.
цитата
02/11/08 в 18:39
 TRUE_AND_FALSE
_s_[sov] писал:
ну тогда используй Код:
file()
и далее Код:
implode()
так тоже можно...


имеешь введу

Код:

$fcontents = implode ('', file ('http://www.example.com/'));


только fopen-оболочки отключены, работать не будет.
цитата
02/11/08 в 19:14
 localhost
вообщем-то курлом и делать, других вариантов нет, кроме как через сокеты
цитата
03/11/08 в 09:51
 _s_[sov]
TRUE_AND_FALSE у тебя доступ к php.ini есть?
цитата
03/11/08 в 09:55
 TRUE_AND_FALSE
_s_[sov] писал:
TRUE_AND_FALSE у тебя доступ к php.ini есть?
Нету. Скрипт для общего пользования.
цитата
03/11/08 в 10:34
 Corex
TRUE_AND_FALSE:
Ещё разок, т.к. есть где посмотреть неплохое решение: клиентский PHP-код sape.ru содержит решение file_get_contents, CURL и sockets, включающее проверку на подходящий вариант и работающее на большинстве хостов. Внутри скрипта sape.ru есть такая функция:

Код:
    function fetch_remote_file($host, $path) {
       
        $user_agent = 'SAPE_Client PHP ' . $this->_version;
       
        @ini_set('allow_url_fopen',          1);
        @ini_set('default_socket_timeout',   $this->_socket_timeout);
        @ini_set('user_agent',               $user_agent);
       
        if (
            $this->_fetch_remote_type == 'file_get_contents'
            ||
            (
                $this->_fetch_remote_type == ''
                &&
                function_exists('file_get_contents')
                &&
                ini_get('allow_url_fopen') == 1
            )
        ) {
           
            if ($data = @file_get_contents('http://' . $host . $path)) {
                return $data;
            }
       
        } elseif (
            $this->_fetch_remote_type == 'curl'
            ||
            (
                $this->_fetch_remote_type == ''
                &&
                function_exists('curl_init')
            )
        ) {
           
            if ($ch = @curl_init()) {

                @curl_setopt($ch, CURLOPT_URL,              'http://' . $host . $path);
                @curl_setopt($ch, CURLOPT_HEADER,           false);
                @curl_setopt($ch, CURLOPT_RETURNTRANSFER,   true);
                @curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,   $this->_socket_timeout);
                @curl_setopt($ch, CURLOPT_USERAGENT,        $user_agent);
               
                if ($data = @curl_exec($ch)) {
                    return $data;
                }
               
                @curl_close($ch);
            }
           
        } else {
           
            $buff = '';
            $fp = @fsockopen($this->_server, 80, $errno, $errstr, $this->_socket_timeout);
            if ($fp) {
                @fputs($fp, "GET {$path} HTTP/1.0\r\nHost: {$host}\r\n");
                @fputs($fp, "User-Agent: {$user_agent}\r\n\r\n");
                while (!@feof($fp)) {
                    $buff .= @fgets($fp, 128);
                }
                @fclose($fp);
               
                $page = explode("\r\n\r\n", $buff);
           
                return $page[1];
            }
           
        }
       
        return $this->raise_error('Не могу подключиться к серверу: ' . $host . $path);
    }


На основе этого можно сделать своё, как минимум.
цитата
03/11/08 в 19:50
 xreload
Аналог file_get_contents() можно сваять с помощью сокетов, кури : http://php.net/fsockopen.


Эта страница в полной версии