Создание файла внутри папки, которой еще нет в php

Я хочу, чтобы мой php-скрипт создавал выходной файл в папке на основе даты. То, как я это делаю, заключается в том, что он должен получить имя папки / имя файла из текстового файла, выведенного другой программой, которую я не могу редактировать.

Итак, файл, из которого он получает данные, выглядит так:

data/newfolder/10302008/log_for_Today.txt | 24234234

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

Все каталоги - 777. Теперь я знаю, как создать новый пустой exe-файл в папке, но не могу понять, как сначала создать папку, а затем exe внутри нее, есть идеи?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
24
0
34 677
5

Ответы 5

Разве вы не можете просто сделать это, создав каталог с помощью mkdir (http://nl.php.net/manual/en/function.mkdir.php), затем chmod it 777 (http://nl.php.net/manual/en/function.chmod.php), изменив каталог с помощью chdir (http://nl.php.net/manual/en/function.chdir.php), а затем создать файл (коснитесь)?

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

Mat 11.11.2008 23:59

Создайте все отсутствующие папки с помощью mkdir (), затем создайте пустой файл с помощью touch ().

Вы можете использовать абсолютные пути в обоих случаях, что означает:

mkdir('data');
mkdir('data/newfolder');
mkdir('data/newfolder/10302008');
touch('data/newfolder/10302008/log_for_Today.txt');

если вам интересно, где это будет отправная точка, вы можете использовать getcwd (), чтобы указать рабочий каталог.

Проголосовали против, поскольку это можно сделать намного проще, используя рекурсивную mkdir () - см. Ответ gnud.

siliconrockstar 11.03.2015 22:30

С

$directories = explode( '/', $path );

вы можете разделить путь, чтобы получить имена отдельных каталогов. Затем пройдите по массиву и создайте каталоги, установив chmod 777. (Системный пользователь, запускающий php, должен иметь возможность сделать это.)

$file = array_pop( $directories );
$base = '/my/base/dir';

foreach( $directories as $dir )
{

   $path = sprintf( '%s/%s', $base, $dir )
   mkdir( $path ); 
   chmod( $path, 777 );
   $base = $path;

}

// file_put_contents or something similar
file_put_contents( sprintf( '%s/%s', $base, $file ), $data );

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

Альтернативой может быть использование FTP. Пользователь передает скрипту данные для входа по FTP, и он использует функции FTP для управления файлами.

http://www.php.net/FTP

Большой палец вниз для 777.

Robo Robok 06.07.2020 19:00
if (!file_exists(dirname($file)))
    mkdir(dirname($file), 0777, true);
//do stuff with $file.

Используйте третий параметр для mkdir (), который заставляет его создавать каталоги рекурсивно.

И я нет. Рекурсивный видимо добавили в версии 5. Круто!

da5id 12.11.2008 01:08

Слишком поздно, но я нашел этот вопрос, и у меня есть решение для него, вот пример кода, и он хорошо работает для меня, независимо от того, насколько глубоким является ваш файл. Вам следует изменить разделитель каталогов для строк 1 и 3, если вы используете его на сервере Windows.

$pathToFile = 'test1/test2/test3/test4/test.txt';
$fileName = basename($pathToFile);
$folders = explode('/', str_replace('/' . $fileName, '', $pathToFile));

$currentFolder = '';
foreach ($folders as $folder) {
    $currentFolder .= $folder . DIRECTORY_SEPARATOR;
    if (!file_exists($currentFolder)) {
        mkdir($currentFolder, 0755);
    }
}
file_put_contents($pathToFile, 'test');

С уважением, Георгий!

Это решение работает очень хорошо в сочетании с RecursiveDirectoryIterator, поскольку основной вывод для имени файла представляет собой строку, которая включает полный путь, а также сам файл. Это решение хорошо подходит для распаковки всего этого. В моем случае я пишу сценарий, который берет статический кеш сайта, который фактически сохраняется как сериализованный объект, распаковывает его для извлечения содержимого HTML из массива, а затем сохраняет его как файл в другом базовом месте. Таким образом, я могу создать статическую версию сайта из кеша без необходимости сканировать сайт для его зеркалирования. Прекрасно работает!

Carnix 22.03.2017 17:59

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