2012-01-25 4 views
1

Возможно, это простой вопрос, но я не нашел ответа в Интернете.Отправка запроса с PHP witout получения ответа

У меня есть удаленный скрипт, который работает, когда я открываю

http://www.example.com/do_it.php 

Я не могу включить его, вызвать эту страницу может дать фатальные ошибки, может занять слишком много времени для загрузки.

Мне нужно загрузить эту страницу с php самым быстрым и простым способом.

Теперь я делаю

$ch = curl_init($url); 
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, 5); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,$withReturn); 
$execute = curl_exec($ch); 

Но этот сценарий получить ответ, так что, следовательно, это займет больше времени, чем сценарий, который возвращает только заголовки, или не возвращает ничего.

Это лучший способ сделать это?

Если это поможет do_it.php находится на том же сервере, откуда мне нужно его называть.

+0

Не знаете, в чем ваш вопрос. Похоже, у вас уже есть рабочее решение? –

+0

Да, это работает, но я беспокоюсь о производительности. Я действительно надеюсь, что существует лучшее решение. – Narek

ответ

2

Я думаю, что возможными решениями для выполнения запроса и не ожидая ответа было бы использовать php.net/curl_multi_exec, а затем избежать разбора ответа. Другим подходом было бы использование сокетов, открытие соединения с сценарием, запись запроса и закрытие соединения без подготовки ответа.

Пример из завиток сценария: https://github.com/vrana/php-async/blob/master/CurlAsync.php

Пример использования метода сокета:

$fp = fsockopen('example.com', 80, $errno, $errstr, 30); 

$out = "GET /do_it.php HTTP/1.1\r\n"; 
$out.= "Host: example.com\r\n"; 
$out.= "Content-Type: application/x-www-form-urlencoded\r\n"; 
$out.= "Connection: Close\r\n\r\n"; 

fwrite($fp, $out); 
fclose($fp); 

выше пример непроверенных и предоставляется в качестве отправной точки.

+0

Спасибо за ответ! Необходимо проверить, как быстро работает 'fsockopen', но логически это то, что мне нужно! – Narek

+0

без проблем Нарек рад, что я мог бы помочь! –

1

Ну, самый быстрый способ - проверить все методы. Существует

CURL - curl_exec()

Sockets - fsockopen()

И если вы просто хотите, чтобы загрузить ответ этой do_it.php страницы, а затем использовать get_file_contents().

+0

Как я знаю 'get_file_contents()' самый медленный метод для получения ответа, но в моем случае мне вообще не нужен ответ, поэтому я занимаюсь серъезным методом, который даже не попытается получить ответ. – Narek