【问题标题】:PHP not echoing after file upload completed文件上传完成后PHP没有回显
【发布时间】:2015-11-09 07:44:21
【问题描述】:

我有一些使用拖放区上传文件的简单代码。它上传文件很好,但由于某种原因,它没有在代码末尾回显“完成上传”。

我在这里遗漏了一些明显的东西吗?

<script type="text/javascript">
  Dropzone.options.myDropzone = {
    addRemoveLinks: true,
    removedfile: function(file) { 
      var _ref;
      return (_ref = file.previewElement) != null ? _ref.parentNode.removeChild(file.previewElement) : void 0;
    }
  };
</script>

<div id="dropzone">
    <form id="myDropzone" action="#" class="dropzone" id="demo-upload">
      <div class="dz-message">
        Drop files here or click to upload.<br />
      </div>
    </form>
</div>

<?php
$ds = DIRECTORY_SEPARATOR;  //1
$storeFolder = 'uploads';   //2

if (!empty($_FILES)) {
    $tempFile = $_FILES['file']['tmp_name'];          //3             
    $targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds;  //4
    $targetFile =  $targetPath. $_FILES['file']['name'];  //5

    move_uploaded_file($tempFile,$targetFile); //6
    echo "done uploading";
}
?>  

【问题讨论】:

  • 我已经删除了您询问“最佳实践”的问题的第二部分,因为这可能不适合这里(尝试 codereview),但主要是因为您一次应该只有一个问题范围(或者我们不能轻易回答或评论)
  • 你需要将move_uploaded_file包装成如下:if(move_uploaded_file(...)) { // done uploading } else { // failed moving }。此外,检查您的$targetPath 权限 - 他们可能需要为 777。如果这不起作用 - 看看您是否有足够的硬盘空间。
  • 是的,很抱歉它已被编辑,主要是想弄清楚为什么它最后没有回显
  • 谢谢让我试试
  • 好吧,我不明白为什么文件权限在回显 php 时会出现问题,因为它上传文件就好了。

标签: php


【解决方案1】:

由于 Dropzone 使用 AJAX 向服务器发布请求,因此当您回显某些内容时,您将看不到普通 PHP 响应的响应行。

这样试试

<script type="text/javascript">
    Dropzone.options.myDropzone = {
        ...
        success: function(file, response){
            alert(response); // Just to test, you can remove this
            // Do what you want
            // Like:
            if(response == "success") {
                // Uploaded ok
            } else {
                // Failed to upload
            }
        }
    };
</script>

通过这种方式,在 AJAX 请求成功后,您可以捕获响应并做任何您想做的事情。

Ofcoruse,就像@tftd 说的,你需要把move_uploaded_file 换成这样:

if(move_uploaded_file(...)) {
    // done uploading
    echo json_encode('success');
} else {
    // failed moving
    echo json_encode('error');
}

【讨论】:

  • 好的,所以我真的不需要删除链接的东西,所以我删除了它,然后放 Dropzone.options.myDropzone = { success: function(file, response){ alert(response); } };它提醒了我的整个 html 代码而不是 if 语句中的 echo,所以我想现在接近解决方案了吗?
  • alert(response) 仅用于测试。您可以删除 alert(response) 并根据需要处理 response。
  • 好的,谢谢,一个快速的问题,而不是整个页面的响应,我怎样才能只得到我正在呼应的价值?因为我喜欢获取该值并将其作为 GET 参数传递给成功时的重定向
  • StackOverflow 不是聊天,您应该打开另一个问题,以便我们回答,但首先尝试搜索是否有人已经问过并得到答案。
【解决方案2】:

试试这个:

if(move_uploaded_file($tempFile,$targetFile)) {
    echo "done uploading";
} else {
    echo 'error!';
}

您可以激活error_reporting 以查看来自move_uploaded_file 的错误

编辑:丑陋的黑客,只是为了测试。不要在生产中使用它!!!

if(move_uploaded_file($tempFile,$targetFile)) {
    $_SESSION["success"] = "upload done";
    echo $_SESSION["success];
} else {
    echo 'error!';
}

【讨论】:

  • 我将 if 切换到这个,它上传了文件但没有回显任何内容
  • 看看我的另一个帖子。 stackoverflow.com/questions/31045233/…可能会有所帮助
  • 感谢您的回复,但如果我只有带有 php 的常规 html 表单,它工作得很好,但是这个放置区的事情现在给我带来了麻烦。
  • 检查您的控制台是否有重定向?
  • 会话没有回显 :( 是的,我关闭了回显行中的引用。
猜你喜欢
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多