web-dev-qa-db-ja.com

PHPにまだ存在しないフォルダー内にファイルを作成する

Phpスクリプトで、日付に基づいてフォルダーに出力ファイルを作成したいと思います。私がこれをしている方法は、私が編集できない別のプログラムによって出力されたテキストファイルからフォルダ名/ファイル名を取得することになっているということです。

したがって、データを取得するファイルは次のようになります。

data/newfolder/10302008/log_for_Today.txt | 24234234

複数行の場合のみ、スクリプトを1行ずつ実行し、フォルダー/ファイル名を取得して、その場所にその名前の空のファイルを作成する必要があります。

ディレクトリはすべて777です。フォルダ内に新しい空のexeファイルを作成する方法を知っていますが、最初にフォルダを作成し、次にその中のexeを作成する方法を理解できないようです。

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

3番目のパラメーターを mkdir() に使用します。これにより、ディレクトリが再帰的に作成されます。

68
gnud

$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

5
okoman

手遅れですが、この質問を見つけました。これに対する解決策があります。これがサンプルコードであり、ファイルの深さに関係なく機能します。 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');

よろしく、ゲオルギ!

2
user546774

Mkdir()を使用して不足しているフォルダーを作成してから、touch()を使用して空のファイルを作成します。

どちらの場合も絶対パスを使用できます。つまり、次のようになります。

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

開始点がどこになるか知りたい場合は、getcwd()を使用して作業ディレクトリを指定できます。

1
jishi

Mkdir( http://nl.php.net/manual/en/function.mkdir.php )でdirを作成し、それを777( http://nl.php.net/manual/en/function.chmod.php )chdirを使用したディレクトリの変更( http://nl.php.net/manual/en/function.chdir .php )そしてファイルを作成します(タッチ)?

0
Overbeeke