Touch: примеры (PHP)
Использование touch в PHP для управления временем файлов
Раздел: Работа с файловой системой
touch(string filename [, int time [, int atime]]): boolОсновные сведения о функции touch
Функция touch в PHP изменяет время модификации файла. Если файл отсутствует, она создает пустой файл с указанным именем, если это разрешено контекстом директории.
Использование функции актуально для сценариев кеширования, управления временем жизни файлов, принудительного обновления метаданных или создания пустых файлов-меток.
Аргументы функции
bool touch(string $filename, ?int $mtime = null, ?int $atime = null)
- filename (строка) - путь к целевому файлу.
- mtime (целое число или null) - время модификации (timestamp Unix). Если установлено в null, используется текущее время.
- atime (целое число или null) - время последнего доступа (timestamp Unix). Если null, для него устанавливается значение аргумента mtime или текущее время.
Простые примеры использования
Создание нового файла
<?php
touch('new_file.txt');
echo file_exists('new_file.txt') ? 'Файл создан' : 'Ошибка';
?>Файл создан
Обновление времени модификации существующего файла
<?php
// Устанавливаем время модификации на 1 января 2023 года
$success = touch('existing.txt', 1672531200);
echo $success ? 'Время обновлено' : 'Не удалось';
?>Время обновлено
Установка времени модификации и времени доступа
<?php
// Устанавливаем разное время для mtime и atime
$result = touch('test.log', 1672531200, 1672617600);
var_dump($result);
?>bool(true)
Альтернативные функции в PHP
- fopen() с режимом 'w' или 'a' - создает или открывает файл для записи. Предпочтительнее, когда требуется сразу начать запись данных.
- file_put_contents() - записывает данные в файл. Более удобна для немедленной записи содержимого, а не только создания пустого файла.
- chmod(), chown() - изменяют другие атрибуты файла (права доступа, владельца), но не время модификации.
Распространенные ошибки
Отсутствие прав на запись
<?php
// Попытка создать файл в системной директории без прав
$result = touch('/etc/new_mark.txt');
var_dump($result); // false
print_r(error_get_last());
?>bool(false)
Array
(
[type] => 2
[message] => touch(): Unable to create file /etc/new_mark.txt because Permission denied
[file] => ...
[line] => ...
)Некорректный путь к файлу
<?php
// Передача директории вместо файла
$result = touch('/tmp');
var_dump($result);
?>bool(false)
Использование будущего времени
<?php
// Установка времени в будущем (может вызвать проблемы в кеширующих системах)
$success = touch('cache.data', time() + 3600);
?>Изменения в новых версиях PHP
В PHP 8.0 параметры mtime и atime стали nullable (допускают значение null). Ранее их можно было опустить, но неявно передавался 0. Теперь явное указание null приводит к использованию текущего времени, что улучшает читаемость кода.
<?php
// До PHP 8.0: touch('file.txt', null) интерпретировалось как 0
// Начиная с PHP 8.0: null устанавливает текущее время
?>Расширенные примеры применения
Создание нескольких файлов с определенным временем
Пример php
<?php
$baseTime = strtotime('2023-06-01');
for ($i = 0; $i < 5; $i++) {
$filename = "archive_$i.dat";
touch($filename, $baseTime + ($i * 86400));
}
?>Имитация активности файла для скриптов очистки
Пример php
<?php
// 'Омоложение' файла, чтобы он не был удален скриптом
$file = 'log.txt';
if (file_exists($file) && time() - filemtime($file) > 3600) {
touch($file); // Обновляем время модификации
}
?>Создание дерева каталогов и файла
Пример php
<?php
// touch() не создает директории, потому нужна предварительная проверка
$path = 'deep/nested/structure/marker.txt';
$dir = dirname($path);
if (!is_dir($dir)) {
mkdir($dir, 0777, true);
}
touch($path);
?>Использование с clearstatcache()
Пример php
<?php
$file = 'data.cache';
$oldTime = filemtime($file);
touch($file, time() + 100);
clearstatcache(true, $file); // Сброс кеша статуса файла
$newTime = filemtime($file);
echo "Время изменено с $oldTime на $newTime";
?>Аналоги в других языках программирования
Touch в Python
import os
import time
# Создание или обновление времени
os.utime('file.txt', (1672617600, 1672531200))
# Простое создание пустого файла
open('new.txt', 'a').close()JavaScript (Node.js)
const fs = require('fs');
// Изменение временных меток
fs.utimes('file.txt', 1672617600, 1672531200, (err) => {});
// Создание пустого файла
fs.closeSync(fs.openSync('new.txt', 'w'));Touch в MySQL
-- Нет прямой аналогии. Время модификации файлов не управляется через SQL.PHP touch function comments
En
Touch Sets access and modification time of file