douhai5835 2013-06-11 18:25
浏览 70
已采纳

php ftp制作多个目录

Here is my PHP code. It actually works fine:

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

It uploads a file from local server to remote ftp servers. As you can se there are 2 ugly if conditions that check if directory exists, if not we create it and move in it. And again for subdir. Since I now want my directories (on the ftp servers) to look like YYYY/MM/DD/username instead of YYYYMMDD/username, I will need to create two more of these if blocks. It works great, but it does not look clean, I'm kind of maniac about it... I was wondering if there is better way to do it, since ftp_mkdir() cannot make multiple dirs (dir with subdirs in it)?

for exemple, considering only the /uploads/ dir exists, but not the /2013/ neither subdir /06/ and /11/ :

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

returns:

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
  • 写回答

2条回答 默认 最新

  • dsiv4041 2013-06-11 20:29
    关注
    <?php
    
    // function
    function ftp_mksubdirs($ftpcon,$ftpbasedir,$ftpath){
       @ftp_chdir($ftpcon, $ftpbasedir); // /var/www/uploads
       $parts = array_filter(explode('/',$ftpath)); // 2013/06/11/username
       foreach($parts as $part){
          if(!@ftp_chdir($ftpcon, $part)){
             ftp_mkdir($ftpcon, $part);
             //ftp_chmod($ftpcon, 0775, $part);
             ftp_chdir($ftpcon, $part);
          }
       }
    }
    
    // usage
    $path_of_storage = '/var/www/uploads';
    $newftpdir = '2013/06/11/username';
    
    $conn_id = ftp_connect($ftpserver);
    ftp_login($conn_id, $login, $pass);
    ftp_mksubdirs($conn_id,$path_of_storage,$newftpdir);
    ftp_close($conn_id);
    
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行