PHP microtime возвращает разные результаты

Кажется, у меня возникает странная проблема при использовании функции microtime в PHP. На моем index.php у меня есть следующее

$.ajax({
url:'loadtime.php',
datatype:"application/json",
type:'get',
data: "host=http://www.mywebsite.com",
success:function(data){
  document.getElementById('loadtime_com').innerHTML = data;
},
    error:function(){
  // code for error
}
});

На loadtime.php

$host =  $_GET['host'];

$time = microtime( TRUE );
file_get_contents( $host );
$time = microtime( TRUE ) - $time;
echo $time;

При переходе к моему index.php он показывает время, которое меньше 2,00 секунд (что неправильно). Затем я создал другой файл PHP с именем loadtime2.php и изменил код на

$host =  "http://www.mywebsite.com";

$time = microtime( TRUE );
file_get_contents( $host );
$time = microtime( TRUE ) - $time;
echo $time;

А затем протестируйте скрипт, перейдя по адресу mywebsite.com/loadtime2.php, и это даст мне время более 5,00 секунд. Я не могу понять, что является причиной этого несоответствия, как будто microtime дает мне время для получения loadtime.php из index.php вместо того, чтобы получать содержимое сайта.

1 ответ

Предполагая, что ваши фрагменты кода не являются надуманными примерами, проблема, вероятно, заключается в следующем:

data: "host=http://www.mywebsite.com",

Поскольку вы используете GET, URL-адреса должны быть закодированы, прежде чем они будут переданы в строке запроса. PHP, вероятно, получает искаженную версию URL, которая 404s за 2 секунды, тогда как loadtime2.php файл дает вам (примерно) фактическое время загрузки. (Вы можете подтвердить это, сбросив URL или ответ)

Попробуйте кодировать URIComponent.

data: "host=" + encodeURIComponent(url),

PS В PHP одиночные галочки ' лучше всего подходят для URL.

Другие вопросы по тегам