转移到PHP55后,我遇到了一个非常奇怪的问题。
我有一个本地工作环境,并在PHP上部署。遵循Google发送的有关迁移到PHP55的说明:
要利用这些新功能,请找到您的“app.yaml”文件 改变读取的行 运行时:php到 运行时:php55
新功能将在本地自动启用 开发服务器,一旦你的应用程序在生产中 部署。你可以在任何时候切换回旧的运行时 通过恢复您的配置来确定接下来两个月的时间 app.yaml文件。某些功能(如cURL支持)可能需要 附加配置以便启用。*
我遇到了着名的Error establishing a database connection
错误。
只要我在我的app.yaml
文件中将PHP55还原为PHP,错误就会消失,网页会再次加载。
非常感谢任何反馈。如果需要,我可以分享wp-config.php。
以下是app.yaml中的条目:
申请:sxxxx-xxxxx 版本:5 运行时:php55 api_version:1 线程安全:是的
处理程序: - url:/(..(htm|html|css|js))$ static_files:\ 1 上传:。。(htm | html | css | js)$ application_readable:true
- url: /wp-content/(.*\.(ico|jpg|png|gif))$
static_files: wp-content/\1
upload: wp-content/.*\.(ico|jpg|png|gif)$
application_readable: true
- url: /(.*\.(ico|jpg|png|gif))$
static_files: \1
upload: .*\.(ico|jpg|png|gif)$
- url: /wp-admin/(.+)
script: wp-admin/\1
secure: never
- url: /wp-admin/
script: wp-admin/index.php
secure: never
- url: /wp-login.php
script: wp-login.php
secure: never
- url: /wp-cron.php
script: wp-cron.php
login: admin
- url: /xmlrpc.php
script: xmlrpc.php
- url: /wp-(.+).php
script: wp-\1.php
- url: /(.+)?/?
script: index.php
=============
这是我未更改的wp-config.php,它与app.yaml中的php一起使用,但在app.yaml中使用php55,给我错误:
if(isset($ _ SERVER ['SERVER_SOFTWARE'])&& strpos($ _ SERVER ['SERVER_SOFTWARE'],'Google App Engine')!== false){
/** Google App Engine Settings */
define('DB_NAME', 'sadhusanga');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', ':/cloudsql/sadhu-sanga:gaura');
}
else
{
/** Local Settings */
define('DB_NAME', 'sadhusanga');
define('DB_USER', 'root');
define('DB_PASSWORD', 'xxxxxxxx');
define('DB_HOST', 'localhost');
}
答案 0 :(得分:0)
我会捅这个。
当Wordpress检测到您使用的是PHP> = 5.5时,它将使用MySQLi。请参阅https://github.com/WordPress/WordPress/blob/master/wp-includes/wp-db.php#L627了解我的意思。 WP尝试复制mysql_real_connect
生成的套接字检测,并且使用现有的DB_HOST
配置可以正常工作;但是,在将主变量移动到NULL
之后,它将主变量保留为空字符串而不是socket
。 mysqli_real_connect
需要NULL或" localhost"使用套接字连接时的主机名。请参阅http://php.net/manual/en/mysqli.real-connect.php了解我的意思。
在WP套接字检测后对变量执行var_dump
给我们:
array(4) {
["initial_host"]=> string(30) ":/cloudsql/project-id:instance"
["new_host"]=> string(0) ""
["port"]=> NULL
["socket"]=> string(29) "/cloudsql/project-id:instance"
}
我刚刚对我的GAE应用程序进行了测试,但由于主机名的空字符串,它确实引发了数据库连接错误。