TRUE_AND_FALSE
Допустим имеем хост с версией php3, либо с отключеннными fopen оболочками, либо все вместе . Стоит допусим cURL. Нужно получить в строку исходный код страници что грабим для дальнейшей замены в нем некоторых тегов. Какие есть мысли? Я знаю что можно с помощью cURL, по сути так и делаю. Хочется увидеть ваши решения.
TRUE_AND_FALSE
_s_[sov] писал:
ну в строку можно и так запихать
Код:
file_get_contents()
собсно как ты и указал. если я верно понял твой вопрос
Дело в том, что эта функция была введена в PHP 4.3.0, URL в качестве с этой функцией, если "fopen-оболочки" включены.
Corex
Цитата:
имеем хост с версией php3
...который восстановили после криогенной заморозки в 1998 году!
По сабжу - скачай клиентский php-код с sape.ru и посмотри как там сделано, вроде там аж 4 разных варианта на разные случаи реализовано.
TRUE_AND_FALSE
_s_[sov] писал:
ну тогда используй
Код:
file()
и далее
Код:
implode()
так тоже можно...
имеешь введу
Код:
$fcontents = implode ('', file ('http://www.example.com/'));
только fopen-оболочки отключены, работать не будет.
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);
}
На основе этого можно сделать своё, как минимум.