关于php脚本执行问题

建立一个info.php测试文件,测试某些php方法时,发现语法错误时什么也不提示,直接报页面500错误
在这里插入图片描述
设置了 ini_set(‘display_errors’,‘On’); error_reporting(E_ALL | E_STRICT); 之后,不起作用,没有错误提示。
直接在php.ini配置文件里修改这两个配置,结果显示了错误提示。

为什么动态配置不行呢,难道是动态设置没有起作用?在把php.ini恢复原样后,在info.php中删除了错误的语法,代码如下

<?php
	ini_set('display_errors','On');
	error_reporting(E_ALL | E_STRICT);
	phpinfo();

打印了phpinfo的信息
在这里插入图片描述
从打印内容看,说明动态配置已经生效了,但是为什么还是不能显示代码的语法错误呢?
因为忽略了php文件的执行机制
PHP是脚本语言,在执行代码时需要先进行一系列的编译处理,才能执行。在文件编译阶段,对代码语法进行了校验,但这个时候代码是不执行的,所以文件开头的动态配置是没有意义的。编译时判断语法错误,脚本直接停止了运行。直接调用了默认配置,不显示错误信息。这就是为什么在php.ini配置可以生效,动态配置无效的原因。

我们此时再新建一个文件error.php

<?php
	$a = 'dd'
	echo $a

修改info.php文件

<?php
	ini_set('display_errors','On');
	error_reporting(E_ALL | E_STRICT);

	include('./error.php');

我们执行info.php文件后,此时顺利的出现了错误信息。

因为此时info.php文件是没有语法错误的,该脚本开始顺利的执行,先执行了动态配置并且生效,然后执行引入error.php文件的操作。error.php文件被引入后,开始进行该文件的校验、编译操作,结果发现该文件语法错误错误,根据已生效的配置,抛出错误提示

在这里插入图片描述

总结:之前没有注意到这个问题,是因为在开发过程中,这些动态配置通常出现在入口文件或者配置文件中,很少会与错误代码处于同一个文件中,动态配置没有被错误代码影响。

猜你喜欢

转载自blog.csdn.net/u012830303/article/details/94570151