Подтвердить что ты не робот

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

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

Итак, файл, захвативший данные, выглядит так:

data/newfolder/10302008/log_for_Today.txt | 24234234

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

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

4b9b3361

Ответ 1

if(!file_exists(dirname($file)))
    mkdir(dirname($file), 0777, true);
//do stuff with $file.

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

Ответ 2

С

$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 script.

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

http://www.php.net/FTP

Ответ 3

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

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

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

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

Ответ 4

Немного поздно, но я нашел этот вопрос, и у меня есть решение для этого, вот пример кода, и он работает хорошо для меня независимо от того, насколько глубоко ваш файл. Вы должны изменить разделитель каталога для строк 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');

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