PHP 7.1.4(Ionic2后端)FTP服务器创建文件夹异常求助
解决PHP FTP创建文件夹显示成功但实际不存在的问题
这问题我之前排查过类似的,核心矛盾是FTP路径匹配错误或者权限限制导致的,咱们一步步拆解排查:
先确认FTP当前工作目录
很多时候FTP登录后的默认目录并不是你网站的根目录(比如可能是/home/your-username/,而网站根目录是/home/your-username/public_html/)。你可以在ftp_mkdir代码前加一行输出当前路径:echo "当前FTP工作目录:" . ftp_pwd($ftp_conn);看看输出的路径是不是你预期的目标目录父级,大概率这里会发现路径不对——你以为在网站根目录创建文件夹,实际是在FTP默认目录创建了,而这个目录不在网站的可访问范围内,所以你看不到。
改用绝对路径创建文件夹
不要依赖相对路径,直接使用FTP服务器的绝对路径来指定创建位置,比如:$folder_path = "/home/your-username/public_html/images"; ftp_mkdir($ftp_conn, $folder_path);这样能彻底避免当前工作目录的混淆问题。
检查权限与目录存在性的真实状态
虽然第二次访问提示“File exists”,但实际看不到文件夹,可能是:- 文件夹被创建在你没有权限查看的目录(比如FTP用户的私有目录);
- 服务器的FTP服务启用了chroot jail,限制了你只能在指定子目录操作,超出范围的创建请求会被“伪装”成成功/已存在。
你可以用ftp_nlist列出当前目录的所有内容,验证是否真的存在该文件夹:
$files = ftp_nlist($ftp_conn, "."); print_r($files); // 输出当前目录下的所有文件和文件夹修正后的完整示例代码
结合上面的排查点,给你一个更严谨的代码示例:<?php $ftp_host = "你的FTP服务器地址"; $ftp_user = "FTP用户名"; $ftp_pass = "FTP密码"; // 建立FTP连接 $ftp_conn = ftp_connect($ftp_host) or die("无法连接到FTP服务器"); $login_success = ftp_login($ftp_conn, $ftp_user, $ftp_pass); if (!$login_success) { die("FTP登录失败"); } // 输出当前工作目录,用于排查路径问题 echo "当前FTP工作目录:" . ftp_pwd($ftp_conn) . "<br>"; // 使用绝对路径指定要创建的文件夹 $target_folder = "/home/your-username/public_html/images"; // 先检查文件夹是否真实存在 $folder_exists = in_array(basename($target_folder), ftp_nlist($ftp_conn, dirname($target_folder))); if (!$folder_exists) { if (ftp_mkdir($ftp_conn, $target_folder)) { echo "Successfully created images"; } else { echo "Error while creating images"; } } else { echo "Directory already exists"; } // 关闭FTP连接 ftp_close($ftp_conn); ?>
另外还要注意:有些服务器会禁用FTP的主动模式,如果你遇到连接问题,可以尝试切换到被动模式:ftp_pasv($ftp_conn, true);
内容的提问来源于stack exchange,提问作者user8667024




