php关闭warning问题的解决方法_php技巧_脚本之家

by admin on 2019年11月26日

error_reporting 设定错误讯息回报的等级

在此记录一下,以后不能在同一个地方摔倒了!
数据库为bbs,表为test.三个字段,分别为id,name,sex。id为auto_increment。
连接数据库的php文件conn.php内容为 复制代码 代码如下: $conn = @
mysql_connect(“localhost”, “root”, “”) or die; mysql_select_db;
mysql_query; //使用GBK中文编码; 表单页:add2.php。内容为: 复制代码 代码如下:
之前的错误在哪?$_POST[‘submit’] $_POST[name] 记得要大写啊~~~
语法就是这样的吗?奇怪啊。还是先记住吧。以后会明白的。
需要注意的:1.$_POST[]一定要大写。无论在哪。
2.提交的按钮一定要写上name和value.name=”submit” value = “”
3.action要提交到php文件 4.解决页面中文乱码问题:在head里写删除,加上

1) 使用 标签设置页面编码
这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx 可以为
GB2312、GBK、UTF-8(和 MySQL 不同,MySQL 是
UTF8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会发现有了这句还是不行,不管
xxx 是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。
请注意, 是属于 HTML 信息的,仅仅是一个声明,仅表明服务器已经把 HTML
信息传到了浏览器。 2) header(“content-type:text/html; charset=xxx”);
这个函数 header() 的作用是把括号里面的信息发到 http
标头。如果括号里面的内容为文中所说那样,那作用和
标签基本相同,大家对照第一个看发现字符都差不多的。但是不同的是如果有这段函数,浏览器就会永远采用你所要求的
xxx
编码,绝对不会不听话,因此这个函数是很有用的。为什么会这样呢?那就得说说
http 标头和 HTML信息的差别了: http 标头是服务器以 http 协议传送 HTML
信息到浏览器前所送出的字串。而 标签是属于 HTML 信息的,所以 header()
发送的内容先到达浏览器,通俗点就是 header。假如一个 php
页面既有header(“content-type:text/html;charset=xxx”),又有,浏览器就只认前者
http 标头而不认 meta 了。当然这个函数只能在 php 页面内使用。
同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的Apache
的原因了。 3) AddDefaultCharset Apache 根目录的 conf
文件夹里,有整个 Apache 的配置文档 httpd.conf。 用文本编辑器打开
httpd.conf,第 708 行有 AddDefaultCharset
xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件 http
标头里的字符集为你默认的 xxx字符集。有这行,就相当于给每个文件都加了一行
header(“content-type:text/html; charset=xxx”)。这下就明白为什么明明
设置了是 utf-8,可浏览器始终采用 gb2312 的原因。 如果网页里有
header(“content-type:text/html;
charset=xxx”),就把默认的字符集改为你设置的字符集,所以这个函数永远有用。如果把
AddDefaultCharset xxx 前面加个”#”,注释掉这句,而且页面里不含
header,那这个时候就轮到 meta 标签起作用了。 下面列出以上的优先顺序: ..
header(“content-type:text/html; charset=xxx”) .. AddDefaultCharset xxx
.. 如果你是 web
程序员,建议给你的每个页面都加个header(“content-type:text/html;charset=xxx”),这样就可以保证它在任何服务器都能正确显示,可移植性也比较强。
4) php.ini 中的 default_charset 配置: php.ini 中的
default_charset = “gb2312” 定义了 php
的默认语言字符集。一般推荐注释掉此行,让浏览器根据网页头中的 charset
来自动选择语言而非做一个强制性的规定,这样就可以在同台服务器上提供多种语言的网页服务。
PHP截取汉字乱码问题解决方法mb_substr函数的应用mysql
中文乱码解决方法集锦

打开php的安全模式

整理出来2个给大家学习学习 1、三个等号和二个等号的区别 “===” VS “==”
比如你一个函数会返回这几种情况: 1、大于0的数 2、小于0的数 3、等于0的数
这时候如果你想捕获失败的情况,你就必须用===,而不能用==
因为==除了会匹配第4种情况外,还会匹配第3种情况,因为0也是假! 在来一个
$a=’2′;//字符型2 $b=2;//数值型2 $a==$b,是对的,都是2
$a===$b,是不对的,因为$a是字符型$b是数值型,值虽一样,但类型不一样。
2、php中三个尖括号是做什么的 “<<复制代码 代码如下: $somevar = <<

2047我记得应该是E_ALL。

php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如system(),同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd,但是默认的php.ini是没有打开安全模式的,我们把它打开:

php.ini 文件中有许多配置设置。您应当已经设置好自己的php.ini
文件并把它放在合适的目录中,就像在 Linux 上安装PHP 和 Apache 2
的文档说明中所示的那样。在调试PHP
应用程序时,应当知道两个配置变量。下面是这两个变量及其默认值:

safe_mode = on

display_errors = Offerror_reporting = E_ALL

用户组安全

E_ALL能从不良编码实践到无害提示到出错的所有信息。E_ALL
对于开发过程来说有点太细,因为它在屏幕上为一些小事也显示提示,会搞糟浏览器的输出

当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同组的用户也能够对文件进行访问。

所以不建议使用2047,最好把默认值改为:error_reporting = E_ALL &
~E_NOTICE

safe_mode_gid = off

PHP.ini中display_errors = Off失效的解决

如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要对文件进行操作的时候。

问题:

安全模式下执行程序主目录

PHP设置文件php.ini中明明已经设置display_errors =
Off,但是在运行过程中,网页上还是会出现错误信息。

如果安全模式打开了,但是却是要执行某些程序的时候,可以指定要执行程序的主目录:

解决:

safe_mode_exec_dir = D:/usr/bin

经查log_errors=
On,据官方的说法,当这个log_errors设置为On,那么必须指定error_log文件,如果没指定或者指定的文件没有权限写入,那么照样会输出到正常的输出渠道,那么也就使得display_errors
这个指定的Off失效,错误信息还是打印了出来。于是将log_errors =
Off,问题就解决了。

一般情况下是不需要执行什么程序的,所以推荐不要执行系统程序目录,可以指向一个目录,然后把需要执行的程序拷贝过去,比如:

经常见到error_reporting直意为:设定错误讯息回报的等级。

safe_mode_exec_dir = D:/tmp/cmd

value constant 1 E_ERROR 2 E_WARNING 4 E_PARSE 8 E_NOTICE 16
E_CORE_ERROR 32 E_CORE_WARNING 64 E_COMPILE_ERROR 128
E_COMPILE_WARNING 256 E_USER_ERROR 512 E_USER_WARNING 1024
E_USER_NOTICE 2047 E_ALL 2048 E_STRICT 然而7=1+2+4

但是,我更推荐不要执行任何程序,那么就可以指向我们网页目录:

就是出错时显示1 E_ERROR 2 E_WARNING 4 E_PARSE

safe_mode_exec_dir = D:/usr/www

以上这篇php关闭warning问题的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

安全模式下包含文件

如果要在安全模式下包含某些公共文件,那么就修改一下选项:

safe_mode_include_dir = D:/usr/www/include/

其实一般php脚本中包含文件都是在程序自己已经写好了,这个可以根据具体需要设置。

控制php脚本能访问的目录

使用open_basedir选项能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问不应该访问的文件,一定程度上限制了phpshell的危害,我们一般可以设置为只能访问网站目录:

open_basedir = D:/usr/www

关闭危险函数

如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的phpinfo()等函数,那么我们就可以禁止它们:

disable_functions = system,passthru,exec,shell_exec,popen,phpinfo

如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作

disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir, rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown

以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,就能够抵制大部分的phpshell了。

关闭PHP版本信息在http头中的泄漏

我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中:

expose_php = Off

比如黑客在 telnet www.greatmo.com 80 的时候,那么将无法看到PHP的信息。

关闭注册全局变量

在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭:

register_globals = Off

当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取GET提交的变量var,那么就要用$_GET[‘var’]来进行获取,这个php程序员要注意。

打开magic_quotes_gpc来防止SQL注入

SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini中有一个设置:

magic_quotes_gpc = Off

这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把
‘ 转为 \’等,这对防止sql注射有重大作用。所以我们推荐设置为:

magic_quotes_gpc = On

错误信息控制

一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示:

display_errors = Off

如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息:

error_reporting = E_WARNING & E_ERROR

当然,我还是建议关闭错误提示。

以上就是php如何解决安全问题的详细内容,感谢大家的学习和对脚本之家的支持。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图