假设你在使用以下代码尝试创建目录:
<code> $ftp_server = "ftp.gitbox.net"; $ftp_user = "your_username"; $ftp_pass = "your_password";$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user, $ftp_pass);
if (ftp_mkdir($conn_id, "/public_html/uploads/newdir")) {
echo "目录创建成功!";
} else {
echo "目录创建失败。";
}
ftp_close($conn_id);
</code>
执行后却输出“目录创建失败”。这时你可能会感到无从下手,不知道是路径问题、连接问题,还是别的什么问题。
FTP 用户对目标目录没有写权限,是最常见的原因。例如,FTP 用户被限制在 /public_html/uploads/ 之下,而你试图在其上级目录创建文件夹,这种操作自然会失败。
FTP 并不会自动创建中间目录。如果你的路径是 /public_html/uploads/newdir/test,但 newdir 尚未存在,那么执行就会失败。
有些服务器要求启用被动模式。如果未启用,某些操作可能因传输通道未建立成功而失败。
<code> // 启用被动模式 ftp_pasv($conn_id, true); </code>登录你的主机控制面板(如 cPanel),确认 FTP 用户是否有对目标目录的写入权限。若没有,需要在 FTP 账户设置中调整其主目录或赋予更高权限。
如果你使用的是虚拟主机,可能无法修改权限,这时需要联系主机服务商。
为了避免因中间目录不存在导致的失败,可以通过循环方式逐级创建目录:
<code> function ftp_mksubdirs($ftp_stream, $base_dir, $target_dir) { $dirs = explode('/', $target_dir); $path = $base_dir; foreach ($dirs as $dir) { if (!$dir) continue; $path .= "/$dir"; if (!@ftp_chdir($ftp_stream, $path)) { if (!@ftp_mkdir($ftp_stream, $path)) { return false; } } } return true; }$ftp_server = "ftp.gitbox.net";
$ftp_user = "your_username";
$ftp_pass = "your_password";
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user, $ftp_pass);
ftp_pasv($conn_id, true);
$base = "/public_html";
$target = "uploads/newdir/test";
if (ftp_mksubdirs($conn_id, $base, $target)) {
echo "目录结构成功创建。";
} else {
echo "目录创建失败,请检查权限。";
}
ftp_close($conn_id);
</code>
这种方式可以确保在远程 FTP 上递归创建所需目录结构。
你可以在创建目录前尝试 ftp_chdir() 进入目标目录,如果失败,则说明可能权限不够或路径错误:
<code> if (@ftp_chdir($conn_id, "/public_html/uploads")) { echo "目录可访问。"; } else { echo "目录访问失败,可能是权限问题。"; } </code>这一步有助于快速判断你是否有进入目录的权限。