php camelize,如何使Symfony Project 1.4.20与PHP 5.5或5.6完全兼容(不推荐使用:preg_replace()警告)...
本文概述
有时, 由于代码量大和更新成本高, 许多Web项目仍在旧PHP平台上运行(而不是旧版本5.3), 而旧框架为Symfony 1.x.就其本身而言, 代码没有什么错, 因为它可以很好地工作, 但是很难找到它的文档。除了时间, 人们还发现了框架上的安全漏洞, 并且可以加以利用, 这就是为什么总是建议继续使用较新版本的框架的原因。使用Symfony并不容易, 因为工作流程发生了显着变化, 这意味着所有源代码都需要更改。
如果你不愿意重写Symfony 1.4.20中制作的大型应用程序, 则仍可以在较新版本的PHP中运行它, 这样反过来, 它也比较旧版本更安全。唯一的问题是, 由于preg_replace使用不安全, 你将在项目上不断看到不推荐使用的警告。
是什么原因导致该问题?
由于正则表达式的/ e修饰符, 因此在项目中触发了该问题。 preg_replace中的/ e修饰符已在PHP 5.5上弃用, 因为它可用于执行任意代码执行, 如POSIX模式修饰符文档中所述。因此, 问题在于, Symfony 1.4.20的许多源文件中都使用了这种模式, 以简单地”驼峰”一些字符串, 这就是为什么你在项目上以图形方式看到警告的原因。
除非你已在index.php中启用调试(仅出现在frontend_dev.php上), 否则警告不会在生产环境中显示, 因此从理论上讲, 提供一个简单的解决方案(快速解决方案)可以通过简单地忽略警告来消除那些警告的出现。 E_DEPRECATED标志。你可以在项目的settings.yml文件中实现此目的:
# YourProject/apps/YourApp/config/settings.yml
dev:
.settings:
error_reporting: <?php echo ((E_ALL | E_STRICT) ^ E_DEPRECATED)."\n" ?>
这将立即隐藏那些警告, 使其不会出现在开发环境中, 但是, 这并不是最正确的处理方式, 因为在将来, 这些功能可以删除, 并且你的应用程序将无法再使用。
如何正确解决?
要遵循使代码至少持续几个版本使用的良好实践正确解决此问题, 是解决在需要的地方实现preg_replace_callback函数的错误。你将需要从Symfony 1.4.20的源代码中总共修改7个文件:
1. /symfony/lib/util/sfToolkit.class.php
在此文件中, 你需要在类末尾添加以下方法:
public static function camelize($text)
{
if (preg_match('#/(.?)#', $text, $matches)) {
$text = str_replace($matches[0], '::'.strtoupper($matches[1]), $text);
}
if (preg_match('/(^|_|-)+(.)/', $text, $matches)) {
$text = str_replace($matches[0], strtoupper($matches[2]), $text);
}
return $text;
}
此方法稍后将用于其他文件。
2. /symfony/lib/util/sfInflector.class.php
在第28行附近的该文件中, 将驼峰函数替换为以下代码:
public static function camelize($lower_case_and_underscored_word)
{
$tmp = $lower_case_and_underscored_word;
return sfToolkit::camelize($tmp);
}
3. /symfony/lib/response/sfWebResponse.class.php
在第407行附近的该文件中, 用以下代码替换normalizeHeaderName:
protected function normalizeHeaderName($name)
{
return preg_replace_callback('/\-(.)/', function ($matches) { return '-'.strtoupper($matches[1]); }, strtr(ucfirst(strtolower($name)), '_', '-'));
}
4. /symfony/lib/plugins/sfPropelPlugin/lib/form/sfFormFilterPropel.class.php
在第264行附近的该文件中, 将驼峰函数替换为以下代码:
protected function camelize($text)
{
return sfToolkit::camelize($text);
}
5. /symfony/lib/plugins/sfDoctrinePlugin/lib/form/sfFormFilterDoctrine.class.php
在第324行附近的该文件中, 将驼峰函数替换为以下代码:
protected function camelize($text)
{
return sfToolkit::camelize($text);
}
6. /symfony/lib/form/addon/sfFormObject.class.php
在此文件中靠近279行的位置, 将驼峰函数替换为以下代码:
protected function camelize($text)
{
return sfToolkit::camelize($text);
}
7. /symfony/lib/command/sfCommandManager.class.php
在第109行附近的该文件中, 更改在else if语句中执行的以下代码:
// hack to split arguments with spaces : --test="with some spaces"
$arguments = preg_replace('/(\'|")(.+?)\\1/e', "str_replace(' ', '=PLACEHOLDER=', '\\2')", $arguments);
$arguments = preg_split('/\s+/', $arguments);
$arguments = str_replace('=PLACEHOLDER=', ' ', $arguments);
有了这个新代码:
// hack to split arguments with spaces : --test="with some spaces"
$arguments = preg_replace_callback('/(\'|")(.+?)\\1/', function($matches) {
return str_replace(' ', '=PLACEHOLDER=', $matches[2]);
}, $arguments);
$arguments = preg_split('/\s+/', $arguments);
$arguments = str_replace('=PLACEHOLDER=', ' ', $arguments);
更改所有文件后, 清除项目的缓存, 然后在浏览器中再次访问它。现在, 警告不应再出现。
“快乐”的传统编码!
php camelize,如何使Symfony Project 1.4.20与PHP 5.5或5.6完全兼容(不推荐使用:preg_replace()警告)...相关推荐
- 从零开始学php 光盘,从零开始学PHP(第2版)(含DVD光盘1张)
第1篇 PHP程序语言 第1章 PHP漫谈( 教学视频:19分钟)15 1.1 认识PHP15 1.2 HTML基础16 1.2.1 HTML文档基本格式16 1.2.2 用标签显示Hello Wor ...
- Symfony 官方文档 第 1 章 1 - Symfony介绍
原文请看 这里 第 1 章 1 - Symfony介绍 Symfony能做什么? 使用Symfony需要掌握哪些知识? 读完这一章你就知道答案了. Symfony简介 通过自动化完成一些特定的开发模式 ...
- 如何在Android上使背景20%透明
本文翻译自:How to make a background 20% transparent on Android 我如何使Textview的背景大约20%透明(不完全透明),背景中是否有颜色(即白色 ...
- Project 2010 概述
Project 2010 简介 在 Project 2010 客户端版本中,我们致力于使其更易于进行入门学习.更易于规划和更易于报告.本文简要介绍 Project 2010 的几个亮点,您可以在 Pr ...
- Microsoft Project 2010 简介
在 Project 2010 客户端版本中,我们致力于使其更易于进行入门学习.更易于规划和更易于报告.本文简要介绍 Project 2010 的几个亮点,您可以在 Project 团队的官方博客 中找 ...
- 调一调Hive on Spark参数,毫不夸张的说,使其性能达到最大化!
前言 Hive on Spark是指使用Spark替代传统MapReduce作为Hive的执行引擎,在HIVE-7292提出.Hive on Spark的效率比on MR要高不少,但是也需要合理调整参 ...
- io.realm:rea_使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述...
io.realm:rea 如今,人们需要具有高用户体验的高响应性,交互式应用程序,这通常意味着要处理异步性,尤其是当应用程序涉及高负载,实时数据和多用户时. 由于Java是一种固有的语言,它固有地支持 ...
- 使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述
如今,人们需要具有高用户体验的高响应性,交互式应用程序,这通常意味着处理异步性,尤其是当这些应用程序涉及高负载,实时数据和多用户时. 由于Java是一种固有的支持命令式编程风格的面向对象语言,因此异步 ...
- 使C#代码现代化——第四部分:类型
目录 介绍 背景 经典类型系统 剖析C#的类型系统 现代方式 生成迭代器 丢弃(Discards) 处理异步代码 模式匹配 可空类型 见解 结论 兴趣点 介绍 近年来,C#已经从一种具有一个功能的语言 ...
最新文章
- 【opencv】(13) 案例:停车场空余车位检测,附python完整代码
- JMeter断言介绍
- J-link v8固件修复
- 关于C语言中单双引号的问题
- ngrok编译和安装
- 笔记——数据可视化02
- mysql将多个成绩放在一排_mysql巧用连表查询各科成绩前三名
- 进程的逻辑设备如何与一个物理设备建立对应的关系?
- 解开 Windows 下的临界区中的代码死锁(转)
- 前端学习(3103):vue+element今日头条管理-hello-react案例
- 函数中的apply,call入门介绍
- 数据结构--红黑树 Red Black Tree
- bsc是指什么_为什么KPI令人厌恶?中小企业不要乱用KPI!
- 分布式事务模型--基于消息的分布式事务
- bzoj 3172: [Tjoi2013]单词 AC自动机
- Solidity-让合约地址 接受ETH的转账充值的 三种方式
- .NET Framework 3.5 sp1离线安装方案
- Java 集合系列06之 Vector详细介绍(源码解析)和使用示例
- Chrome OS 开发者版现可备份和恢复 Linux 容器
- 开源的虚拟化私有云及云管平台
热门文章
- matlab小作业答案,MATLAB所有作业及答案
- table2excel 导出文字不居中的问题 附 jquery.table2excel.js 插件
- world wind java开发_World Wind Java开发之十五
- SLIK: 高扩展、低延时的键值存储索引实现(RAMCloud)
- 苹果霸屏热搜!M2芯片新笔记本9499元起,iPhone锁屏终于可以自定义,还秀出智能车机天花板丨WWDC 2022...
- NIO 与 epoll
- 大数据浪潮下,企业财务人员应如何提升数据分析能力?
- Sqoop job作业
- adroid解析XML三种方式
- learn-css 学习总结