我尝试使用ftp_fget
和fgetcsv
函数在远程服务器上读取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()
。
答案 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)
/*
*/
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, ".");