26

我希望我的 php 脚本根据日期在文件夹中创建一个输出文件。我这样做的方式是它应该从另一个我无法编辑的程序输出的文本文件中获取文件夹名/文件名。

因此,它从中获取数据的文件如下所示:

data/newfolder/10302008/log_for_Today.txt | 24234234

只有多行,我只需要脚本逐行遍历它,获取文件夹/文件名并在该位置创建一个具有该名称的空文件。

目录都是 777。现在我知道如何在文件夹中创建一个新的空 exe 文件,但似乎无法弄清楚如何先创建文件夹,然后再创建其中的 exe,有​​什么想法吗?

4

5 回答 5

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

使用mkdir()的第三个参数,这使它递归地创建目录。

于 2008-11-11T21:07:05.140 回答
4

$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 );

这里的问题是你可能没有从你的 php 脚本中设置 chmod。

另一种方法是使用 FTP。用户将 FTP 登录数据传递给脚本,它使用 FTP 功能来管理文件。

http://www.php.net/FTP

于 2008-11-11T21:06:14.923 回答
2

为时已晚,但我发现了这个问题,我有一个解决方案,这里有一个示例代码,无论你的文件有多深,它对我都有好处。如果您在 Windows 服务器上运行它,您应该更改第 1 行和第 3 行的目录分隔符。

$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');

最好的问候,乔治!

于 2015-05-19T22:39:39.933 回答
1

使用 mkdir() 创建任何丢失的文件夹,然后使用 touch() 创建空文件。

在这两种情况下都可以使用绝对路径,这意味着:

mkdir('数据');
mkdir('数据/新文件夹');
mkdir('data/newfolder/10302008');
touch('data/newfolder/10302008/log_for_Today.txt');

如果你想知道它的起点在哪里,你可以使用 getcwd() 告诉你工作目录。

于 2008-11-11T21:00:48.787 回答
0

你不能通过使用 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 )更改目录,然后创建文件 (touch)?

于 2008-11-11T20:55:24.040 回答