小编Pro*_*f83的帖子

未检测到正则表达式preg_quote符号

我在数据库中有一个发誓单词的字典,以下作品很棒

preg_match_all("/\b".$f."(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
Run Code Online (Sandbox Code Playgroud)

$t是输入文本,简单地说,$f = preg_quote("punk"); "punk"是来自数据库字典,所以在循环的这一点上表达式如下

preg_match_all("/\bpunk(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
Run Code Online (Sandbox Code Playgroud)

preg_quote替换符号,例如.#\\#这样的表达是逃过一劫,但如果词典的检查如."F@CK""A$$"与上述表达式输入字符串没有检测到这些符号,我都a$$f@ck在词典中,但它们不工作.如果我删除preg_quote()单词,则正则表达式无效,因为这些符号不会被转义.

有关如何检测的任何建议"a$$"???

编辑:

所以我想那些没有按预期工作的表达将是例如.

preg_match_all("/\bf\@ck(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
Run Code Online (Sandbox Code Playgroud)

哪个应该找到f @ ck in$t

更新:

这是我的用法,简单地说; 如果有$m替换它们的匹配"\*\*\*\*",则整个块在循环中通过字典中的每个单词,$f是字典单词并且$t是输入

$f = preg_quote($f);
preg_match_all("/\b$f(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
if (count($m) > 0) {
     $t = preg_replace("/(\b$f(?:ing|er|es|s)?\b)/si","\*\*\*\*\*",$t);
}
Run Code Online (Sandbox Code Playgroud)

更新:看,var_dump:

preg_quote($f) = string(5) "a\$\$"
$t = string(18) "You're such an a$$"
expression = string(29) …
Run Code Online (Sandbox Code Playgroud)

php regex profanity preg-match

35
推荐指数
2
解决办法
2897
查看次数

PHP包括路径顺序和状态缓存

我正在构建一个框架,其中产品实例使用主框架文件,直到有一个它自己的文件版本的副本.为此,我做了以下事情:

set_include_path(MY_PRODUCT_ROOT.'/' . PATH_SEPARATOR . MY_FRAMEWORK_ROOT.'/');
Run Code Online (Sandbox Code Playgroud)

因此,如果我调用include('view-users.php');它将首先在MY_PRODUCT_ROOT中查找/view-users.php,如果找不到,则会查看MY_FRAMEWORK_ROOT/view-users.php.

在将文件添加到产品根目录之前,此过程非常顺利.我知道PHP/Apache正在缓存包含,人们会认为运行clearstatcache(true);清除任何状态缓存.PHP可能会在其中使用file_exists的include(); 并认为新文件仍然不存在.我试过重启Apache没有任何效果.

不幸的是,跑步clearstatcache(true);也无济于事.只有在我删除了MY_FRAMEWORK_ROOT /文件之后才会清除缓存并重试,从而找到MY_PRODUCT_ROOT /文件.

我有点难过,我知道我们需要刷新PHP/Apache对文件是否存在的理解,但是clearstatcache(true);没有帮助......

有任何想法吗?

更新:更正,重启Apache似乎现在有所帮助.我重申,只有在尝试将文件添加到MY_PRODUCT_ROOT,重叠现有的MY_FRAMEWORK_ROOT文件以进行自定义时,才会出现这种情况.

更新:开发环境是Windows上的Zend Server CE PHP 5.3.14,生产环境Centos linux httpd,PHP 5.3+.在我的开发环境中启用Zend优化器的事实可能会产生影响,也不会使用APC或任何其他缓存脚本

php caching zend-server-ce

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

CentOS Subversion,基本身份验证密码文件无法正常工作

所以我安装了SVN并将HTTPD用于远程存储库.一切正常,直到我使用密码文件.这根本不起作用.Apache的error_log说

(13) Permission Denied: Could not open password file

我已将passwd文件的chmod设置为777并将其设置为apache,我还将repo和passwd文件的父文件夹设置为chown apache和chmod 777 ...

我不知道这是怎么一个权限问题...任何帮助请!

UPDATE

我从中获取了SVN,并在我的一个域上实现了标准的基本身份验证

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    DocumentRoot "/var/www/www.domain.com/public_www"
    <Directory "/var/www/www.domain.com/public_www">
        Options -Indexes
        Order allow,deny
        Allow from all
        AllowOverride All
        AuthType Basic
        AuthName "Basic Authentication"
        AuthUserFile /path/to/authfile.htpasswd
        Require valid-user
    </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我像这样创建了密码文件

htpasswd -cm /path/to/authfile.htpasswd username
password (and retype)
Run Code Online (Sandbox Code Playgroud)

最后

service httpd restart
Run Code Online (Sandbox Code Playgroud)

请注意,auth提示符和以前一样,但是用户名和密码都没有!这是相当令人沮丧的,我已经仔细检查了密码文件和父文件夹的所有权限,所有者等,但我仍然得到

(13) Permission Denied: Could not open password file
Run Code Online (Sandbox Code Playgroud)

在Apache的error_log中

linux svn apache centos .htpasswd

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

php ×2

.htpasswd ×1

apache ×1

caching ×1

centos ×1

linux ×1

preg-match ×1

profanity ×1

regex ×1

svn ×1

zend-server-ce ×1