为什么" ftp_fget"正在返回" bind()失败:权限被拒绝(13)"在PHP?

时间:2014-06-06 15:31:00

标签: php ftp permission-denied

我尝试使用ftp_fgetfgetcsv函数在远程服务器上读取csv文件。我在远程服务器上读取文件时已多次练习,直到现在它工作正常。

我无法弄清楚为什么ftp_fget会返回此错误:bind() failed: Permission denied (13)。 此外,我也无法找到有关此错误消息的任何真实解释。

我的客户端给了我远程服务器访问权限,表示它是 Windows Server

$distant_folder = "/myfolder/";
$filename = "myfile.csv";

$ftpstream = ftp_connect($ftp_server); 
$login = ftp_login($ftpstream, $ftp_user, $ftp_pass);

if($login){
    $tmp_handle = fopen('php://temp', 'r+');

    if (ftp_fget($ftpstream, $tmp_handle, $distant_folder.$filename, FTP_ASCII)){
        // do stuff with fgetcsv()...
    }
}

请注意,出于保密原因,隐藏了ftp服务器变量的值。

编辑:我找到了解决方案!

我在ftp_pasv($ftpstream, true);ftplogin()函数之间使用了ftp_fget()

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我复制文件的脚本是:

<?php
//Show erros:
ini_set('display_errors', 'On');
error_reporting(E_ALL);

// connect and login to FTP server
$ftp_server = "ftp.painelx.com";
$ftp_conn   = ftp_connect($ftp_server) or die("Could not connect to $ftp_server.<br>");
$login      = ftp_login($ftp_conn, 'user_ftp', 'pass_ftp') or die("Could not login to $ftp_server.<br>");

$local_file = "data.xml";
$server_file = "/paineis/wg/dataxml/data.xml";

//Directory and file(/paineis/wg/dataxml/data.xml) on remote server(ftp.painelx.com)
/*

enter image description here

*/

if($login) {
    echo "Connected to painel.";

    ftp_pasv($ftp_conn, true); // ! IMPORTANT

    $permission = ftp_get($ftp_conn, $local_file, $server_file, FTP_ASCII);

    if ($permission) {
        echo "Successfully written to $local_file.<br>";
    } else {
        echo "Error downloading $server_file.<br>";
    }

} else {
    echo "NOT connected.<br>";
}

ftp_close($ftp_conn);
?> 

PS。:同样的问题出现在www.ipage.com主持人身上。

答案 1 :(得分:1)

您必须将连接切换到被动模式,因此您的 FTP 客户端会请求一个端口来连接到 FTP 服务器。放在ftp_put(), ftp_get(), ftp_nlist()等之前,例如:

ftp_pasv($connId, true);
$list = ftp_nlist($connId, ".");