2013-04-15 4 views
1

У меня есть PHP-скрипт, который в настоящее время извлекает время с сервера с помощью time();Альтернатива Времени()

К сожалению, время на сервере в последнее время было не так и раньше , прежде чем оно обновит/сбрасывает. Поддержка хостинга рассмотрела этот вопрос, но пока он не был разрешен, и он продолжается.

Для этого сценария мне нужно, чтобы время было относительно точным, поэтому я подумал, что может быть , который может установить временное исправление до тех пор, пока проблема не будет решена.

Я попытался посмотреть на другие методы получения времени, например, от NIST или . Было некоторое упоминание о его получении из заголовков. Я беспокоюсь, хотя около замедляет сценарий и не уверен, каким будет лучший метод.

BTW Версия PHP - 4.4 - да, я знаю, что она должна быть изменена, но это не в мой элемент управления, как на общем сервере.

Итак, любые предложения о том, как получить текущее время - не время сервера, и , чтобы иметь его как временную метку unix, например time();

Спасибо за любую помощь.

+2

'PHP 4.4' ??? Больше не поддерживается .. что больше проблемы, что ваш вопрос времени – Baba

+0

Я бы серьезно рассмотреть вопрос об изменении хостинга. Большинство общих серверов в настоящее время предлагают как минимум 5.x, и если у вас также проблемы с временем linux ...:/ – Think

+0

Я знаю, что вы говорите, но на данный момент я не могу этого сделать, к сожалению. – onelove

ответ

3

Я знаю, что вы знаете это, но 4.4 серьезно ?? Вы вообще не заботитесь о безопасности?

Чтобы ответить на ваш вопрос, если вы не хотите полагаться на настройки времени сервера, как насчет вызова какого-либо сервера NTP для запроса текущей даты/времени?

http://www.pool.ntp.org/

После некоторых поисков я нашел, что это может быть, дублирует: php validation for NTP server

Также обратите внимание, что слоеные времена могут быть вызваны другими более серьезными проблемами вперед.

+0

Спасибо за ответ! Да, я забочусь о безопасности, и на своих собственных деви и VPS у них самые последние версии. Это общий сервер, который не под моим контролем, и сайт заработал более 12 лет на том же сервере. – onelove

0

Сделать сценарий, который получает время с любого сервера. Как и сервер NIST, вы предложили. Или используйте timeanddate.com. Вы можете использовать file_get_contents() (php4.3 +) Try file_get_contents("http://free.timeanddate.com/clock/i3l84w5k/tt0/tw0/tm3/td2/th1/ta1/tb3") Используйте regexp для извлечения строки времени. А затем верните эту строку времени в метку времени, используя strtotime().

Имейте это время вызова сценария() и вычтите время, отсчитываемое временем, от времени (штампа) удаленного хоста.

Теперь напишите это смещение в кэш, базу данных или файл.

И положил этот скрипт в работу cron.

И напишите функцию myTime(), которая считывает смещение из файла cache/database/file и добавляет его во время().


редактировать: Я работал его немного:

Выполнить этот скрипт периодически с cronjob:

date_default_timezone_set("UTC"); 
$html = file_get_contents("http://free.timeanddate.com/clock/i3l84w5k/tt0/tw0/tm3/td2/th1/ta1/tb3"); 
preg_match('/id=t1>(.*)</U',$html, $matches); 
$timeStamp = strtotime($matches[1]); 
$offset = time() - intval($timeStamp); 
$fh = fopen("time_offset.txt", "w"); 
fwrite($fh, $offset); 
fclose($fh); 

Используйте эту функцию, чтобы получить установленное время:

function myTime() { return time() - intval(file_get_contents("time_offset.txt")); }