【问题标题】:FTP Mirroring in CodeigniterCodeigniter 中的 FTP 镜像
【发布时间】:2012-06-18 00:07:35
【问题描述】:

我们在一个由数据库驱动的 CI 应用程序上维护 70 多个房地产网站(实际上,一个数据库和应用程序用于生产站点,一个数据库和应用程序用于开发站点),以便为每个站点提供必要的差异。我们提供定制的 CMS,以便物业经理可以定期更新他们的网站。有一个批准流程可以通过 CMS 将对其开发站点所做的更改推送到其生产站点。

CMS 的一个功能是上传相册。专辑上传到开发并批准生产后,我需要将此文件夹从开发资产复制到他们的生产资产。

我建立 FTP 连接并使用以下方法创建相册文件夹没有问题:

$this->ftp->mkdir($path['ftpP'].'photoAlbums/'.$album[0]['albumFolderName'].'/', DIR_WRITE_MODE);

($path['ftpP'] 看起来像这样:/httpdocs/edrAssets/propsP/700/

当我尝试在 FTP 类中使用镜像功能时,我没有收到任何错误或警告,但我也没有收到任何传输 - 什么都没有。

代码如下:

$dLink = $path['ftpD'].'photoAlbums/'.$album[0]['albumFolderName'].'/';
$pLink = $path['ftpP'].'photoAlbums/'.$album[0]['albumFolderName'].'/';

$this->ftp->mirror($dLink, $pLink); 

我从星期四晚上开始就一直在努力解决这个问题,需要一些建议。感谢所有帮助。

乔恩

请求的日志文件:

DEBUG - 2012-06-18 07:15:31 --> 控制器类已初始化

DEBUG - 2012-06-18 07:15:31 --> Ftp 类已加载。第二次尝试被忽略。

DEBUG - 2012-06-18 07:15:31 --> 在这里尝试 FTP

错误 - 2012-06-18 07:15:31 --> 严重性:警告 --> opendir() [function.opendir]: 无法访问 /httpdocs/edrAssets/propsD/700/photoAlbums/theUSOpen2012/ / var/www/vhosts/edrpropertyoperations.com/httpdocs/WEBdev/system/libraries/Ftp.php 532

错误 - 2012-06-18 07:15:31 --> 严重性:警告 --> opendir(/httpdocs/edrAssets/propsD/700/photoAlbums/theUSOpen2012/) [function.opendir]: 无法打开目录: 没有这样的文件或目录 /var/www/vhosts/edrpropertyoperations.com/httpdocs/WEBdev/system/libraries/Ftp.php 532

DEBUG - 2012-06-18 07:15:31 --> 最终输出发送到浏览器

DEBUG - 2012-06-18 07:15:31 --> 总执行时间:0.1626

添加 *

    public function approved_create_album( $id ){   
         $thisTask = $this->mcms->getSingleAdminTask( $id );

         $album = $this->mcms->getAlbumByID($thisTask[0]['itemID']);    
         $path = $this->mcms->path_variables( $album[0]['propNumber']);

         $this->load->library('ftp');   
         $ftp['hostname'] = <REMOVED>;
         $ftp['username'] = <REMOVED>;  
         $ftp['password'] = <REMOVED>;
         $ftp['port']     = 21;     
         $ftp['passive']  = FALSE;  
         $ftp['debug']    = TRUE;   
         $ftp['ssl_mode'] = FALSE;  
         $this->ftp->connect($ftp);

         $dLink = $path['ftpD'].'photoAlbums/'.$album[0]['albumFolderName'].'/';    
         $pLink = $path['ftpP'].'photoAlbums/'.$album[0]['albumFolderName'].'/';

         if( !file_exists($pLink) && !is_dir($pLink)){
              $this->ftp->mkdir($path['ftpP'].'photoAlbums/'.$album[0]['albumFolderName'].'/', DIR_WRITE_MODE);     
         } // end if

         log_message('debug', 'Trying to FTP here');
         $this->ftp->mirror($dLink, $pLink);

         echo $dLink . " to " . $pLink; 
} // end approved_create_album function

【问题讨论】:

    标签: codeigniter


    【解决方案1】:

    我建议逐步调试:

    1) 将调试设置为 TRUE,请参阅 function reference。您可能需要打开error_reporting

    2) 连接到服务器(您已经这样做了)并上传文件。 如果这有效,您就知道 a) 连接有效并且 b) 您的文件路径正确。

    如果仍然无法正常工作,请查看日志(或在此处发布;-))。 祝你好运!

    更新:

    我在自己的服务器上测试了 FTP 库。开箱即用,像魅力一样工作。因此,我们需要确定问题出在服务器还是您的 CI 配置上。

    这是我接下来要做的:

    1) 使用此示例尝试更少的配置、更少的变量、对所有内容进行硬编码:

    <?php
    $this->load->library('ftp');
    $config['hostname'] = 'ftp.example.com';
    $config['username'] = 'your-username'; 
    $config['password'] = 'your-password';
    $this->ftp->connect($config);
    $this->ftp->mirror('/path/to/myfolder/', '/public_html/myfolder/');
    $this->ftp->close(); 
    

    如果它不起作用,那么:

    2) 下载全新的 CI 安装并将其放在您的服务器上。您不需要任何配置或数据库连接。然后在新鲜环境中尝试上面的示例。

    【讨论】:

    • 步骤 2) 怎么样?你能上传一个文件吗?
    • 您能否将以下内容添加到您的代码中并更新日志。然后我们可以看到你的代码在哪里执行。 log_message('debug', '这里尝试 FTP');我还看到 FTP 类被加载了 2 次。如果它正在重写您的设置,这可能是问题(即使它说它被忽略了)
    • 我在上面添加了日志......现在我添加了该代码
    • 上面我还添加了完整的控制器方法
    • 您接受了答案。问题解决了吗?我还没有时间查看你的日志。
    【解决方案2】:

    在您的代码中直接下拉到 unix 并使用命令行rsync 怎么样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多