我在本地mac上使用MAMP来测试Symfony2应用程序。我试图上传文件,但一直遇到系统500错误:'文件" / Applications / 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的File组件上传文档。我收到了同样的错误 - 这意味着我的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
答案 0 :(得分:4)
文件大小是多少?我过去曾遇到类似的错误,这就是原因。
我不知道mamp,但PHP通常默认情况下有2MB的文件上传限制。 为了增加它,你需要修改php.ini
中的2个设置post_max_size = 16MB
upload_max_filesize = 16MB
当然你可以用任何价值而不是16。 如果您不能或不愿修改php.ini,您可以按照here
中的说明更改php代码中的值。