【问题标题】:Function glob() not working with externe URL函数 glob() 不适用于外部 URL
【发布时间】:2016-04-25 05:46:29
【问题描述】:

我对这个问题感到困惑 当我在本地工作时,一切都很好 有了这个 :
foreach (glob("public/FolderA/B/") as $filename) {
但是当我把
foreach (glob("http://www.exemple.com/public/FolderA/B/") as $filename) {
没有任何解决方案???
历史 : 过去我使用 glob() 并与 本地服务器 通信,现在脚本完美地完成了这项工作,现在完成的是 transfert 到其他服务器,我得到的问题是如何让 glob() 工作与外部 URL 不在本地或某些功能具有相同的功能

【问题讨论】:

    标签: php function ftp client-server glob


    【解决方案1】:

    glob() 根据定义查找与模式匹配的路径名。
    这意味着该函数将无法在远程文件上运行,因为要检查的目录 / 文件必须可以通过服务器的文件系统访问。

    您可能需要的是通过 FTP 服务器访问远程文件系统。

    这就是它的样子:

    $conn_id = ftp_connect($ftp_server);
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
    get contents of the current directory
    $contents = ftp_nlist($conn_id, ".");  // "." means the current directory
    var_dump($contents);
    

    或者,如果之前的本地服务器仍然可以访问,您可以在此服务器上设置一个脚本,像以前一样扫描目录并回显文件列表(例如,以 XML 或 JSON 格式)。该脚本可以由(现在)远程脚本发送请求,以这种方式提供文件列表。

    更新:FTP 访问,完整脚本

    <?php
    
    $ftp_server   = 'ftp.example.org';
    $ftp_port     = 21;
    $ftp_timeout  = 90;
    $ftp_user     = 'my_username';
    $ftp_password = 'my_password';
    
    // set up a connection or die
    $conn_id = ftp_connect($ftp_server, $ftp_port, $ftp_timeout);
    if ($conn_id===false) {
        echo 'Failed to connect to the server<br />';
        exit(1);
    }
    
    // Log in or die
    $logged_in = ftp_login($conn_id, $ftp_user, $ftp_password);
    if ($logged_in!==true) {
        echo 'Failed to log-in<br />';
        exit(1);
    }
    
    // Change directory if necessary
    echo "Current directory: " . ftp_pwd($conn_id) . '<br />';
    
    // Set to passive mode if required
    ftp_pasv ($conn_id, true);
    
    // Change directory if necessary
    if (ftp_chdir($conn_id, 'subdir1/subdir2')) {
        echo "Current directory is now: " . ftp_pwd($conn_id) . '<br />';
    } else {
        echo 'Could not change directory<br />';
        exit(1);
    }
    
    // Get list of files in this directory
    $files = ftp_nlist($conn_id, ".");
    if ($files===false) {
        echo 'Failed to get listing<br />';
        exit(1);
    }
    
    foreach($files as $n=>$file) {
        echo "$n: $file<br />";
        $local_dir = '/my_local_dir/';
        foreach($files as $n => $file) {
            // These we don't want to download
            if (($file=='.') || ($file=='..') || ($file[0]=='.')) continue;
            // These we do want to download
            echo "$n: $file<br />";
            if (ftp_get($conn_id, $local_dir.$file, $file, FTP_BINARY)) {
                echo "Successfully written to $local_dir$file<br />";
            } else {
                echo "Could not get $local_dir.$file<br />";
            }
        }
        // Do whatever has to been done with $file
    }
    
    ?>
    

    【讨论】:

    • 是的,我从两天前开始使用这种方法,但是当我想 foreach 一个文件夹并获取 所有文件 时,我仍然遇到问题
      $filename = /home/Fto/www/test/public/data/module/111445 foreach ($filename as $file) {
    • 你试过我提出的代码了吗? var_dump() 显示什么?从 FTP 服务器获取文件列表后,您肯定可以使用 foreach... 构造。
    • FTP 工作一切正常,但是当我在路径中首先 foreach 并获取所有文件夹但当我想要 foreach 文件夹并获取文件 '.txt' 时,我无法执行此操作'提供的无效参数foreach()' 但在本地使用 glob() 没问题:/ @hherger
    • 因此,我添加了一个完整的脚本,用于访问 FTP 服务器、获取目录列表以及从该目录下载所有文件。当然,您可以添加一个过滤器以便只下载您想要的文件。结果将是您像以前一样在本地拥有文件。
    • ...显然你也可以像以前一样使用 glob()
    【解决方案2】:

    如果你的 PHP 脚本在 Windows 下运行,你可以使用

    glob("\\\\remoteServer\\public\\FolderA\\B\\*.*")
    

    因为正如 hherger 所说,“要检查的目录/文件必须可以通过服务器的文件系统访问。” Windows 允许使用 UNC 路径访问其他 PC。因为 Windows 使用反斜杠而不是正斜杠,并且在 PHP 中,反斜杠是转义字符,所以每个反斜杠前面都必须有一个反斜杠。在 Windows 资源管理器(又名文件资源管理器)中,上述 UNC 路径为

    \\remoteServer\public\FolderA\B\*.*
    

    【讨论】:

      猜你喜欢
      • 2011-10-29
      • 2021-10-05
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多