php eval 语法错误,PHP eval和捕获错误(尽可能多)

我找到了一个很好的替代方案/答案 .

首先,让我首先说当我设置error_reporting(E_ALL)时,nikic的建议有效;通知显示在PHP输出中,并且由于OB,它们可以被捕获 .

接下来,我发现了这个非常有用的代码:

/**

* Check the syntax of some PHP code.

* @param string $code PHP code to check.

* @return boolean|array If false, then check was successful, otherwise an array(message,line) of errors is returned.

*/

function php_syntax_error($code){

if(!defined("CR"))

define("CR","\r");

if(!defined("LF"))

define("LF","\n") ;

if(!defined("CRLF"))

define("CRLF","\r\n") ;

$braces=0;

$inString=0;

foreach (token_get_all('<?php ' . $code) as $token) {

if (is_array($token)) {

switch ($token[0]) {

case T_CURLY_OPEN:

case T_DOLLAR_OPEN_CURLY_BRACES:

case T_START_HEREDOC: ++$inString; break;

case T_END_HEREDOC: --$inString; break;

}

} else if ($inString & 1) {

switch ($token) {

case '`': case '\'':

case '"': --$inString; break;

}

} else {

switch ($token) {

case '`': case '\'':

case '"': ++$inString; break;

case '{': ++$braces; break;

case '}':

if ($inString) {

--$inString;

} else {

--$braces;

if ($braces < 0) break 2;

}

break;

}

}

}

$inString = @ini_set('log_errors', false);

$token = @ini_set('display_errors', true);

ob_start();

$code = substr($code, strlen('<?php '));

$braces || $code = "if(0){{$code}\n}";

if (eval($code) === false) {

if ($braces) {

$braces = PHP_INT_MAX;

} else {

false !== strpos($code,CR) && $code = strtr(str_replace(CRLF,LF,$code),CR,LF);

$braces = substr_count($code,LF);

}

$code = ob_get_clean();

$code = strip_tags($code);

if (preg_match("'syntax error, (.+) in .+ on line (\d+)$'s", $code, $code)) {

$code[2] = (int) $code[2];

$code = $code[2] <= $braces

? array($code[1], $code[2])

: array('unexpected $end' . substr($code[1], 14), $braces);

} else $code = array('syntax error', 0);

} else {

ob_end_clean();

$code = false;

}

@ini_set('display_errors', $token);

@ini_set('log_errors', $inString);

return $code;

}

似乎很容易就能完成我所需要的(耶!)!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防止表单重复提交的解决方案整理

用户在操作表单Post数据时往往会出现表单数据重复提交的问题&#xff0c;尤其在Web开发中此类问题比较常见。刷新页面&#xff0c;后退操作以前的页面&#xff0c;单机多次按钮都会导致数据重复提交。此类问题是因为浏览器重复提交HTTP请求导致。下面列出了四种比较常用的解决方…

免费字典api ,查询汉字完整信息

最大最全的新华汉语词典&#xff0c;字典api根据接口列表返回的汉字id&#xff0c;查询汉字完整信息。 接口名称&#xff1a;字典api 接口平台&#xff1a;第三方api 接口地址&#xff1a;http://v.juhe.cn/xhzd/queryid 支持格式&#xff1a;json/xml 请求方式&#xff1a;htt…

python正则去除换行符,关于python:用于删除换行符的正则表达式

我是Python的新手&#xff0c;我遇到了正则表达式问题。 我正在尝试删除文本文件中每行末尾的换行符&#xff0c;但前提是它跟在小写字母后面&#xff0c;即[a-z]。 如果该行的结尾以小写字母结尾&#xff0c;我想用空格替换换行符/换行符。这是我到目前为止所得到的&#xff1…

收集一些程序员励志经典名言

1、作为一个真正的程序员&#xff0c;首先应该尊重编程&#xff0c;热爱你所写下的程序&#xff0c;他是你的伙伴&#xff0c;而不是工具。2、程序员可以让步&#xff0c;却不可以退缩&#xff0c;可以羞涩&#xff0c;却不可以软弱&#xff0c;总之&#xff0c;程序员必须是勇…

Android develop 国际化

转自别人的一片文章&#xff0c;出处以找不到了&#xff0c;觉得写得不错&#xff0c;记录一下 一、概念 1.Internationalization(I18N) 国际化 使得App在不改的源码、资源文件的情况下&#xff0c;能够适应各国、各文化、各语言 是L10N的基础 2.Localization(L10N) 本地化 为A…

php留言板记录ip,如何用php程序记录来访IP

如何用php程序记录来访IP关注:226 答案:4 手机版解决时间 2021-02-16 00:05提问者失夜久伴你2021-02-15 01:22如何用php程序获取来访IP&#xff0c;然后保存在txt文件中,并且只保留最新的30个数据.最佳答案二级知识专家追尋☆①秒方向2021-02-15 02:19有一个全局的变量&#…

【基础】jquery全选、反选、全不选代码

1、JS代码function ($) {//全选 反选 全不选$("#selAll").click(function () {$(".lists :checkbox").not(:disabled).prop("checked", true);});$("#unSelAll").click(function () {$(".lists :checkbox").not(:disabled).…

oracle 11g重新安装配置,Oracle 11g数据库安装和卸载教程

Oracle11g的安装教程同时解压缩两个zip文件&#xff0c;生成一个database文件夹&#xff0c;进入到database文件夹&#xff0c;点击setup去掉安全更新的选项&#xff0c;直接下一步选择创建和配置数据库&#xff0c;点击下一步选择服务器类&#xff0c;点击下一步选择单例数据库…

C语言中strdup函数使用方法

头文件&#xff1a;#include <string.h> 定义函数&#xff1a;char * strdup(const char *s); 函数说明&#xff1a;strdup()会先用malloc()配置与参数s 字符串相同的空间大小&#xff0c;然后将参数s 字符串的内容复制到该内存地址&#xff0c;然后把该地址返回。该地址…

高级程序员和低级程序员的区别

低级程序员认为自己与高级程序员的区别, 主要是高级程序员任何功能都能编码实现, 编码速度快, 代码无 bug. 正如一惯的那样, 低级程序员之所以低级, 正是因为他们勉强能看到(或者根本看不到)事物的表象而看不到本质. 所以, 低级程序员总结出的一切东西, 你都可以大胆的忽略。所…

oracle中的tx锁影响查询吗,如何找到TM锁对应的TX锁?

我昨天也这样试过&#xff0c;但出来的结果和预料相差很远。wyqORCL>update emp set ename ename;12 rows updated.wyqORCL>get lockline 16 truncated.1 /* showalllock.sql */2 column username format a63 column object_name format a134 column o_name format …

IISExpress Log 文件路径

问题 用VS做开发时经常用IISExpress测试web程序&#xff0c;那么在测试过程中生成的Log文件放在哪里了&#xff1f; 答案 情况1 默认情况下 applicationhost.config 文中定义了连个日志文件路径&#xff1a;IIS_USER_HOME&#xff08;即%userprofile%\documents\IISExpress\&am…

程序员职业路线图

今天分享一张程序员职业路线图&#xff1a;欢迎关注我的公众号&#xff08;同步更新文章&#xff09;&#xff1a;DoNet技术分享平台阅读原文

jqgrid编辑php,php – 实现jqgrid单元格编辑datepicker

我知道使用datepicker进行单元格编辑是可能的,因为引用了here和here.但是,当我单击单元格时,没有出现日期选择器.下面是相关列的colModel条目.我有datepicker UI可用.在其他示例中,dataInit不包含引号.它在我的代码中,因为整个colModel是在AJAX请求期间由PHP动态创建的.我将它构…

C#编程规范整理

小编整理了一些C#编程的一些规范&#xff0c;希望对大家有点用处&#xff01;1、命名方式Pascal命名法&#xff1a;每个单词首字母均大写。Camel命名法&#xff1a;第一个单词首字母小写&#xff0c;其余单词首字母大写。2、有关类的规范1、使用 Pascal 大小写。2、用名词或名词…

利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值...

实验说明 &#xff08;1&#xff09;正向传值&#xff1a;比如A类里地值要传给B类用&#xff0c;就是我们先在A类中声明一个B类对象&#xff08;当然B类头文件要import过来&#xff09;&#xff0c;然后把A类中得某个 值传递给B类中得某个值&#xff08;所以需要在B类中先准备一…

oracle索引自增函数,oracle生成动态前缀且自增号码的函数分享

create or replaceFunction GetInvitationNO(prev varchar2, num1 varchar2, num2 varchar2, sessionSetting varchar2)Return Varchar2Authid Current_User Is PRAGMA AUTONOMOUS_TRANSACTION;-- 需要使用“Current_User”的权限防止无法运行“Execute Immediate”命令 & …

JS字符串转换为JSON的四种方法笔记

1、jQuery插件支持的转换方式&#xff1a;示例&#xff1a;$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象2、浏览器支持的转换方式(Firefox&#xff0c;chrome&#xff0c;opera&#xff0c;safari&#xff0c;ie)等浏览器&#xff1a;…

iOS Block全面分析

http://my.oschina.net/leejan97/blog/268536 http://blog.csdn.net/enuola/article/details/8674063 注意事项1.内联的block中内部定义的变量 自己本身有读写权限2.block内部要修改外部变量 需要将外部变量声明__block3.Block retain是无效的&#xff0c;要想保留block生命周期…

win7 php redis 扩展,Windows中安装Redis及php redis扩展

Windows10环境安装Redis:1、下载Redis安装包&#xff1b;2、解压到自定义目录&#xff1b;3、windows键R&#xff0c;输入cmd 进入命令行&#xff0c;进入Redis的解压目录&#xff1b;4、运行&#xff1a;redis-server.exe redis.windows.conf 显示如下&#xff0c;说明启动成功…