You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PHP FTP上传报错:无法打开随机临时文件路径求助

解决FTP上传时临时文件找不到的问题

我来帮你排查这个上传失败的问题,错误提示里的临时文件路径是PHP处理上传时自动生成的,出现“Can't open that file”通常和文件权限、临时文件生命周期或者FTP配置有关,咱们一步步来解决:

可能的原因与解决方案

1. 检查临时文件目录的权限

LAMPP的临时文件目录/opt/lampp/temp/需要让PHP运行进程(一般是www-data用户)有读取权限。你可以通过终端命令查看权限:

ls -l /opt/lampp/temp/

如果权限不对,执行以下命令调整:

sudo chown -R www-data:www-data /opt/lampp/temp/
sudo chmod 755 /opt/lampp/temp/

2. 避免临时文件被提前清理

PHP默认会在脚本执行结束后自动删除上传的临时文件,如果你的脚本在ftp_put之前有耗时操作,或者服务器的临时文件清理机制触发过快,就会导致文件找不到。建议先把临时文件复制到自定义目录,再上传:
修改你的PHP代码如下:

$ftp_server = "xxxxxxxxxxxxxx"; 
$ftp_username = "xxxxxxxxxxxxxxxxxxxxxxx"; 
$ftp_userpass = "xxxxxxxx"; 
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server"); 
$login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass); 

// 复制临时文件到当前目录(加唯一ID避免重名)
$temp_file = $_FILES['file']['tmp_name'];
$file_name = $_FILES['file']['name'];
$local_copy = "./temp_upload_" . uniqid() . "_" . $file_name; 

if (!copy($temp_file, $local_copy)) {
    die("无法复制临时文件,请检查权限");
}

// 确保远程目录存在
$remote_dir = "/uploaded/";
if (!ftp_chdir($ftp_conn, $remote_dir)) {
    // 目录不存在则创建
    if (!ftp_mkdir($ftp_conn, $remote_dir)) {
        die("无法创建远程目录 $remote_dir,请检查FTP权限");
    }
}

$remote_file = $remote_dir . $file_name; 
// 用二进制模式上传(适合所有文件类型)
if (ftp_put($ftp_conn, $remote_file, $local_copy, FTP_BINARY)) { 
    echo "文件 $file_name 上传成功!"; 
    // 上传完成后删除本地临时副本
    unlink($local_copy);
} else { 
    echo "文件 $file_name 上传失败,请检查FTP配置"; 
    unlink($local_copy);
} 
ftp_close($ftp_conn);

这里有两个关键调整:

  • FTP_ASCII改成FTP_BINARY:ASCII模式仅适用于纯文本文件,二进制模式支持所有类型文件(图片、压缩包等),避免文件损坏或上传失败。
  • 复制临时文件到本地目录:确保上传时文件存在,不会被PHP提前清理。

3. 检查FTP服务器的远程目录权限

错误也可能是远程FTP服务器上的/uploaded/目录不存在,或者你的FTP用户没有写入权限。可以用FTP客户端手动登录,确认目录存在且有写入权限,或者用上面代码里的ftp_mkdir自动创建目录。

4. 验证PHP的临时文件配置

你可以在脚本里添加phpinfo()查看PHP的临时文件配置:

phpinfo();

找到upload_tmp_dir项,确认路径是/opt/lampp/temp/,且该目录存在、权限正确。如果路径错误,修改php.ini文件后重启LAMPP服务。

内容的提问来源于stack exchange,提问作者Filip Guzdek

火山引擎 最新活动