【问题标题】:ftp_put() error failed to open stream: No such file or directoryftp_put() 错误打开流失败:没有这样的文件或目录
【发布时间】:2015-06-04 14:32:41
【问题描述】:

所以我试图在 webhost 上创建一个 php,允许客户端将文件上传到 webhost,然后 webhost 使用 ftp_put 将文件上传到另一个 ftp 服务器。以下函数用于上传文件。

    //upload ftp
    function ftp_upload($conn, $vid_name, $video){
    //get tmp file
    $file_tmp_name = $video['tmp_name'];
    echo $file_tmp_name;

    //combine name with extension name
    $server_file_name = $vid_name . "." .      pathinfo($video['name'],PATHINFO_EXTENSION);

           //upload video
        $upload = ftp_put($conn, $server_file_name, $file_tmp_name , FTP_BINARY);
    return $upload;

}

但是它不断收到错误消息, 警告:ftp_put(/tmp/phpKOtNWK) [function.ftp-put]:打开流失败:没有这样的文件或导演。

于是我去了我的子域下的webhost中的文件管理器,没有tmp这样的目录,我没有权限进入webhost的根目录。

感谢您的帮助。

【问题讨论】:

  • $video['tmp_name'] 来自哪里?
  • 首先,我会通过检查$video 中的error 索引来确认PHP 认为文件已成功上传。如果 PHP 能够编写它,我希望它能够读取它。目前,听起来更像是在调用此函数之前文件已被移动。
  • $video = $_FILES['file'];
  • 是的,$video 中的错误索引为 0,这根本没有错误。我使用会话来存储文件,然后重定向到自身并将会话向下传递以进行上传。你认为这可能是它被移动的原因吗?
  • 不要使用临时名称,我不会尝试将$_FILE 放入$_SESSION。完全处理文件上传,然后将最终路径放入会话中。在您的ftp_put 中使用该最终路径。

标签: php upload ftp tmp


【解决方案1】:

感谢 Twisty 23 和 Jon Stirling 的建议,我已经解决了这个问题。不幸的是,没有人发布答案(所有 cmets),这让我无法解决这个问题,所以我只会回答自己。 这是我一开始用来重定向的代码

//store video information into session 
if(count($_POST) >0 ){           
    $_SESSION['vid_name'] = $_POST['vid_name'];
    $_SESSION['video'] = $_FILES['video'];

    //move tmp file to permanent location temp folder
    move_uploaded_file($_FILES['video']['tmp_name'], "./temp/" . $_POST['vid_name'] . ".tmp");

    //change tmp location to temp folder
    $_SESSION['video']['tmp_name'] = "./temp/" . $_POST['vid_name'] . ".tmp";

    //redirect
    header("Location: " . $_SERVER['REQUEST_URI']); 
    die();

}

然后我不需要更改 ftp_upload 函数的任何内容,我可以立即使用 $_SESSION['video']['tmp_name']。

【讨论】:

    猜你喜欢
    • 2015-09-25
    • 2013-01-24
    • 2018-12-01
    • 1970-01-01
    • 2016-07-05
    • 2013-02-04
    • 2018-08-30
    • 2018-03-26
    • 2022-10-16
    相关资源
    最近更新 更多