我最近将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版,直到出现一些严重的补丁.你怎么看 ?还有其他选择
我正面临一个意外的行为,试图使用以下内容:
$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脚本发送带有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?任何的想法 ?
从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)
在这里我们得到:// [编辑] …
在控制器中,我一直在使用方法getSchemeAndHttpHost来构建另一个控制器的url.
一切都运行顺利,直到我需要通过https.我使用getSchemeAndHttpHost函数获得的所有URL仍然是http.做了一些故障排除,结果是当我用https和http请求页面时,getScheme函数总是返回http.
我错过了什么 ?
我怎么知道我的控制器是通过http还是https?
编辑 - 更多信息
我做我的第一个步骤,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 ×4
symfony ×2
datetime ×1
doctrine-orm ×1
email ×1
gmail ×1
https ×1
instanceof ×1
mongodb ×1
preg-replace ×1
smtp ×1
symfony-1.4 ×1
timezone ×1