小编Nik*_*a 웃的帖子

用于单行代码块的PHP Formatter

我正在尝试配置Eclipse PHP格式化程序,以便php在它们之间只有一行代码时将开始和结束标记保持在1行(如果有更多行代码,则保持默认的新行格式).

例:

<td class="main"><?php
echo drm_draw_input_field('fax') . '&nbsp;' . (drm_not_null(ENTRY_FAX_NUMBER_TEXT) ? '<span class="inputRequirement">' . ENTRY_FAX_NUMBER_TEXT . '</span>' : '');
?></td>
Run Code Online (Sandbox Code Playgroud)

应格式化为:

<td class="main"><?php echo drm_draw_input_field('fax') . '&nbsp;' . (drm_not_null(ENTRY_FAX_NUMBER_TEXT) ? '<span class="inputRequirement">' . ENTRY_FAX_NUMBER_TEXT . '</span>': ''); ?></td>
Run Code Online (Sandbox Code Playgroud)

有没有办法用Eclipse实现这一目标?还是另一个建议/格式化程序?

编辑: 似乎Eclipse没有这样的格式化选项,如下面的评论中所述.任何可以做到这一点的现有替代品?

php eclipse formatting coding-style

12
推荐指数
1
解决办法
758
查看次数

虽然每个都被弃用,但Foreach更换需要花费更多时间

使用PHP 7.2,each不推荐使用.文件说:

警告此功能自PHP 7.2.0起已废弃.非常不鼓励依赖此功能.

我正在努力调整电子商务应用程序并将所有while-each循环转换为(假设)等效foreach.

正如您在下面看到的,我已经用等效的替换了所有的reset&while循环foreach.

它工作得很好.但是,我们有一个客户在她的购物车中有很长的商品列表,试图结帐并抱怨她从服务器收到错误502.我试图重现它,发现只有她的购物车失败,加载结帐页面需要2分钟,然后加载502次.然后我开始调试我最近修改过的很多文件,试用和错误,直到我发现问题出在这个特定文件和特定功能上.每当我将第一个foreach循环切换回while循环时,客户可以在不到一秒的时间内加载结帐页面.切换回foreach- 再次需要几分钟,但PHP在结束执行之前超时.

我做的是,输出执行过程中的测试foreachVS的while循环(var_dump $products_id$this->contents例如),他们似乎都相同.我已经重写了代码以使其顺利运行并保持PHP 7.2兼容,但我仍然无法弄清楚为什么会发生这种情况.

这是完整的功能:

function get_content_type() {
  $this->content_type = false;

  if ( (DOWNLOAD_ENABLED == 'true') && ($this->count_contents() > 0) ) {

    // reset($this->contents);
    // while (list($products_id, ) = each($this->contents)) {
    foreach(array_keys($this->contents) as $products_id) {

      if (isset($this->contents[$products_id]['attributes'])) {
        // reset($this->contents[$products_id]['attributes']);
        // while (list(, $value) …
Run Code Online (Sandbox Code Playgroud)

php each performance foreach while-loop

12
推荐指数
1
解决办法
2687
查看次数

如何调试和记录PHP OPcache问题

我在Windows 10上使用WAMP,在Apache 2.4上运行PHP 7.2

当我打开OPcache时,我加载的页面在Chrome中崩溃并出现以下错误:

ERR_CONNECTION_RESET

我检查了php错误日志和Apache错误日志,但未找到任何报告的错误.我试图禁用Xdebug,仍然是相同的崩溃,并且在日志中没有错误.关闭OPcache或切换到php 7.1或更低版本可以解决问题.

我到处寻找有关如何调试导致OPcache失败的原因(以及原因)的一些信息,因为关闭它不是一个解决方案,但找不到任何有用的东西(也检查过类似的SO问题,比如这个也没有因此,我正在向专家们寻求帮助,我相信这也将有助于其他人.

谢谢.

PS注意一个很长的手动试错后,我能找到的文件在我的PHP应用程序,它是造成OPcache失败/崩溃,并列入黑名单在OPcache php.ini配置该文件(也降低了它的大小工作得很好,所以我怀疑问题是内部的实际代码),但我仍然在寻找一种简单的方法来调试这些问题,而无需检查和检查服务器上的每个文件.我也不知道它为什么会失败,所以找到失败的原因将有助于向OPcache开发人员提交bug报告.

编辑: 添加pastebin链接需要将代码添加到问题中.这是pastebin文件的开头:

<?php

global $_LANGADM;
$_LANGADM = array();

$_LANGADM['AdminAddressesd3b206d196cd6be3a2764c1fb90b200f'] = 'Delete selected';
$_LANGADM['AdminAddressese25f0ecd41211b01c83e5fec41df4fe7'] = 'Delete selected items?';
Run Code Online (Sandbox Code Playgroud)

TL; DR

我在寻找:

1)一种轻松确定OPcache是​​使脚本失败的扩展的方法,无需通过手动试验和错误遍历每个扩展(打开/关闭它们直到找到失败的扩展名).

2)轻松找到一种方式/日志,显示启用OPcache时哪个文件及其失败的原因.

简单来说 - 我们怎么知道OPcache失败时何时,何地以及为什么会失败,因为没有任何报告/日志就像在大海捞针一样,尤其是当OPcache失败时,即使Xdebug似乎没有记录或输出任何内容, 由于某些原因.

再次感谢

php debugging opcache

9
推荐指数
1
解决办法
809
查看次数

将$('body').on('click')与$(window).resize(jQuery中的function())相结合

想知道是否有办法将2个独立功能的相同代码组合成1个功能.

就我而言:

jQuery('body').on('click', '.some_div', function (e) {
    // Long and fancy code
});

jQuery(window).resize(function () {
    // Do the same fancy stuff (identical code)
});
Run Code Online (Sandbox Code Playgroud)

javascript jquery

8
推荐指数
2
解决办法
658
查看次数

某些表条件下 MySQL/MariaDB 查询慢的可能原因

在某些条件下,我遇到了一个与慢速查询有关的奇怪问题:我进行了一些测试,并且能够将问题隔离到一个名为的单个表products_description(所有表都是 MyISAM)。起初我注意到当这个表是新的(即刚刚导入)时,查询总是执行得很快(~0.3s)。但是,如果我在此特定表上执行任何这些操作,则在任何时间(甚至在导入后立即执行): CHECK, OPTIMIZE,ANALYZEREPAIR,查询都会突然减慢 x10 倍(大约需要 4.5 秒)并且始终保持缓慢。

请注意,我在运行查询时强制无缓存以确保结果正确。

只有当我在该表上执行以下任何操作时,我才能恢复性能:

1)DROP表并再次导入。

或者

2)ALTER该表中的以下任何一项:CollationCHECKSUMDELAY_KEY_WRITE。然后它以更改的值快速运行,当恢复到旧值时,性能保持快速。或者ALTER products_description FORCE可以执行以恢复性能。

即便如此,如果我对该表执行任何CHECK, OPTIMIZE,ANALYZEREPAIR操作,查询速度会下降,直到我执行 1) 或 2)

我测试的另一件事:在对表执行任何操作之前,我备份了表的文件 ( products_description.frm, products_description.MYD, products_description.MYI),运行查询,它运行得很快。然后我CHECK在表上执行,运行查询,速度慢了 10 倍,我复制了备份文件并覆盖了 3 个文件,再次运行查询,再次降低速度。

我已经将数据库压缩到了一个 ~5mb 的 zip 文件中(解压缩了 ~80mb)。如果有人想在您自己的环境中测试数据库,请告诉我,我会向您发送下载链接。我可以在几个不同的服务器上重现这个,在 MariaDB 10.1+ 和 MySQL 5.6+ 上。

这是我正在运行的 SQL 查询,您应该使用以下命令进行测试:

SELECT DISTINCT pav.products_options_values_id, 
            pav.products_options_values_name, …
Run Code Online (Sandbox Code Playgroud)

mysql database database-performance mariadb

6
推荐指数
1
解决办法
4176
查看次数

RegEx - 排除注释的PHP代码块

我正在使用带有正则表达式内容搜索的文件搜索实用程序(FileSeek).我正在搜索的内容基本上是其中包含的任何未注释的行while...each.我已成功设法排除内联注释行,例如// while (list($key, $value) = each($_GET))使用此正则表达式:^(?:(?!\/\/).)*while.+[\s=(]each[\s(]

演示

如何改进正则表达式搜索(使其更具限制性),以从注释行注释代码块中排除搜索结果,\* *\例如:

/*
  while (list($key, $value) = each($_GET))
*/
Run Code Online (Sandbox Code Playgroud)

要么

/* some code
  while (list($key, $value) = each($_GET))
  some code
*/
Run Code Online (Sandbox Code Playgroud)

换句话说,如何修改我的正则表达式以完全跳过/忽略注释的php块中的所有内容:\* *\而不是拾取其中的结果?

编辑: 仅供参考,这是一个相反的例子,即.仅匹配已注释的代码.

php regex search

5
推荐指数
1
解决办法
123
查看次数

如何计算 GROUP_CONCAT 中有多少逗号分隔值

在这样的查询中:

SELECT GROUP_CONCAT(DISTINCT( p.products_id )) AS comma_separated 
FROM   products p 
       left join specials s 
              ON p.products_id = s.products_id 
       left join products_to_categories p2c 
              ON p.products_id = p2c.products_id 
       left join products_description pd 
              ON p.products_id = pd.products_id 
       inner join products_attributes pa 
               ON p.products_id = pa.products_id 
WHERE  p.products_status = '1' 
       AND p2c.categories_id = 57 
       AND Date_sub(Curdate(), interval 7000 day) <= p.products_date_added 
ORDER  BY p.products_id DESC 
Run Code Online (Sandbox Code Playgroud)

我在名为comma_separated 的字段中得到一长串逗号分隔数字的结果。如何修改查询以计算有多少逗号分隔值?

编辑:

谢谢,巴马尔在下面的回答。我不断得到一个更短的数字列表(实际计数中的 107 个值而不是 4000+),现在我终于找到了原因。似乎 GROUP_CONCAT 被限制为 1024 个字符,这对我的应用程序来说非常糟糕。来源:http : //www.bennadel.com/blog/2669-mysql-group-concat-fails-silently-when-it-hits-its-size-limit.htm

mysql sql

4
推荐指数
1
解决办法
1027
查看次数

安全转义 .htaccess mod_rewrite 正则表达式中的句点/点 (.) 字符

.htaccess的 osCommerce 网站上安装了一个由高级 SEO URL php 系统使用的文件。

它具有以下规则,适用于大多数情况,但从我的 GET 参数中删除句点:

  RewriteRule ^([a-z0-9/-]+)-c-([0-9_]+).html$ index.php [NC,L,QSA]
  RewriteRule ^([a-z0-9/-]+)-m-([0-9]+).html$ index.php [NC,L,QSA]
Run Code Online (Sandbox Code Playgroud)

所以网址是这样的:

http://example.com//index.php?cPath=44_95&page=1&range=1.99_2.99
Run Code Online (Sandbox Code Playgroud)

根据规则被重写,并且1.99_2.99变为199_299

怎样才能安全度过经期呢?(即不会引起一些随机副作用)

php regex apache .htaccess mod-rewrite

3
推荐指数
1
解决办法
4952
查看次数

在PHP中修改逗号分隔列表中的字符串的最短方法

如果我想修改逗号分隔列表,如下所示:

$foo = "2, 4, 33, 25, 66"
Run Code Online (Sandbox Code Playgroud)

成为

$foo = "'1-2', '1-4', '1-33', '1-25', '1-66'"
Run Code Online (Sandbox Code Playgroud)

在PHP中实现这一目标的最快,最有效的方法是什么?

编辑: 我试过这个,但寻找更好的方法:

$foo = "2, 4, 33, 25, 66";
$bar = implode("', '1-",explode(",",$foo));
$foo = "'1-". $bar ."'";
Run Code Online (Sandbox Code Playgroud)

php

0
推荐指数
1
解决办法
108
查看次数