小编lis*_*nko的帖子

如何正确地使Symfony2应用程序的生产缓存无效?

我更改了应用程序的配置并将新代码部署到生产服务器.由于应用程序不解析配置文件并使用预编译类,我需要更新缓存文件.

app/console cache:warmupapp/console cache:clear命令.但是在调用这些命令后缓存没有更新,所以我不得不手动删除app/cache文件夹.

手动删除是非常危险的操作,因为它不是原子的,所以我可以在请求期间删除部分缓存,这可能会导致致命错误.

我该如何重新加载缓存?

caching reload symfony

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

PHP:在子类中包装类的所有函数

使用PHP库类,我想将它的所有公共函数包装在一个子类中......有些内容如下:

class BaseClass
{
   function do_something()
   {
        some;
        stuff;
   }

   function do_something_else()
   {
        other;
        stuff;
   }

   /*
    * 20-or-so other functions here!
    */
}

class SubClass extends BaseClass
{
   function magicalOverrideEveryone()
   {
        stuff-to-do-before;        // i.e. Display header
        call_original_function();  // i.e. Display otherwise-undecorated content
        stuff-to-do-after;         // i.e. Display footer
   }
}
Run Code Online (Sandbox Code Playgroud)

如果有一个[有点优雅/干净]的方法在一个地方完成它,我宁愿不要用相同的包装代码覆盖每个超类方法.

这可能吗?我怀疑我在这里进行元编程,甚至不知道PHP是否提供了这样的野兽,但我想问...

php inheritance aop overriding metaprogramming

10
推荐指数
1
解决办法
5535
查看次数

如何使用来自受信任域的凭据绑定到PHP中的AD服务器?

我们有几台AD服务器,它们之间建立了森林信任,因此来自不同域的Windows用户可以访问受限资源.假设我们有domainA.com和domainB.com,因此域domainB.com中的任何用户都可以登录domainA.com上的资源.出于安全原因,管理员禁用对LDAP服务器的匿名访问.

现在,我们需要在OpenLDAP客户端的帮助下,在PHP代码中列出所有LDAP服务器的所有用户.以下是获取domainB.com所有用户信息的PHP代码

define('USER', 'user@domainA.com'); // User from domainA.com here
$ldap = ldap_connect('domainB.com') or die('Bad connection');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
ldap_bind($ldap, USER, PASS) or die('Cannot bind');
Run Code Online (Sandbox Code Playgroud)

我的脚本因ldap错误"49无效凭据"消息"无法绑定"而死亡.AD的其他信息:
80090308:LdapErr:DSID-0C0903A9,评论:AcceptSecurityContext错误,数据52e,v1db1

我认为问题在于简单的身份验证机制,因为当我在Ldap Administrator客户端中使用GSS Negotiate身份验证时,user@domainA.com的凭据一切正常.

如何使用user@domainA.com的凭据在domainB.com上成功绑定?

使用SASL DIGEST-MD5进行UPD1身份验证

ldap_sasl_bind ( $ldap, '', $pass, 'DIGEST-MD5', null, 'user@domainA.com');
Run Code Online (Sandbox Code Playgroud)

来自AD的日志:

The computer attempted to validate the credentials for an account.

Authentication Package: WDigest
Logon Account:  user
Source Workstation: DOMAINA
Error Code: 0xc000006a

An account failed to log on.

Subject:
    Security ID:        NULL SID
    Account …

php authentication trust ldap active-directory

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

我们可以通过使用PHP扩展函数在函数中注入更多行吗?

我对我正在为自定义框架开发的事件系统有所了解.

想象一下像这样的伪函数.

class Test
{
    public function hi()
    {
        Event::add(__FUNCTION__ . 'is about to run.');
        return "hi";
    }
}
Run Code Online (Sandbox Code Playgroud)

想象一下,你需要为更多功能做同样的事情.(也许您想记录在运行时运行的函数,并希望将它们记录在单独的文件中.)

而不是这样做并手动将事件添加到函数中,我们可以做这样的事情吗?

class Test
{
    public function hi()
    {
        return "hi";
    }
}

// events.php (It's a pseudo code so may not work.)
// Imagine extend's purpose is to inject codes into target function

Event::bind('on', $className, $methodName, function() use ($className, $methodName) 
{
    return $className->$methodName->extend('before', Event::add(__FUNCTION__ . 'is about to run.'));
});
Run Code Online (Sandbox Code Playgroud)

我们的想法是注入hi()内部的函数Test class并注入我们通过extend外部传递的任何函数.'before'意味着注射必须在目标函数的第一线. …

php aop cross-cutting-concerns

7
推荐指数
1
解决办法
208
查看次数

普通PHP中的AOP,不需要任何PECL扩展(Go!) - 如何?

有一个名为Go的框架!面向方面的PHP框架

它是用纯PHP制作的,不需要任何PECL扩展和DI容器就可以工作.

还可以与任何现有的PHP框架和库集成(使用或不使用其他配置).

并且没有切入点的运行时检查,没有运行时注释解析,没有eval和__call方法,没有慢代理和call_user_func_array().快速引导过程(2-20ms)和建议调用.

所以我印象非常深刻,但我想知道的是,这实际上是如何运作的?

我在这里列出的这些要点......

我查看了github和官方网站以及其他一些文章,但是找不到任何关于这是如何工作的具体信息(一般情况下和具体情况).

我非常渴望知道这是如何工作的?它是如何实现的?

php oop aop frameworks goaop

7
推荐指数
1
解决办法
371
查看次数

为包装类操作PHP-instanceof-operator

我想为某些类设置一个通用的包装类来拦截和操作一些方法调用.方法 - 呼叫转发,拦截,到目前为止没问题.但是经过一段时间的思考,我发现了一个问题,我没有解决方案:我在我的应用程序中使用内置的instanceof-operator.当然这将不再起作用,因为包装器不是其中类的实例.我想继续使用运算符,而不是用其他函数替换它.

有没有办法实现此问题的解决方法?这个操作符如何工作?它是否调用了我可能在包装器中覆盖的类的核心功能?

我知道这不是一个真正"干净"的解决方案来操纵这个操作符,但我认为这对我来说是最简单的解决方案.而且正如我们所知,PHP中有很多东西并不那么干净...... :-)

谢谢你的回答,本

php aop instanceof decorator interceptor

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