Пытаюсь получить время последнего изменения html-файлов для скрипта, генерирующего карту сайта.
Пробовала так:
$last = filemtime($str_url);
Или так:
$tim = date ("F d Y H:i:s.", filemtime($str_url));
И постоянно получаю вот такие ошибки для каждого url из проверяемого массива:
PHP Warning: filemtime(): stat failed for https://site.ru in /var/www/.../.../.../site.ru/src/sitemap14.php on line 247
January 01 1970 03:00:00.PHP Warning: filemtime(): stat failed for /var/www/.../.../.../site.ru/base.html in /var/www/.../.../.../site.ru/src/sitemap14.php on line 247
January 01 1970 03:00:00.PHP Warning: filemtime(): stat failed for /var/www/.../.../.../site.ru/base1.html in /var/www/.../.../.../site.ru/src/sitemap14.php on line 247
В этой 247 строке как раз:
$tim = date ("F d Y H:i:s.", filemtime($str_url));
Переменная $str_url - типа string, как и необходимо для функции filemtime();
Сама переменная выводится (проверяла print_r($str_url)
)
Подскажите, пожалуйста, в чем ошибка и как ее исправить?
Спасибо.
P.S. Уточнила насчет необходимых прав. Ответили, что никие дополнительные права в моем случае не нужны.
Переменная $str_url содержит результат функции strval($url) - строковые значения урлов сайта вида: /var/www/логин_у_хостера/data/www/site.ru/имя_файла
P.P.S. В качестве эксперимента попробовала написать так:
$tim = date ("F d Y H:i:s.", @filemtime($str_url)
В результате получила для каждого значения переменной, кроме последних 2: January 01 1970 03:00:00. А для последних двух - реальное время изменения файлов: April 29 2019 00:03:41. April 14 2019 19:13:31.
Чудеса с этой filemtime()...
тут пишут:
int filemtime ( string $filename )
Данная функция возвращает время последней записи блоков файла
, иначе
говоря, изменения содержания файла
.
Речь идёт о файле. А в вашей ошибке речь о веб-странице:
PHP Warning: filemtime(): stat failed for https://site.ru in /var/www/...
Как вы знаете, этой страницы физически не существует на сервере, она генерируется php на момент запроса. Значит и данных о времени её изменения нет. Это, кстати, можно проверить, чекая http-заголовок
ответа Last-Modified (его сервер отсылает с другими заголовками в ответ на запрос файла):
$headers = get_headers('https://www.php.net/images/logos/php-logo.svg', 1); // file
echo 'get_headers ' . date("Y-m-d H:i:s", strtotime($headers['Last-Modified']));
// 2017-04-19 18:20:03
$headers = get_headers('https://php.ru/manual/wrappers.http.html', 1); // web page
echo 'get_headers ' . date("Y-m-d H:i:s", strtotime($headers['Last-Modified']));
// Notice: Undefined index: Last-Modified
// 1970-01-01 03:00:00
Поэтому вы, делая так @filemtime($str_url),
получали January 01 1970 03:00:00
. Вы подовляли вывод шибок filemtime
с помощью оператора @, и date()
вам показывал время начала эпохи Линух (ну, и +3ч на часовой пояс вашего сервера). А вот последние два - я полагаю - файлы, по ним вы получили верные значения.
Вариант для вас - кешировать страницы. В таком случае на первый запрос https://site.ru
будет создаваться физический html
файл. Единственный минус - необходимость очистки кешей после каждого изменения контента, руками или скриптом.
Если сайт на WP и прочих - ищите екстеншены, решающие подобные вопросы.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
По отправке форм, обращается программа через ajax к php файлу:
Например, у меня есть главная страница, на которой должен быть подключен только maincss, а на странице товара product-page
Есть файл который выводит посты относятсящиеся к определённым рубрикамСодержимое фала: https://pastebin