2016-09-27 5 views
0

Helloo, все, что я пытаюсь вызвать веб-службу из файла на Windows Server 2008.file_get_contents не удалось открыть потоки

Я подключен к серверу и установили там XAMPP и поместил все необходимые файлы.

это мой код для вызова веб-сервиса.

$result = file_get_contents("http://*******:8055/API.ashx?Method=Departure"); 
    $json = json_decode($result, true); 

    $departure_count = count($json['Response']); 

Это дает мне правильный ответ на локальный, а не на сервере. У меня есть googled, и они говорят мне, что я должен использовать cURL вместо file_gets_contents.

Тогда я использовал этот код:

$url = 'http://*******:8055/API.ashx?Method=Departure'; 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_HEADER, false); 
$data = curl_exec($curl); 
curl_close($curl); 
$json = json_decode($data, true); 
$departure_count = count($json['Response']); 

и это также дает мне ответ на локальный, а не на сервере, адрес для доступа к URL-адресу находится: http://221.120.222.68:8080/wordpress/fare/

Когда я попытался открыть $ url в браузере, он дает мне ответ

+0

Вы уверены, что ваша конфигурация сервера позволяет использовать исходящие соединения? –

+0

Нет, я не уверен об этом –

+0

@VladimirCvetic Когда я пытался открыть $ url в браузере, он дает мне ответ –

ответ

0

Как говорится в сообщении об ошибке, запрошенный поток (URL) не может быть открыт.

Есть много возможных причин для этого:

1. base URL is bad. 
2. username and/or password are bad 
3. username/password do not have permission on the server 
4. Your system cannot reach the server (firewall, PHP permissions) 

Я хотел бы использовать следующую стратегию для отладки:

1. Dump $url and write it down. 
2. Use a browser with debug tools (eg Firefox/Firebug) and try to access that URL. 
3. Look at the headers returned to see what error the server reports (if any). 
4. Think about why that error is returned... 
0

Я гугл, и они говорят мне, что я должен использовать Curl вместо of file_gets_contents.

Кто они? Конечно, использование curl должно облегчить диагностику проблемы - но это не покажет всех потенциальных проблем.

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

  • всех исходящих соединений может быть заблокирован дизайном
  • не может быть ни одного маршрута к внешней сети
  • не может быть никакой службы DNS доступна

Первым человеком, с которым вы должны поговорить, является то, кто поддерживает/предоставляет сервер. Тем временем вы можете попробовать установить простой скрипт, чтобы попытаться разрешить имя хоста, и попытаться получить контент с хорошо установленного сайта с использованием HTTP (например, этого).

например.

<?php 

$ip=gethostbyname('*******'); // the hostname you are trying to connect to 
print "IP = " . var_export($ip, true) . "<br />"; 
$content=file_get_contents("http://stackoverflow.com"); 
if (false===$content) { 
    print "failed to retrieve content - " 
     . var_dump($http_response_header, true); 
} else { 
    print "Successfully retrieved " . strlen($content) 
     . " bytes from http://stackoverflow.com"; 
} 
Смежные вопросы