为 系统Windows2003,512M内存的vps配置fastcgi+php支持,步骤如下
- 下载必要文件FastCGI扩展:http://www.iis.net/extensions/fastcgi (根据自己系统选择相应版本)
php文件包:http://windows.php.net/download这里选择下载VC9 x86 Non Thread Safe的zip压缩包,具体说明查看windows平台PHP版本选择说明
- 安装FastCGI扩展,同时将会拷贝相关到 “%windir%\system32\inetsrv”文件夹下,并注册成IIS的扩展。其中文件包括:
- fcgiext.dll – fastcgi处理程序
- fcgiext.ini – 配置文件
- fcgiconfig.js – FastCGI的控制脚本
解压php压缩包到指定目录(c:\webserver\php),并把其安装路径(c:\webserver\php)注册到系统变量PATH中,添加名为 PHPRC 值其php安装目录的系统变量
- 运行fcgiconfig.js配置脚本注册php-cgi.exe处理php文件,命令如下:
cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"c:\webserver\php\php-cgi.exe"
(fcgiconfig.js存在%windir%\system32\inetsrv目录下,为避免发生找不到脚本的错误,fcgiconfig.js可以使用其绝对路径,或进入其所在目录执行。如果想仅仅是为一个站点添加 php的处理功能可以在命令后添加 “–site:[siteId]” 参数)
修改php.ini
extension_dir="c:\webserver\php\ext"
fastcgi.impersonate = 1
cgi.fix_pathinfo=1
cgi.force_redirect = 0
配置回收php-cgi最大成功请求数
cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" -InstanceMaxRequests:10000
cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP"-EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000
其请求大小根据自己配置执行设定,但要保持InstanceMaxRequests小于或等于 PHP_FCGI_MAX_REQUESTS 。
参考:Configure the FastCGI Extension for IIS 6.0
产生要求填写ftp的原因很多是因为php脚本文件和执行php脚本者是不同用户ID造成。
看wordpress里wp-admin/includes/file.php决定使用文件系统方法的函数:
if( ! $method && function_exists('getmyuid') && function_exists('fileowner') ){
if ( !$context )
$context = WP_CONTENT_DIR;
$context = trailingslashit($context);
$temp_file_name = $context . 'temp-write-test-' . time();
$temp_handle = @fopen($temp_file_name, 'w');
if ( $temp_handle ) {
if ( getmyuid() == @fileowner($temp_file_name) )
$method = 'direct';
@fclose($temp_handle);
@unlink($temp_file_name);
}
}
但我们可以直接自定义决定使用的方法:
//wp-config.php底部追加下面代码
//其定义值可以为: 'direct', 'ssh', 'ftpext' (ftp方式)or 'ftpsockets'(Socket extension)
define('FS_METHOD', 'direct');
//修改目录权限默认是0755
define('FS_CHMOD_DIR',0751);
因此出现ftp时候,而且使用是虚拟主机大多可以通过上面设置解决特别是ftp也不能用时候。
相关(适合自己主机):WordPress 安装插件或升级要FTP信息的解决
今天用到basename 函数获取文件名称时,发现如果是中文的文件名返回只有后缀的空文件名(如:.pdf)
string basename ( string path [, string suffix] )
说明
给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名。如果文件名是以 suffix 结束的,那这一部分也会被去掉。
按照网站上找到说法是此函数依赖于区域设置,如果是多字节名称返回为空可以通过setlocale函数如下设置
<?php
setlocale(LC_ALL, 'zh_CN.UTF8');
// or any other locale that can handle multibyte characters.
?>
最好是修改服务器的区域设置来整体解决
最近在PHP官网上看到又有新版的PHP下载了,于是上去找找For Windows的版本,可是一看确傻眼了,一共给了四个版本,VC9 x86 Non Thread Safe、VC9 x86 Thread Safe、VC6 x86 Non Thread Safe、VC6 x86 Thread Safe,这让我这个菜鸟头疼啊,还好 PHP 官网提供下载的地方左边有个英文 choose 我看懂了,我估摸着就是如何来选择版本的意思吧,于是开始查字典及上网查找,终于看明白了具体意思,拿来做个备忘先。
一、如何选择 PHP5.3 的 VC9 版本和 VC6 版本
VC6 版本是使用 Visual Studio 6 编译器编译的,如果你的 PHP 是用 Apache 来架设的,那你就选择 VC6 版本。
VC9 版本是使用 Visual Studio 2008 编译器编译的,如果你的 PHP 是用 IIS 来架设的,那你就选择 VC9 版本。
二、如何选择 PHP5.3 的 Thread Safe 和 Non Thread Safe 版本
先从字面意思上理解,Thread Safe 是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式而耗尽系统资源。Non Thread Safe 是非线程安全,在执行时不进行线程(Thread)安全检查。
再来看 PHP 的两种执行方式:ISAPI 和 FastCGI。
ISAPI 执行方式是以 DLL 动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以 ISAPI 来执行 PHP,建议选择 Thread Safe 版本;
而 FastCGI 执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以 FastCGI 来执行 PHP,建议选择 Non Thread Safe 版本。
官方并不建议你将Non Thread Safe 应用于生产环境,所以我们选择Thread Safe 版本的PHP来使用。