【PHP】Lnmp/lamp环境下常见问题处理

    前言:通常情况下我们会在wamp或者是wnmp环境下进行开发然后项目会放到l线上lamp或者lnmp的环境中运行,由于基础环境的差异可能导致同一套代码出现不同的运行结果,乱码甚至是报错,本篇文章对笔者所遇到的情况进行说明并给出相应的解决方案。

一、php

1、Parse error: syntax error, unexpected end of file in xxxxxxxx  on line xx

如果发现php的语法本身没有什么错误。就有可能是使用了短标签,例如:

这种问题的解决方案是:可以在php.ini中设置

设置后要重启nginx/apache服务器

关于short_open_tag :

决定是否允许使用代码开始标志的缩写形式(<? ?> )。如果要和 XML 结合使用 PHP,可以禁用此选项以便于嵌入使用<?xml ?> 。否则还可以通过php来输出,例如:<?php echo '<?xml version="1.0"'; ?> 。如果禁用了,必须使用 PHP 代码开始标志的完整形式(<?php ?> )。

注意:本指令也会影响到缩写形式 <?= ,它和 <? echo 等价。使用此缩写需要short_open_tag 的值为 On。

2、数据库的bit类型查询出来为□,无法识别,但是能插入或者修改.

方法一:查询时把字段转为十进制(如果使用bit类型的字段不多,可以使用此方法)

方法二:php安装mysqld扩展(数据库中bit类型的字段多的情况下可以使用此方法)

安装方法如下:

首先查看当前的PHP版本

可以看到我的php版本是php5.6.40

如果你的安装方式是:

那么你的扩展安装方式:

如果你是指定版本安装的话

那么你的扩展安装方式:

备注一下:在解决掉这个问题之前笔者也用了很多方法,调整数据库字符集,修改数据库配置文件,使mysql_connect链接字符集时UTF-8,这些都没用

二、MySQL

1、在本地时数据可以成功插入数据,但是上传到服务器就会报错;

举个栗子:

1)SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value 2) error: Incorrect integer value: '' for column 'cityarea_id' at row 1 3)data too long for column at row

类似于以上报错都可以通过修改数据库配置文件my.ini(若文件不存在,则修改my.cnf)来解决 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 修改为 sql_mode=NO_ENGINE_SUBSTITUTION

那么为什么要删掉STRICT_TRANS_TABLES

因为STRICT_TRANS_TABLES的意思是存储引擎启用严格模式,非法数据值被拒绝。

三、Apache

1、利用Nginx代理Apache做简易分布式的项目中,nginx做了ssl认证,php的系统变量$_SERVER中$_SERVER['HTTPS']为空

首先,这种情况是正常的,因为你的php服务是通过Apache去承载的,但Apache确实没有ssl证书,那么怎么解决呢?如下:

2、php项目中隐藏.php后缀访问

举个栗子:程序访问路径为demo.mrcg.com/test.php

想要设置为demo.mrcg.com/test直接可以访问

方法一:apache环境下在项目根目录创建.htaccess

重要的的是 ‘RewriteRule ^test$ test.php’ 

本行代码是利用apache的重写规则,意思是当访问test时会重写至当前目录下的test.php,当然也可以是其他目录:

此方法不是很方便,尤其是你要有多个文件隐藏后缀时,必须一个一个的写,所以我推荐下一种

方法二:利用apache的MultiViews参数

在你的apache项目配置中添加MultiViews参数,如下:

使用MultiViews参数后如果服务器接收了一个对/MyProjects/dir/foo的请求,/MyProjects目录启用了MultiViews,但/MyProjects/dir/foo不存在,则服务器会查找这个目录下所有的 foo.* 文件,并理所当然地为这些文件伪造一个类型映射表,分配给他们相同的媒体类型和内容的编码,用户请求一个文档时,类型映射表会选择其中最符合客户请求的文档,返回给客户。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值