Как вызвать URL с помощью php? - PullRequest
2 голосов
/ 26 ноября 2009

Я хочу вызвать URL без взаимодействия с пользователем. Я использовал

file_get_contents($myurl);

Но на моем веб-хосте file_get_contents() отключено. как это сделать. Я не хочу читать содержимое URL. Я просто хочу вызвать URL. Также я не могу использовать функцию header(), потому что я собираюсь запустить URL в цикле, поэтому заголовок не будет полезен.

Ответы [ 7 ]

2 голосов
/ 27 ноября 2009

Что ж, если вы не можете использовать Curl или fsockopen или exec wget или любые другие предложения, чтобы заставить его работать из PHP, это безнадежное дело. Почти. Если вам не нужно, чтобы URL вызывался во время выполнения скрипта, вы можете позволить клиенту вызывать URL, добавив элемент WebBug в HTML, который вы отправляете обратно в браузер (при условии, что это то, что вы делаете), например

<img src="http://www.example.com/trigger.php?arg1=foo" width="1" height="1"/>

Если вам нужен ответ от сценария, вы можете использовать iframe, хотя вам следует проверить, является ли этот элемент частью используемого вами Doctype. Вы также можете попробовать через JavaScript, но вам нужно найти способ обойти Политика аналогичного происхождения , которую обеспечивает большинство браузеров.

Если проблема все еще не решена, попробуйте другой бесплатный бесплатный хостинг или рассмотрите возможность перехода на платный хостинг. Вы можете получить приличную настройку менее чем за десять долларов в настоящее время.

2 голосов
/ 26 ноября 2009

Другие ответы - это правильный путь, чтобы фактически «запустить» другие URL-адреса. Но стоит упомянуть, что если вы пытаетесь запросить эти URL-адреса «без взаимодействия с пользователем», вам следует подумать о запуске Cron Job , чтобы фактически это произошло, вместо того чтобы полагаться на кого-то для доступа к определенной странице на ваш сайт.

2 голосов
/ 26 ноября 2009

Вы можете попробовать некоторые вызовы сокетов более низкого уровня, чтобы сделать простой HTTP-запрос с fsockopen и связанными функциями. Вот образец из руководства

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
   echo "$errstr ($errno)<br />\n";
} else {
   $out = "GET / HTTP/1.1\r\n";
   $out .= "Host: www.example.com\r\n";
   $out .= "Connection: Close\r\n\r\n";

   fwrite($fp, $out);
   while (!feof($fp)) {
       echo fgets($fp, 128);
   }
   fclose($fp);
}
2 голосов
/ 26 ноября 2009

Использование cURL :

<?php
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com'); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_exec(); 
curl_close($ch); 
?>
0 голосов
/ 05 ноября 2013

Вот пример команды для вызова другого скрипта из текущего файла как отдельного процесса

exec('/usr/bin/php5 /var/www/vhosts/mysite.com/httpdocs/PROCESS/processScript.php');
0 голосов
/ 27 ноября 2009

обновление: ах, я вижу allow_url_fopen выключен. Да, тогда даже get_headers не сработает. Тогда решение от @Gordon - тоже путь. Немного противно, но другого выбора нет.
Я бы рекомендовал избегать таких хостеров, как чума, это слишком ограничивающее.


На ваш последний вопрос я ответил get_headers($url). Это все. Это определенно так, как я бы это сделал. Он возвращает заголовки, чтобы вы могли видеть, правильно ли обработан ваш запрос.

Curl также вариант, но я сомневаюсь, установлен ли он на вашем общем хостинге, что кажется ограничительным.

0 голосов
/ 27 ноября 2009

Если ни один из других вариантов не работает для вас, вы можете сделать это с помощью оболочки. Использование wget:

shell_exec('wget http://example.com/');

Если wget не установлен, вы можете сделать это с помощью lynx.

http://php.net/manual/en/function.shell-exec.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...