Windows 上的 Apache / PHP 因正则表达式而崩溃

2023-12-29

我发现以下 PHP 代码在 Windows Apache 服务器上运行时会崩溃:

<?php

$test = "0,4,447,11329,316,415,142,5262,6001,9527,11259,11236,1140,9770,9177,9043,11090,268,5270,9907,9196,10226,".
        "9399,1476,9368,6929,1659,11074,10869,8774,739,11344,10482,6399,8910,8997,11198,137,10148,10371,5128,767,2483,".
        "211,9973,10726,9299,778,11157,9497,275,9418,11141,241,5288,11324,776,10960,9289,7944,222,10686,11428,9723,".
        "10615,11399,9869,9083,10180,10043,9957,9387,9215,8869,9667,10174,10902,6607,9282,1259,395,10411,152,9344,8949,".
        "10923,8976,11042,11519,10704,10979,216,10044,9201,1721,5831,881,9721,1757,11054,1335,6151,9526,9081,111,498,".
        "2960,438,5313,206,318,10820,8192,6039,9161,11012,1717,1360,10757,4314,11280,9647,9346,10546,11006,9553,10365,".
        "6148,10565,4532,2776,4124,8853,6145,478,4539,540,9981,726,7186,11122,324,10524,1139,7900,9581,6869,1724,10851,".
        "10059,10018,11032,1290,3818,782,796,917,8740,6935,11439,10799,10948,249,2068,8778,6289,295,2766,9425,791,309,".
        "4753,10418,771,260,10835,10441,6434,10164,10475,10842,9013,11224,2247,8972,2141,2078,2152,475,9077,6291,10285,".
        "8067,753,6660,10889,431,2503,6007,9180,810,11447,2461,3689,7104,10150,10921,895,10598,747,10570,305,4497,11055,".
        "11496,10938,10722,8761,10086,11482,6780,6685,6918,10286,10659,9996,4074,9118,907,5192,283,2230,8884,6966,".
        "8820,8132,3598,9599,6796,11257,7049,5992,8637,4168,9017,7950,7165,10721,10037,1071,8044,759,11429,6380,".
        "10239,1593,9455,9704,10357,6737,2958,4051,9754,6564,11407,8716,7485,1528,6857,7406,9579,7259,1609,7820,".
        "4448,10289,1123,7005,8123,9316,914,9655,5280,9710,7822,510,10795,10476,8706,6160,8248,6978,9300,10643,".
        "7106,10250,519,7860,4733,904,8773,4714,8695,8633,6105,3312,11548,9580,10389,4886,4587,513,8485,4606,".
        "6471,581,526,637,3523,3772,3153,9336,9120,7633,3755,10087,524,10015,8563,556,1230,570,3652,569"
        .",8473,10209,3886,573,5363,4715,3865,9452,1218,7066,575,577,4724,7655"
        ;

$hest = preg_match('/^\d+(?:,\d+)+$/', $test);
var_dump($hest);
?>

有趣的是,如果字符串短一点,代码就可以工作 - 如果我注释掉字符串的最后一部分(行),代码就会按预期运行和工作。

然而,正如此处提供的代码一样,该代码会导致 Apache 崩溃并重新生成 - 不会记录任何错误。如果我尝试直接通过 PHP 运行代码,它会按预期工作,因此问题在某种程度上与 Apache 有关。

我尝试了“pcre.recursion_limit”设置,发现如果我将其降低到 689,它不会消失,而是 preg_match() 调用失败并出现 PREG_RECURSION_LIMIT_ERROR。对于较高的 pcre.recursion_limit 值,Apache 将终止。

阿帕奇2.2.11 PHP 5.3.0

我还在 Debian 服务器上测试了这个,我没有看到错误,并且在 Windows 上使用不同版本的 PHP 和 Apache,错误发生如上所述,所以看起来它可能与 Windows 相关。

有人见过这个吗?我真的很想要某种提示!

UPDATE:我是因为 Windows 版 Apache 中的一个“错误”——好吧,这并不是一个真正的错误,但 Apache 似乎是使用较小的堆栈大小进行编译的,这会在 PHP 使用 PCRE 时导致此错误。看http://bugs.php.net/bug.php?id=47689 http://bugs.php.net/bug.php?id=47689


降低“pcre.recursion_limit”始终是一个好主意,因为默认的高值可能会损坏进程堆栈(请参阅http://php.net/manual/en/pcre.configuration.php http://php.net/manual/en/pcre.configuration.php) - 这正是 mod_php 安装时发生的情况。由于 preg 函数在达到递归/回溯限制时不会抛出错误,因此拥有像这样的包装器可能会很有用

function match($re, $text) {
    preg_match($re, $text, $m);
    if(preg_last_error())
         trigger_error("preg: " . preg_last_error());
    return $m;
 }

至少,当出现问题时,这可以让您知道。

除此之外,请尽可能简化您的模式,例如/^\d[\d,]*\d$/与上面相同,但零递归。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 上的 Apache / PHP 因正则表达式而崩溃 的相关文章

  • 如何让 CodeIgniter 接受“查询字符串”URL?

    根据 CI 的文档 CodeIgniter 使用基于分段的方法 例如 example com my group 如果我想找到一个特定的组 id 5 我可以访问 example com my group 5 并在控制器中定义 function
  • 使用 JavaScript 正则表达式分割字符串但保留分隔符?

    我收到如下输入 F12T213B1239T2F13T341F324 我必须按字母和后面的数字对其进行分组 所以理想的输出是 F12 T213 B1239 T2 F13 T341 F324 然后根据数字所带有的字母对数字进行一些处理 字母是固
  • count() 参数必须是一个数组或一个在 Laravel 中实现 countable 的对象

    这是这里的代码 protected function credentials Request request admin admin where email request gt email gt first if count admin
  • imagecreatefrompng(和 imagecreatefromstring)导致不可恢复的致命错误

    当我尝试在不正确的 png 图像上使用 php gd 函数时 出现致命的 PHP 错误 这似乎是某种错误 因为根据函数文档 imagecreatefrompng 例如 return resource an image resource id
  • 使用 PHP 显示 Mysql 中的图像

    这就是我的数据库中的表的样子 我正在尝试显示我存储的图像 它是 mimetype longblob 当我运行代码时 它会给我一个带有 的小框 没有错误 只是那个框 有谁知道错误是什么以及如何修复它 Display Index Display
  • 在应用程序上按下类似按钮时自动刷新时间线页面?

    在时间轴发布到页面上之前 当用户在页面上按下 点赞 按钮时 页面会自行刷新 现在 启用时间线后 如果您访问应用程序并按右上角的类似按钮 页面不会自行刷新 并且应用程序不会识别用户 喜欢 该页面 当用户按下 喜欢 按钮时 是否有一种方法或事件
  • 使用 cURL 解释 PHP 中的令牌返回

    我无法解释从该服务器获得的响应 当用户尝试访问我的服务器上的页面时 此 PHP 首先运行以查看它们是否具有有效的令牌 通过我未在此处显示的上一个登录页面 ch curl init searchURL http example com isT
  • 当我尝试获取 [" 和 ", (有代码)之间的所有子字符串时,如何修复此错误?

    我有字符串 new y new york 0 new york times 0 我想要这些字符串之间 and new york new york times 我尝试了这个功能 public MatchCollection s s Regex
  • 更改 Symfony2 中的默认语言环境

    我正在尝试更改应用程序的默认区域设置 到目前为止我尝试过的事情 将 intl default locale 设置为 et EE 将区域设置设置为 et app config parameters ini 更改了我的捆绑包 boot 方法中描
  • PHP json_encode 反斜杠和数组名称的问题

    我正在将一些 postgresql 数据转换为 PHP json encode 但我遇到了一些问题 json encode 将 BackSlash 添加到我的数据中的所有斜杠中 在描述中出现段落标记的结束 我认为是因为反斜杠问题 我不希望我
  • PHP登录然后重定向

    我使用以下代码将用户登录到一系列安全页面 我需要将每个用户在提交后重定向到适当的页面 我想知道需要采取哪些步骤来选出三个登录级别 管理员 特殊 用户 if isset SESSION username function check logi
  • Laravel 中 Twitter Bootstrap 导航的自动活动类

    和大多数人一样 我正在使用 Twitter Bootstrap 来构建我目前在 Laravel 中开发的网站 到目前为止 我很喜欢使用 Laravel 作为与 Rails 相当的 PHP 但我想知道是否有更好的方法来制作导航栏 我试图确保我
  • 搜索多个表 (SQL)

    我需要能够有一个 SQL 查询来使用简单的搜索来搜索我的数据库 这是我的表格现在的样子 Table artists id name Table albums id artistID name Table songs id albumID n
  • 如何在Redis中正确存储图片?

    决定将图像存储在Redis中 如何正确执行 现在我这样做 redis gt set image path here is the base64 image code 我不确定这是否正常 将图片存储在Redis中是完全可以的 Redis 键和
  • 证明字符串算法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PDO 连接字符串:最好的方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想使用 php pdo 制作一个后端应用程序 我发现了很多不同的方法来处理 PDO 连接字符串 我想知道使用 pdo 执行连接字符串的最佳方法
  • 使用 google 检查 url,安全 = 活动

    如何检查 url 是否被 google 显示 Example https www google com search q redtubex xxx safe active Code input http www example com in
  • 正则表达式获取两个方括号之间的数字

    您好 我需要使用正则表达式在 JavaScript 中获取两对方括号内的字符串 这是我的字符串 12 23 asd 到目前为止我尝试的是使用这种模式 d 我需要获得价值12使用正则表达式 您可以使用以下正则表达式 d 这将提取12 from
  • PDF:在现有 PDF 文件中插入一行文本

    我有一个 PDF 文件 我希望在所有页面 前两页除外 的页脚上添加一行纯文本 不是徽标或类似内容 有谁有一个如何做到这一点的例子 用任何语言 Update 原始 PDF 是用 Scribus 制作的 我可以完全控制它 因此 如果更容易进行查
  • 检测图像是否损坏或损坏

    我需要以编程方式检查用户在我的应用程序上选择作为壁纸的图像是否已损坏或损坏 基本上我为用户提供了选择自己的图像作为壁纸的选项 现在 当图像加载时 我只想检查它是否已损坏 如果您正在寻找 PHP 解决方案而不是 javascript 解决方案

随机推荐

  • hide() 单选按钮*和*它在 jquery 中的文本标签

    我正在回顾最近的一个项目 解决可访问性问题 并确保所有表单元素都有标签 将标签文本放入标签中会导致我之前编写的一些笨拙代码出现问题 基本上 如果您有一个单选按钮及其标签
  • R 将正数和负数的 $xxx.xx 更改为 xxx.xx 但不舍入

    我有一个 df 其中第 2 列及以后的列是美元金额 例如 1004 23 1482 40 2423 94 等 类似于下面的示例 gt df id desc price 1 0 apple 1 00 2 1 banana 2 25 3 2 g
  • 从 C# 调用时将记录选项返回为 null

    是否有可能返回record option从 F 到 C 的值作为空值 我想将一些逻辑封装在 F 程序集中 并尽可能多地隐藏在外观后面 对 C 来说更自然 这是一些综合示例 type Data DataField1 int DataField
  • 用于信标的 CoreBluetooth

    我有一个需要信标范围的项目 我查看了很多示例代码 它们都使用CLLocationManager and CLBeaconRegion 我的问题是didRangeBeacons每秒仅调用一次回调 尽管我没有找到任何专门针对信标的代码示例 但我
  • 如何在没有完成块的情况下在 NSURLSession 中获取服务器响应数据

    我在用NSURLSession用于背景图片上传 根据上传的图像 我的服务器给了我响应 我确实在我的应用程序中进行了相应的更改 但是当我的应用程序在后台上传图像时 我无法获得服务器响应 因为没有完成块 有没有办法在不使用完成块的情况下获得响应
  • iPhone 应用程序转换为 iPad? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想将我的应用程序转换为通用应用程序 谁能推荐一些好的教程来实现这一目标 我需要将 Interface
  • Node JS 插件 - NAN 与 N-API? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一个使用 Node js 插件和 C 的项目 我遇到了两个可以使用的抽象库 NAN 和 N API 但是我无法决定应该使用哪一个
  • 线程“main”中的异常 java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET

    您好 我尝试从 java 应用程序中的 solr 数据库中索引一行 我已经添加了必要的罐子 但我不断收到此错误 我的 solr 模式是正确的 我发出请求只是将新行添加到我的数据库中 我也希望它被索引 这是错误 SLF4J Failed to
  • 如何从交互式图表中抓取 json 数据?

    I have a specific section of a website https understat com player 2097 that I want to scrape data from and here s the sc
  • 当屏幕上的数据正常时,在 CSV 文件导出中获取“System.Collections.Generic.List`1[System.String]”

    我是 PowerShell 新手 尝试从 Hyper V 中获取虚拟机名称及其关联 IP 地址的列表 我在屏幕上得到的信息很好 但是当我尝试导出到 csv 时 我得到的所有 IP 地址是System Collections Generic
  • Javadoc 无法识别文档标题选项/标志

    我通过 gradle 使用 doclet 运行 javadoc 当我运行 javadoc doclet 任务时 我收到下一个错误 error invalid flag doctitle 之后是下一个使用表 usage javadoc opt
  • 为什么 UILabel 没有初始化?

    代码来自斯坦福大学CS193p 我添加了一个 NSLog 来查看 标签似乎没有被初始化 任何想法 interface AskerViewController
  • 变量内部的 jQuery 选择器?

    您好 我正在尝试获取另一个 HTML 文件中具有特定类的所有 DIV 的 ID 要加载我使用的文件 get blocks html function data here I don t know how 现在我正在寻找这样的东西 data
  • 如何使用RelativeLayout实现以下结果?

    图片 http img838 imageshack us img838 1402 picse png http img838 imageshack us img838 1402 picse png 如何制作图中的布局 2 仅使用Relati
  • 按组从前一行减去值

    在 R 中 假设我有这个数据框 Data id date value 2380 10 30 12 21 01 2380 10 31 12 22 04 2380 11 1 12 22 65 2380 11 2 12 23 11 20100 1
  • Swing GroupLayout:调整大小和限制组件大小

    我在用着GroupLayout管理一些动态生成的数据输入表单中的组件 布局或多或少像这样 label A field A label B field B label C field C 我使用 2 个并行组进行水平布局 使用一个顺序组进行垂
  • UEFI引导加载程序

    我正在考虑开发一个简单的 首先 UEFI 引导加载程序来加载 ELF 映像 并且想知道是否有人有一个很好的切入点 可以进入任何现有项目 或者我可以用来开始使用的示例 另外 我想知道是否有人有让虚拟机运行 EFI 应用程序的经验 我已经设置了
  • 子进程会发生什么?

    如果子进程的父进程未经等待就突然终止 会发生什么情况 子进程也会死吗 孩子得到重新定义为init http en wikipedia org wiki Orphan process
  • linux Wayland 显示多用户

    我使用摇摆合成器 当我在控制台中更改用户时 我无法显示 wayland 图形界面 它与 X 应用程序一起使用 su otherUser myApplicationWayland error XDG RUNTIME DIR not set i
  • Windows 上的 Apache / PHP 因正则表达式而崩溃

    我发现以下 PHP 代码在 Windows Apache 服务器上运行时会崩溃