我通常使用Linux作为PHP的开发平台。我的网站使用Red Hat服务器,我的公司生产环境中使用Red Hat和Fedora,而我在家用Ubuntu。我非常满意。不幸的是,我现在被要求在Windows上使用WAMP进行PHP开发,需要花费大量时间。
我认为这很不幸,因为我不断发现Linux支持但Windows不支持的东西。去年,实际上我们因为发现WAMP使用较早版本的PHP(这已通过将5.3移植到Windows解决)而延迟了一个项目。今天,我刚刚得知checkdnsrr
未能移植到Windows,而整个pcntl
库也不可用。
所以我的问题是:有没有地方告诉我关于PHP在Windows和Linux之间的当前差异?
我不是在寻找诸如此处的评论中发现的特殊情况(虽然那些内容也很好),而是想知道在Linux下可用但在Windows下不可用的哪些函数。
----------------------- 编辑 -------------------------
有两条评论/声明说checkdnsrr
在Windows的5.3版本下存在。技术上讲,这是正确的。PHP不会说此函数不存在。我不知道是否适用于所有安装程序或仅限于WAMP,但虽然它可能会说它能工作,但该函数在Windows下无法像Linux下那样工作。
--------------------- 更新 ----------------------
看起来这个问题没有一个好的答案,但我已经找到了一个解决方法,感谢下面的建议:
将此文件放在生产环境中。请记得对此进行某种形式的安全设置。
<?php print_r( get_defined_functions() ); ?>
然后在开发环境上运行此命令。它将输出所有仅适用于本地环境的函数。
$root = file_get_contents( "<path to server>/available.php" );
$root = preg_replace( "/\[[0-9]{1,4}\]\s=>\s/", ( '' ), $root );
$tmp = '"internal" => array';
$root = explode( "\n", substr( $root, strpos( $root, $tmp ) + strlen( $tmp ) + 1 ) );
array_shift( $root );
array_shift( $root );
$internal = get_defined_functions();
$internal = $internal[ "internal" ];
function trim_array( array $root )
{
$nroot = array();
foreach( $root as $key=>$value )
{
$value = trim( $value );
if( !preg_match( "/^[a-zA-Z_]*[aeiouy]+[a-zA-Z0-9_]*$/", $value ) &&
!preg_match( "/^[a-zA-Z_]*(md5|crc|n12|str|sqrt|ch[a-z]?r|dl|tnt|ftp|png)[a-zA-Z_]*$/", $value ) )
{
//echo "\n $key ";
}
else
{
$nroot[] = $value;
}
}
return $nroot;
}
$root = trim_array( $root );
$internal = trim_array( $internal );
$diff = array_values( array_diff( $root, $internal ) );
foreach( $diff as $key => $fname )
{
if( in_array( $fname, $root ) )
{
echo "[$key] => $fname <= foreign server only";
}
else
{
echo "[$key] => $fname <= local";
}
echo "\n";
}
checkdnsrr
在 PHP5.3 中已经可用于 Windows。 - Gordon