PHP 文件上传到 NGINX & PHP5-FPM

Posted

技术标签:

【中文标题】PHP 文件上传到 NGINX & PHP5-FPM【英文标题】:PHP File upload to NGINX & PHP5-FPM 【发布时间】:2014-08-17 14:34:40 【问题描述】:

我正在将文件上传到我的服务器并获取以下日志,经过大量谷歌搜索后我找不到答案,任何人都可以帮助或建议从哪里开始吗?

2014/06/26 17:15:01 [错误] 15035#0: *2491 FastCGI 在标准错误中发送: “php 消息:高度:375 - 宽度:600”,同时读取响应标头 从上游,客户端:,服务器:url,请求:“POST /user/updateProfile HTTP/1.1”,上游:“fastcgi://127.0.0.1:9000”, 主机:“url”,引用者:“url/user/edit/7”

出于安全考虑,我已经隐藏了网址。

谢谢!

编辑 *

上传的PHP代码

if(empty($_FILES['user_cover_image_url']['name'])) 
         else 
            //Cover Elements
            $coverName = $_FILES['user_cover_image_url']['name'];
            $coverExtension=end(explode(".", $coverName));
            if($coverExtension=='png') $coverExtension = 'jpg';
            $cName = $uid.'-'.$pass->generateRandomString($length=25);
            $coverImage = $cName.'.'.$coverExtension;
            $cSource = $_FILES['user_cover_image_url']['tmp_name'];
            $cDestination = '/var/www/html/tmp/cover-'.uniqid().'.'.$coverExtension;
            $pass->imageresize($cSource, $cDestination, $width=600, $height=600, $crop=false, $quality=72);
            if ($s3->putObjectFile($cSource, "proaudiosocialstream", $coverImage, S3::ACL_PUBLIC_READ)) $s3Cover ='http://bucket.s3.amazonaws.com/'.$coverImage;elsereturn false;
            $data['user_cover_image_url'] = $coverImage;
        

        if(empty($_FILES['user_avatar_url']['name'])) 
         else 
            //Avatar Elements
            $avatarName = $_FILES['user_avatar_url']['name'];
            $avatarExtension=end(explode(".", $avatarName));
            if($avatarExtension=='png') $avatarExtension = 'jpg';
            $aName = $uid.'-'.$pass->generateRandomString($length=25);
            $avatarImage = $aName.'.'.$avatarExtension;
            $aSource = file_get_contents($_FILES['user_avatar_url']['tmp_name']);
            $aDestination = '/var/www/html/tmp/avatar-'.uniqid().'.'.$avatarExtension;
            $pass->imageresize($aSource, $aDestination, $width=400, $height=400, $crop=false, $quality=72);
            if ($s3->putObjectFile($aDestination, "proaudiosocialstream", $avatarImage, S3::ACL_PUBLIC_READ)) $s3Avatar ='http://bucket.s3.amazonaws.com/'.$avatarImage;elsereturn false;
            $data['user_avatar_url'] = $avatarImage;
        

【问题讨论】:

能把上传相关的PHP代码贴出来吗? @Saiqi 按要求添加 我看不出为什么在此处标记 codeigniter 的原因很抱歉,如果我错了,但如果您使用 CI,您可以使用 file uploading library ellislab.com/codeigniter/user-guide/libraries/… 它被标记是因为这是我用来构建这个应用程序的框架,但是我选择不使用这个库,因为我需要在文件上传之前对它做一些其他的事情。不过感谢您的评论。 @JustinErswell 它不是 php 或上传问题,它的 nginx 和 php-fpm 配置问题。@我遇到了同样的问题。请尝试我的答案,它会起作用的。 【参考方案1】:

我认为你没有用 nginx 配置 php-fpm

对于 php-fpm,nginx 虚拟主机文件应该是这样的

server 
    listen   80;
    server_name www.trakleaf.in trakleaf.in;
    access_log access_file_path compression;
    error_log error_file_path;
     root   root_directory;
     index  index.html index.htm index.php;
     location /   
             try_files $uri $uri/ /index.php;
     
    location ~ \.php$ 
        include /etc/nginx/fastcgi_params;
        if ($uri !~ "^/images/") 
            fastcgi_pass unix:/var/run/php5-fpm.sock;
        
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME root_directory$fastcgi_script_name;
     


【讨论】:

与问题完全无关。问题清楚地表明请求是传递给php的,不需要(重新)配置它。 (另外,提供的配置很糟糕。你不应该使用 if($uri) 检查,应该使用位置。) @MaximDounin 我遇到了同样的问题,我已经通过这个配置解决了这个问题。 你没有。或者,更确切地说,没有问题 - 有问题的消息看起来像是来自 php 的一些调试日志,请参阅我上面的评论。

以上是关于PHP 文件上传到 NGINX & PHP5-FPM的主要内容,如果未能解决你的问题,请参考以下文章

PHP上传文件到阿里云OSS,nginx代理访问

中间件安全Tomcat&Nginx解析&爆破&CVE漏洞

小迪安全 Web安全 基础入门 – 第十三天 – PHP开发 – 个人博客项目&文件操作类&编辑器&上传下载删除读写

php+nginx 限制上传文件大小

[转]通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题

如何解决nginx上传大文件的限制