2015-10-05 7 views
-2

У меня есть два сервера с различными конфигурациями.php file_get_contents is slow

Сервер 1: Apache - 2.2.2, PHP - 5.3.10

Сервер 2: Apache - 2.4.7, PHP - 5.5.9

file_get_contents("file from server1") работы идеально. Но, file_get_contents("file from server2") работает очень медленно, забирает 5 минут, чтобы получить содержимое файла.

CURL отлично работает с обоими серверами. Проблема только с file_get_contents. Я также видел конфигурацию сервера, то же самое для обоих серверов.

Когда я использую относительный путь, это нормально. Проблема возникает с полным URL-адресом. openssl включен и allow_url_fopen также установлен на

Любая помощь будет оценена.

+0

Пока не ясно, какова роль этих двух серверов. Вы запускаете на них клиентский код (curl, 'file_get_contents()') или вы загружаете их? Также, отправляя фактический код и командную строку curl, которые вы используете для сравнения, получаете ответ. – axiac

+0

Я пытаюсь загрузить с этих серверов. Вот код CURL, который я использую '$ ch = curl_init(); curl_setopt ($ ch, CURLOPT_URL, 'http://example.com/test.текст'); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); $ output = curl_exec ($ ch); ' – user3752326

+1

Вероятно, это зависит от конфигурации и кэширования. Вы не представили достаточно подробностей, чтобы сказать что-либо о любом из них. Вопрос, вероятно, лучше подходит для Super User или Server Fault. – jww

ответ

1

Логически, есть, по крайней мере, четыре области, чтобы посмотреть в побеспокоить снимай этот вопрос производительности:

Во-первых, оборудование: Что нагрузка на диски? Проблемы с оборудованием? Использует ли сервер 2 медленные диски? Работают ли диски на одной машине?

Во-вторых, HTTP-сервер Apache: Есть ли сообщения об ошибках в журнале ошибок Apache?

Чтобы получить лучшее сравнение, вы можете запустить ту же версию Apache и такую ​​же конфигурацию на обоих веб-серверах.

Apache HTTP Server имеет число Caching modules, включая cache_disk_module, cache_module и file_cache_module - включены ли они на одном/обоих веб-серверах?

Попробуйте закрыть соединение TCP, как описано здесь PHP file_get_contents very slow when using full url

В-третьих, конфигурация PHP. Есть ли сообщения об ошибках в журналах ошибок PHP?

Наконец, PHP-скрипт. Попробуйте ускорить PHP-скрипт. Чтобы ускорить работу, вы можете рассмотреть возможность замены file_get_contents() на сокет с помощью fsockopen(). Фрагмент кода ниже из документации PHP и объяснить, как использовать 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); 
}