码疯窝

SAE 本地PHP环境 extension_dir 失效

2014/09/05 00:51:30    分类: 技术随笔    2人评论 次浏览

今天把SAE的本地环境倒腾下来, 安装好运行wordpress, 竟然报错.
您的 PHP 似乎没有安装运行 WordPress 所必需的 MySQL 扩展。
查看php.ini无果, 一切正常.
运行phpinfo才发现问题.

Loaded Configuration File 	E:\sae\bin\php-5.3.8\php.ini 
extension_dir	                C:\php

php.ini 里面的extension_dir 竟然与 phpinfo 里面的不一致.
各种google无果, 于是开始动手看SAE启动源码.
php.ini 是根据 php.sae 临时生成的, 无论我怎么改. phpinfo 里面的 extension_dir 依然像磐石一样一变不变的.
google了几个小时, 束手无策之时, 却意外找到了原因. 在cmd里面运行 php -i 时出现

原来是 php.ini 出错.

disable_functions = 
disable_classes = 

查看SAE安装代码发现

function uploadDisabled()
{
	$rootdir = realpath(__DIR__.DIRECTORY_SEPARATOR."..").DIRECTORY_SEPARATOR ;
	$disablestr = @file_get_contents(SAE_CODE_DEPOSITION_ADDRESS.'?action=disabledfunc',false,$this->http_proxy) ;
	if($disablestr == false)
		return false ;

	//....
	//....
}

原理是 每次启动 apache 的时候, 都会去检测 //deploy.sae.sina.com.cn/?action=disabledfunc 然后 从里面更新 disable_functions, disable_classes 放到 \emulation\message.txt 里面.
然后再更新到php.ini 里面.
因为 //deploy.sae.sina.com.cn/?action=disabledfunc 不工作了, 竟然跳转到首页去了, 所以导致 php.ini 更新出错.
所以只是注释掉 core.function.php 1300行 临时禁用更新.

$this->update_sae->uploadDisabled() ;

然后把坏掉了的 \emulation\message.txt 内容改为

version 1.3.1
build 1201161234
http_port 80
https_port 443
disable_functions php_real_logo_guid,php_egg_logo_guid,php_ini_scanned_files,php_ini_loaded_file,readlink,linkinfo,symlink,link,exec,system,escapeshellcmd,escapeshellarg,passthru,shell_exec,,proc_terminate,proc_get_status,proc_nice,getmyuid,getmygid,getmyinode,putenv,getopt,sys_getloadavg,getrusage,get_current_user,magic_quotes_runtime,set_magic_quotes_runtime,import_request_variables,debug_zval_dump,ini_alter,dl,pclose,popen,stream_socket_client,stream_socket_server,stream_socket_accept,stream_socket_pair,set_file_buffer,stream_get_transports,get_headers,mail,openlog,syslog,closelog,apc_add,apc_clear_cache,apc_compile_file,apc_define_constants,apc_delete,apc_load_constants,apc_sma_info,apc_store,flock,pfsockopen,posix_kill,apache_child_terminate,apache_get_modules,apache_get_version,apache_getenv,apache_lookup_uri,apache_reset_timeout,apache_response_headers,apache_setenv,virtual,mysql_pconnect,memcache_add_server,memcache_connect,memcache_pconnect,mb_send_mail,socket_create,socket_create_pair,stream_wrapper_restore,mb_send_mail
disable_classes SQLiteDatabase,SQLiteResult,SQLiteUnbuffered,SQLiteException

重启sae, 大功告成.

只想说被SINA坑了一个晚上, 一整晚上都以为是服务器哪里配置出问题了, 却没想到原因竟然在这里.

继续查看有关 技术随笔的文章

2个访客评论

  1. SINA1045857613

    手工点赞~

    qweqwe Reply
    • Gcaufy

      第一位来自搜索引擎的用户, 感动啊.

      qweqwe Reply