【问题标题】:php foreach issue in multiple file upload多个文件上传中的php foreach问题
【发布时间】:2015-09-07 00:22:01
【问题描述】:

我正在尝试使用 foreach 循环从包含多个文件的文件上传中保存文件。但是 move_uploaded_file 只执行一次。我尝试打印 $file['tmp_name'],但它在一行中打印两个数组值作为文本。如何解决这个问题..谢谢..

  public function uploadFile($filename)
    {

        $file_ary = $this->reArrayFiles($_FILES[$filename]);

        foreach ($file_ary as $file) {

           move_uploaded_file($file['tmp_name'] , '../uploads/' . '.txt');

        }




    }


   function reArrayFiles(&$file_post) {
        $file_ary = array();
        if(!is_array($file_post['name']))
            return array($file_post);
        $file_count = count($file_post['name']);
        $file_keys = array_keys($file_post);
        for ($i=0; $i<$file_count; $i++) {
            foreach ($file_keys as $key) {
                $file_ary[$i][$key] = $file_post[$key][$i];
            }
        }
        return $file_ary;
    }


 $file_ary :- Array ( [0] => Array ( [name] => customer care.txt [type] =>     text/plain [tmp_name] => C:\Program Files (x86)\EasyPHP-DevServer- 14.1VC11\binaries\tmp\php7B21.tmp [error] => 0 [size] => 11 ) [1] => Array ( [name] => ss.txt [type] => text/plain [tmp_name] => C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\binaries\tmp\php7B32.tmp [error] => 0 [size] => 0 ) [2] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) )

$file['tmp_name']  : C:\Program Files (x86)\EasyPHP-DevServer-     14.1VC11\binaries\tmp\phpA38A.tmpC:\Program Files (x86)\EasyPHP-DevServer- 14.1VC11\binaries\tmp\phpA38B.tmp

【问题讨论】:

  • 在此处粘贴您的$file_ary
  • C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\binaries\tmp\phpA38A.tmpC:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\binaries\tmp\ phpA38B.tmp ...从字面上看,我期待一个数组,但它显示的是没有分隔符的纯文本..
  • 看起来像字符串。这是array吗?
  • 考虑执行以下操作以对其进行调试:1) echo $file['error']; 以检查上传期间是否发生错误。 2) $res = move_uplo..; var_dump($res) 检查上传过程中是否出错。与我们分享他们的输出。
  • 查看我更新的帖子 :) 我在评论中发布的是我从 foreach 内部得到的输出 .. 我正在使用 foreach 将多个文件保存到目标文件夹 .. 谢谢

标签: php upload


【解决方案1】:

此函数检查以确保由 filename 指定的文件是 一个有效的上传文件(意味着它是通过 PHP 的 HTTP POST 上传的 上传机制)。如果文件有效,它将被移动到 目的地给定的文件名。

取自docs

基本上,在您移动它之后,该文件将不再存在。请注意,该移动与复制的不同之处在于它删除了源文件。您需要创建一个文件资源,将所需的内容复制到那里,然后随时随地保存。

【讨论】:

  • 我在保存的目录中只能看到一个文件。我期待不止一个文件。 move_uploaded 函数只执行一次.. 谢谢
  • 好吧,我这么说吧:你要保存file1和file2。当您为 file1 调用 move_uploaded_file 时,file1 已成功创建,但源文件已被删除。当您为 file2 调用它时,源文件不再存在,因此您不能再移动它。这就是为什么我建议你应该创建一个图像资源并保存它而不是你当前的(错误的)策略。
猜你喜欢
  • 2013-03-26
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 2012-05-13
  • 2017-09-29
  • 1970-01-01
相关资源
最近更新 更多