假設你在使用以下代碼嘗試創建目錄:
<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>這一步有助於快速判斷你是否有進入目錄的權限。