3

これが私のPHPコードです。それは実際にうまく動作します:

            $newftpdir_parent   = date('Ymd');                              // YYYYMMDD
            $newftpdir_child    = $ext_folder;                              // username
            $newftpdir          = $newftpdir_parent.'/'.$newftpdir_child;   // YYYYMMDD/username
            $conn_id            = ftp_connect($uptoftp_server);
            ftp_login($conn_id, $uptoftp_username, $uptoftp_pass);

            $path_of_storage    = $uptoftp_path_abs.'/'.$uptoftp_path_rel; // /var/www/uploads
            if( !@ftp_chdir($conn_id, $path_of_storage.'/'.$newftpdir_parent) ){
                  ftp_mkdir($conn_id, $path_of_storage.'/'.$newftpdir_parent);
                  ftp_chmod($conn_id, 0777, $path_of_storage.'/'.$newftpdir_parent);
            }
            if( !@ftp_chdir($conn_id, $path_of_storage.'/'.$newftpdir) ){
                  ftp_mkdir($conn_id, $path_of_storage.'/'.$newftpdir);
                  ftp_chmod($conn_id, 0777, $path_of_storage.'/'.$newftpdir);
            }

            ftp_chdir($conn_id, $path_of_storage.'/'.$newftpdir);

            ftp_put($conn_id, $file_name, $filetoftp, FTP_ASCII);

            ftp_close($conn_id);

ローカル サーバーからリモート ftp サーバーにファイルをアップロードします。ご覧のとおり、ディレクトリが存在するかどうかを確認する条件が 2 つあり、存在しない場合は作成してそこに移動します。サブディレクトリについても同様です。(ftp サーバー上の) ディレクトリを YYYYMMDD/username ではなく YYYY/MM/DD/username のようにしたいので、これらの if ブロックをさらに 2 つ作成する必要があります。それはうまく機能しますが、きれいに見えません。私はそれについて一種のマニアックです... ftp_mkdir() は複数のディレクトリ (サブディレクトリを含むディレクトリ) を作成できないため、より良い方法があるかどうか疑問に思っていました。

たとえば、 /uploads/ ディレクトリのみが存在し、 /2013/ サブディレクトリ /06/ および /11/ は存在しないと見なします。

ftp_mkdir($conn_id, '/var/www/uploads/2013/06/11');

戻り値:

Warning: ftp_mkdir() [function.ftp-mkdir]: /var/www/uploads/2013/06/11: No such file or directory in /home/blabla/www/test.php on line 18
4

2 に答える 2