Symfony2的HttpFoundation/File/File.php在上传文档时找不到临时文件(在MAMP中)


Symfony2's HttpFoundation/File/File.php cannot find temporary file when uploading a document (in MAMP)

我在本地Mac上使用MAMP来测试Symfony2应用程序。 我正在尝试上传文档,但一直遇到系统 500 错误:"文件"/应用程序/MAMP/tmp/php/[...]"不存在。

这要么是我的 Symfony2 配置的问题,要么是 MAMP 配置的问题 - 我不确定是哪个。脚本本身成功上传文件:

$req = Request::createFromGlobals();                
$uploadedFile = $req->files->get($file);
$file = time().'_'.str_replace(' ','_',$uploadedFile->getClientOriginalName());     
if (!is_dir($this->uploads_dir))
{
    mkdir($this->uploads_dir);
}
if ($uploadedFile->move($this->uploads_dir, $file))
{
    $this->session->set('van.uploaded_file', $this->uploads_dir.$file);
}
else
{
   $this->error[] = 'upload.failed';
}

$this->uploads_dir 只是"/uploads/",实际上每次我运行脚本时(尽管有 500 个错误),我的文件都会加载到/uploads 目录中。

我不确定这是否重要,但上面的脚本是从服务类(而不是从控制器)运行的。

我已经检查了/Applications/MAMP/tmp/php/目录,那里没有临时上传文件。(但这可能是因为它们已被移动到我的/uploads 文件夹!

我已经将/Applications/MAMP/tmp/php/目录的权限设置为777,但仍然没有运气。

我注释掉了 php.ini 文件中的upload_tmp_dir,但这只会为计算机上的不同默认目录触发相同的错误:

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; upload_tmp_dir = /Applications/MAMP/tmp/php

以下是Symfony错误日志中的确切错误:

CRITICAL - Uncaught PHP Exception Symfony'Component'HttpFoundation'File'Exception
'FileNotFoundException: "The file "/Applications/MAMP/tmp/php/phpYew2rT" does not exist" at 
/Applications/MAMP/htdocs/tdp2013/Symfony/vendor/symfony/symfony/src/Symfony/Component
/HttpFoundation/File/File.php line 41

还有其他想法吗?

更新:

我修改了脚本,使用move_uploaded_file而不是Symfony的文件组件上传文档。 我收到了同样的错误 - 这意味着这是我的MAMP配置的问题,而不是Symfony。

public function upload($file_name)
{
    $this->session->remove('van.uploaded_file');
    if (!is_dir($this->uploads_dir))
    {
        mkdir($this->uploads_dir);
    }
    $file = $this->uploads_dir.time().'_'.str_replace(' ','_',$_FILES[$file_name]["name"]);
    move_uploaded_file($_FILES[$file_name]["tmp_name"], $file);
    if (file_exists($file))
    {
        $this->session->set('van.uploaded_file', $file);
    }
    else
    {
        $this->error[] = 'upload.failed';
    }
    return $this;
}

这是我的 php.ini 设置:

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
; Whether to allow HTTP file uploads.
file_uploads = On
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = /Applications/MAMP/tmp/php
; Maximum allowed size for uploaded files.
upload_max_filesize = 32M

文件的大小是多少?我过去有过类似的错误,这就是原因。

我不知道 mamp,但一般来说,PHP 默认有 2MB 的文件上传限制。为了增加它,您需要修改 php 中的 2 个设置.ini

post_max_size = 16MB
upload_max_filesize = 16MB

当然,你可以用任何值代替 16。如果您不能或不愿意修改 php.ini您可以更改 php 代码中的值,如此处所述