我喜欢和 mamp 一起工作(我有专业版)。我目前正在尝试连接到 ftp 服务器并在那里列出文件。但是连接成功,但不会列出文件。
$contents = ftp_nlist($conn_id, $path);
返回布尔值(假)
但是,如果我在我的真实网络服务器上运行它,该脚本就可以工作。我是否必须设置一些偏好才能使其在本地也能正常工作?
问候
我有 MAMP,所以我使用 php 手册页中的第一个示例进行了一些测试ftp_nlist
,并且得到了与您相同的错误(bool(false)
)。事实证明,如果使用该代码:
// set up basic connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// get contents of the current directory
$contents = ftp_nlist($conn_id, ".");
// output $contents
var_dump($contents);
并且由于用户名或密码错误,登录失败,如果将失败并显示bool(false)
消息。
最好做一些可以为您提供有关失败位置的更好信息(如果确实失败)的事情:
// set up basic connection variables
$ftp_server='127.0.0.1';
$ftp_user_name='user';
$ftp_user_pass='pass';
//initiate connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass) or die ('login failed');
// get contents of the current directory
$contents = ftp_nlist($conn_id, ".") or die ('could not get contents');
// output $contents
var_dump($contents);
我对此进行了测试,并且可以正常工作。给定正确的凭据,它将登录并转储目录。如果凭据错误,则会die
显示“登录失败”消息。如果路径不正确,则会die
显示“无法获取内容”消息;所以至少如果它真的坏了,你会更好地知道在哪里。
高温高压
ftp_nlist()
如果您在防火墙后面,有时会返回 false。尝试在验证后直接打开被动模式ftp_pasv()
,如下所示:
$conn_id = ftp_connect($server_ip);
$login_result = ftp_login($conn_id, $username, $password);
ftp_pasv($conn_id, true);
$contents = ftp_nlist($conn_id, $path);
我发现了一个可以解决此问题的问题。如果您将 Mac 启动到 32 位模式,它似乎可以正常工作。要引导您进入 32 位模式,请在引导时按住键盘上的 3 和 2。我能够让这个功能工作。
解决方案:我找到了解决方案。
要解决,请执行以下操作:将其添加到 php 脚本中: var_dump(getenv(TMPDIR)); 出口;
我的返回了一个奇怪的 tmp 目录位置或 /var/folders
然后我做了: sudo chmod -R 0777 /var/folders
现在它按预期工作!