小编mik*_*ika的帖子

Symfony 1.4使用php 5.5中的弃用函数

我最近将PHP从5.3.27升级到5.5.0.在我的Symfony 2.3.2项目中一切正常,我可以享受最新的PHP功能.

现在当我回到我的其他Symfony 1.4.16项目时,我得到一个关于preg_replace被/ e修饰符弃用的PHP错误.

我在论坛中找不到关于此错误的参考:以前是否有人遇到此问题?有什么样的补丁我可以开箱即用吗?升级到Symfony 1.4.20会解决这个问题吗?

错误消息如下所示:

不推荐使用:preg_replace():不推荐使用/ e修饰符,而是在第409行的/myproject/lib/vendor/symfony/lib/response/sfWebResponse.class.php中使用preg_replace_callback

一种方法可能是按照消息和手册中的建议修改代码.如何将preg_replace表达式更改为preg_replace_callback调用?

任何帮助/提示都将非常受欢迎.

编辑:

到目前为止,还没有补丁(Symfony 1.4.20没有解决这个问题).解决方案是将对preg_replace的失败调用替换为在sourche中对preg_replace_callback的相应调用,这很容易在sfWebResponse类中完成(感谢提示Jon).不幸的是,现在下一次失败的情况稍微复杂一些......另一方面,我们可能不得不使用/ e选项grep for preg_replace使用以找出Symfony可能会破坏的位置.这给出了不少结果:o

所以...我的结论是Symfony 1.4用户最好不要将PHP升级到5.5版,直到出现一些严重的补丁.你怎么看 ?还有其他选择

php preg-replace preg-replace-callback symfony-1.4

18
推荐指数
6
解决办法
3万
查看次数

Instanceof和名称空间

我正面临一个意外的行为,试图使用以下内容:

$object instanceof $class
Run Code Online (Sandbox Code Playgroud)

1/PHP的'instanceof'关键字和命名空间可以很好地协同工作,正如官方文档中所解释的那样.

2 /然而,有时候,反斜杠逃逸会产生更微妙(模糊不清楚)的行为,正如Ben在这篇好文章中所说的那样.

在我的代码深处,y设置了几个转储如下:

var_dump($object, $class);
var_dump($object instanceof $class);
Run Code Online (Sandbox Code Playgroud)

运行我的脚本时,它给我以下输出:

class Tools\Tests\Entity\testObject#226 (2) {
  private $var_one =>
  NULL
  private $var_two =>
  NULL
}
string(36) "Tools\Tests\Entity\testObject"
bool(false)
Run Code Online (Sandbox Code Playgroud)

我的第一个转储类与第二个转储中的字符串严格相同.但是,我的instanceof dump返回FALSE.为什么?

我玩反斜杠,没有运气.也许我搞砸了名字空间?问题是我真的不知道如何进一步排除故障.我该怎么办?

php instanceof

12
推荐指数
2
解决办法
9661
查看次数

脚本使用Gmail发送邮件:无法在SMTP服务器上进行身份验证

我很难让我的PHP脚本发送带有SMTP Gmail帐户的电子邮件.我使用的是PHP和Symfony2 SwiftMailer,但问题似乎在于我的Gmail帐户配置.在我的日志中,我最终得到以下错误消息:

"ERROR - Exception occurred while flushing email queue: Failed to authenticate on SMTP server with username "new.user.name@gmail.com" using 1 possible authenticators"
Run Code Online (Sandbox Code Playgroud)

幸运的是,我有另一个Gmail帐户正在使用另一个应用程序,无数.在我的新盒子上拯救这些参数(用户和密码),eveything工作得很好.

在parameters.yml我有(工作正常):

parameters:
    mailer_transport: gmail
    mailer_host: ~
    mailer_user: old.user.account@gmail.com
    mailer_password: old-password
Run Code Online (Sandbox Code Playgroud)

以下是给出auth错误消息的版本:

parameters:
    mailer_transport: gmail
    mailer_host: ~
    mailer_user: new.user.account@gmail.com
    mailer_password: new-password
Run Code Online (Sandbox Code Playgroud)

不用说我已经检查,重新检查并再次检查用户和密码.

我在新帐户中查看了"转发和POP/IMAP"下的Gmail帐户设置:我找不到任何关于SMTP的信息.

搜索让我意识到某些验证码策略可能会干扰SMTP帐户.我在这里读到,我应该尝试输入一个验证码短语,我在这里输入,并收到一条好消息:"启用帐户访问权限","请尝试从新设备或应用程序再次登录到您的Google帐户."

再试一次.没运气.

所有这些都发生在我当地的开发环境中(包括OK邮件,而不是OK邮件).

如何在新创建的Gmail帐户中使用SMTP?任何的想法 ?

email gmail smtp

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

PHP DateTime对象 - 时间戳和时区冲突

从DateTime对象,我有兴趣在不同的TimeZones中获取时间.正如DateTime :: setTimezone doc中所解释的,当从字符串创建DateTime对象时,这非常有效:

$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";

$date->setTimezone(new DateTimeZone('UTC'));
echo $date->format('Y-m-d H:i:sP') . "\n";

echo $date->getTimestamp() . "\n";
Run Code Online (Sandbox Code Playgroud)

上述实施例将输出:
2000-01-01 00:00:00 + 12:00
2000-01-01 01:45:00 + 13:45
1999-12-31 12:00:00 + 00:00
946641600

现在是有趣的部分:如果我们选择时间戳,并按照手动说明启动我们的DateTime对象.

$date2 = new DateTime('@946641600');

$date2->setTimezone(new DateTimeZone('Pacific/Nauru'));
echo $date2->format('Y-m-d H:i:sP') . "\n";

$date2->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date2->format('Y-m-d H:i:sP') . "\n";

$date2->setTimezone(new DateTimeZone('UTC'));
echo $date2->format('Y-m-d H:i:sP') . "\n";

echo $date2->getTimestamp() . "\n";
Run Code Online (Sandbox Code Playgroud)

在这里我们得到:// [编辑] …

php timezone datetime unix-timestamp

7
推荐指数
2
解决办法
7492
查看次数

Symfony2:getScheme不返回'https'

在控制器中,我一直在使用方法getSchemeAndHttpHost来构建另一个控制器的url.

一切都运行顺利,直到我需要通过https.我使用getSchemeAndHttpHost函数获得的所有URL仍然是http.做了一些故障排除,结果是当我用https和http请求页面时,getScheme函数总是返回http.

我错过了什么 ?

我怎么知道我的控制器是通过http还是https?

编辑 - 更多信息

  1. 我确保使用有效的证书运行测试.
  2. 如果我在Request对象中运行isSecure方法,我总是得到假.

https reverse-proxy symfony

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

symfony2中的Mongodb设置 - 配置文件中的"预期数组,但得到了字符串"

我做我的第一个步骤,MongoDB的symfony的2.4,按照手册的说明这里.在成功设置并运行mongodb服务器之后,我尝试使用以下指令生成我的第一个getter和setter:

php app/console doctrine:mongodb:generate:documents AcmeDemoBundle
Run Code Online (Sandbox Code Playgroud)

但我得到的只是这个错误信息:

[Symfony\Component\Config\Definition\Exception\InvalidTypeException] 
Invalid type for path "doctrine_mongodb.connections.default_database". 
Expected array, but got string 
Run Code Online (Sandbox Code Playgroud)

这似乎是我的冲突配置:

# Doctrine Mongo DB Configuration
doctrine_mongodb:
  connections:
    default:
      server: mongodb://localhost:27017
      options: {}
    default_database: test_database
    document_managers:
      default:
        auto_mapping: true
Run Code Online (Sandbox Code Playgroud)

即:

default_database: test_database
Run Code Online (Sandbox Code Playgroud)

一个默认数据库应该是一个数组,这听起来很奇怪.无论如何我试过这个

default_database: [ test_database ]
Run Code Online (Sandbox Code Playgroud)

并得到此其他错误消息:

[Symfony\Component\Config\Definition\Exception\InvalidConfigurationException]
Unrecognized options "0" under "doctrine_mongodb.connections.default_database"
Run Code Online (Sandbox Code Playgroud)

这篇关于mongdb doctrine配置的帖子提供了很多关于更高级选项的信息.我试过另一个数据库名称:

default_database: hello_%kernel.environment%
Run Code Online (Sandbox Code Playgroud)

没有更多运气(收到第一条错误消息).

知道我做错了什么吗?任何提示都将受到欢迎!谢谢.

php mongodb symfony doctrine-orm

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