Создание файла внутри папки, которая еще не существует в php - PullRequest
20 голосов
/ 11 ноября 2008

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

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

data/newfolder/10302008/log_for_Today.txt | 24234234

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

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

Ответы [ 5 ]

60 голосов
/ 12 ноября 2008
if(!file_exists(dirname($file)))
    mkdir(dirname($file), 0777, true);
//do stuff with $file.

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

4 голосов
/ 12 ноября 2008

С

$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

1 голос
/ 20 мая 2015

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

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

1 голос
/ 12 ноября 2008

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

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

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

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

0 голосов
/ 11 ноября 2008

Разве вы не можете просто сделать это, создав dir с помощью 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)) и затем создать файл (сенсорный)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...