必须是通用的,不通用的做法就不用说
也就是说必须支持各个运行环境的。
比如jmail FSO等等这些组件。虽然开发中我们也许用不到这些组件
但我们现在是讨论判断服务器支持某自定义组件!除了修改PHP.INI外比如在一些虚拟主机上没有权限改PHP.INI那怎么办?所以说得有一个通用的
function objectinstall($Object){
$object_install=false;
$obj=new com($Object);
$xTestObj=is_object($obj);
if($xTestObj){$object_install=true;}
return $object_install;
}这个方法行不通,因为如果该服务器不安装该组件的话就出错了,而且这个是微软的东西,也并不通用当然还有extension_loaded这个,但是这个如果在PHP.INI并没有的包,也判断不出来所以大家都来讨论一下通用的吧
也就是说必须支持各个运行环境的。
比如jmail FSO等等这些组件。虽然开发中我们也许用不到这些组件
但我们现在是讨论判断服务器支持某自定义组件!除了修改PHP.INI外比如在一些虚拟主机上没有权限改PHP.INI那怎么办?所以说得有一个通用的
function objectinstall($Object){
$object_install=false;
$obj=new com($Object);
$xTestObj=is_object($obj);
if($xTestObj){$object_install=true;}
return $object_install;
}这个方法行不通,因为如果该服务器不安装该组件的话就出错了,而且这个是微软的东西,也并不通用当然还有extension_loaded这个,但是这个如果在PHP.INI并没有的包,也判断不出来所以大家都来讨论一下通用的吧
<?php
$inis = ini_get_all();print_r($inis);?>
你这个怎么判断?
汗!
function objectinstall($Object){
$object_install=false;
$obj=new com($Object);
$xTestObj=is_object($obj);
if($xTestObj){$object_install=true;}
return $object_install;
}
?>
<?php if(objectinstall("JMail.Message")==false){?><font class=red><b>×</b></font> (不支持)<?php }else{ ?><b>√</b> (支持)<?php } ?>比如这样的判断
但我开始说了这个方法行不通,因为如果该服务器不安装该组件的话就出错了,而且这个是微软的东西,也并不通用
你想判断哪些组件??是扩展还是COM。
function_exists扩展是否加载:
extension_loaded对象是否存在:
class_exists(类)
interface_exists
method_exists
property_exists
你说的这些我都知道,而且我说了extension_loaded这个如果在PHP.INI并没有的包,也判断不出来;
惟独他不行?
这就是通用的,如果创建 COM 不成功就出错~~~不知道你还要什么通用的?本身 PHP 不像 ASP 那样是基于 COM 组件的,所以 PHP 也没有特意要提供关于 COM 组件的功能完整的操作。你现在看到的 COM 组件的支持,只是一个 ext 而已。也就是用 C 调用 COM 包裹成 php ext 调用。这就好比非让一头耕地的牛拉磨一样,不是不行,而是不对~~
唉,碰上你这种较真的还真没什么办法~~给你个通用的吧~~~
<?php
function testCom($name) {
try {
$word = new COM($name);
return true;
} catch(Exception $e) {
return false;
}
}var_dump(testCom('word.application'));
var_dump(testCom('foo.bar'));
晕了~~~你是真不会还是抬杠呢?
加个 class_exists 就通吃了~~~<?php
function testCom($name) {
if(!class_exists('COM')){
return false;
}
try {
$word = new COM($name);
return true;
} catch(Exception $e) {
return false;
}
}var_dump(testCom('word.application'));
var_dump(testCom('foo.bar'));
第二,linux下不支持com
第三,支持com 时数据传参会有问题,据说不支持二维数组