生产环境nginx代码报错500

2015年11月23日晚搭建完BRS系统(上传图片系统)后,测试机器功能发现无法图片无法上传到服务器上,查看nginx日志后发现日志nginx状态码返回500(内部服务器错误),

1、开始认为是nginx权限导致,把upload目录改为777,但是依然无效,后思考下如果是权限问题不应该返回500,而是403之类的状态码,后开始进行下一步排查;

2、后利用google的调试功能进行排查,后发现貌似数据库报错,插入不了数据,有的字段未显示但还不能为空,所以插入不进去数字,原因在于数据库配置问题,后把mysql配置文件中的严格模式改为非严格模式解决次问题;

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER

修改为:

sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER

3、数据库改完后发现上传原图可以了 ,但是生成规格图又无法上传了,还是报错500,请教php工程师后发现有个生成规格图的包在编译的php中exif.so未发现,然后安装exif.so扩展包后在测试成功解决问题!

先来了解什么是图片的Exif信息

Exif是一种图象文件格式,它的数据存储与JPEG格式是完全相同的。实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及全球定位系统(GPS)、缩略图等。简单地说,Exif=JPEG+拍摄参数。因此,你可以利用任何可以查看JPEG文件的看图软件浏览Exif格式的照片,但并不是所有的图形程序都能处理Exif信息。

开启PHP模块

默认情况下,PHP读取图片Exif信息模块是不开启的,我们需要先开启这个模块。

开启Exif模块需要mbstring支持,所以先来安装mbstring,以下是以Linux环境为例,其它环境类似。

安装mbstring模块

首先找到php源码包位置,直接进入ext/mbstring,执行以下命令安装,具体参数得看自己的环境。

代码如下:

[[email protected] ext]# cd /data0/software/php/ext/mbstring
[[email protected] mbstring]# /usr/local/webserver/php/bin/phpize 
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
[[email protected] exif]# ./configure --with-php-config=/usr/local/webserver/php/bin/php-config
[[email protected] mbstring]# make && make install
Installing shared extensions:     /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/
Installing header files:          /usr/local/webserver/php/include/php/
[[email protected] mbstring]#

安装好以后,我们可以进入extensions目录看看模块是否存在,存在表示安装成功。

时间: 2024-08-05 19:50:17

生产环境nginx代码报错500的相关文章

nginx的报错500

500:服务器内部错误,也就是服务器遇到意外情况,而无法履行请求. 500错误一般有几种情况: 1. web脚本错误,如php语法错误,lua语法错误等. 2. 访问量大的时候,由于系统资源限制,而不能打开过多的文件 一般分析思路: (1)查看nginx error log ,查看php error log (2)如果是too many open files,修改nginx的worker_rlimit_nofile参数,使用ulimit查看系统打开文件限制,修改/etc/security/lim

IIS7部署报错 500.22错误 检查到这集成托管模式下不使用的ASP.NET配置

2014-08-08 公司的一个项目,环境为: .Net 4.0 + MVC3,部署在Windows Server 2003R2 IIS6.0上面运行正常, 迁移到新服务器Windows Server 2008R2,部署在 IIS7.0上, 应用程序池中,托管管道模式中选中了“集成”模式,如下图: 其他配置如下: 配置完成后,访问出错报错, 最后检查出了原因:该项目中的web.config配置文件不适合IIS7.0. 于是将应用程序池的管道模式选择为“经典”模式 再次访问一切正常. 问题的根本原

Hadoop2.2简单上传文件,web环境下启动报错,求大神

String home = "hdfs://192.168.0.212:8020/";String src = "/root/桌面/111.jpg";String dst = "/6.jpg";InputStream in = new BufferedInputStream(new FileInputStream(src));Configuration conf = new Configuration();FileSystem fs = File

dede在使用session共享会话后,dede后台无法访问,报错500

dede在使用session共享会话后,dede后台无法访问,报错500: 解决方法: 修改文件一: vim /application/nginx/html/www/include/common.inc.php 137 //$sessSavePath = DEDEDATA."/sessions_{$enkey}"; 138 $sessSavePath = "tcp://172.16.1.7:11211";            --172.16.1.7 ,memca

[Linux]lnmp一键安装包,访问yii/tp5/laravel的时候,报错500或者空白页面

当你将默认的访问路径改后(nginx.conf中的root 之后的路径),同时应该将/home/wwwroot/default/.user.ini 中的路径也改了! .user.ini 是隐藏文件,需要 ls -a  查看; 第一步:你先确定你的pathinfo路由开启了,配置如下: lnmp v1.1上,修改对应虚拟主机的配置文件(/usr/local/nginx/conf/vhost/域名.conf) 去掉#include pathinfo.conf前面的#,把try_files $uri

Nginx启动报错:

Nginx启动报错:10013: An attempt was made to access a socket in a way forbidden 2014-08-07 14:39:10   来源:   评论:0 点击: Nginx在win7,win2008下启动报错:bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permis

Solidworks api帮助代码报错 “特性说明符不是一个完整的语句。请使用行继续符将该特性应用于下列语句。“的解决办法!

相信大家经常会把solidworks api帮助中的代码直接贴出来直接使用,今天遇到段代码就无法使用.现分享一下经验: <ComVisibleAttribute(True)> _ Public Class clsPropMgr 上面的代码就会报错:"特性说明符不是一个完整的语句.请使用行继续符将该特性应用于下列语句." 怎么解决呢?其实很简单! 解决方法1: 两行合成一行 <ComVisibleAttribute(True)> Public Class clsP

Nginx启动报错:10013: An attempt was made to access a socket in a way forbidden

Nginx在win7,win2008下启动报错:bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions) . 原因是Win7下nginx默认80端口被System占用,造成nginx启动报错的解决方案. 在cmd窗口运行如下命令: [plain] C:\Users\Administrator>netstat -ao

运行python代码报错UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode byte 0xe7 in position 91: ordinal not in range(128)的解决办法

1.通过搜集网上的资料,自己多次尝试,问题算是解决了,在代码中加上如下几句即可: import sys reload(sys) sys.setdefaultencoding('utf-8') 2.原因就是Python的str默认是ascii编码,和unicode编码冲突,混淆了python2 里边的 str 和 unicode 数据类型. 3.python3 区分了 unicode str 和 byte arrary,并且默认编码不再是 ascii. 运行python代码报错UnicodeDec