php exec 命令在zend studio中调试运行成功,但是在系统apache2.2中失败 没有任何错误提示,但是zend studio里面成功运行,郁闷阿,我觉得唯一可能是权限问题,如何才能让apache使用zend studio调试时的设置呢?也就是说,通过apache2执行php文件时,获得命令权限和相关设置呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 什么命令呢?apache安装时默认的系统服务用的是SYSTEM,有的地方权限比Administrators还要高的,大多数两者权限一致还有cli的环境变量和web不一样的 命令是rcsdiff, 是版本控制的mks里面的命令,用来获得文件两个版本区别的命令命令是rcsdiff -c -m -r1.23 -r1.24 xxxx/xxxx/yyy.zzz我试过绝对路径,试过cmd /c 绝对路径rcsdiff -c -m -r1.23 -r1.24 xxxx/xxxx/yyy.zzz,反正所有试过的在zend studio里面都成功,apache2里面就全都没有输出,返回"1"我都要疯掉了。能不能有什么办法把apache2配置成跟zend studio完全一样的环境呢?敬请赐教!! 出现这种情况一般是权限问题,尝试在执行你的命令前提升apache权限。 他们的php.ini一样么?他们的安全措施一样么? php.ini 大体一样这样说吧,对同一个php.ini,在CLI运行成功,Apache失败,如何能让Apache模拟CLI的环境,从而获得相应的权限呢? 先试试rcsdiff -h或者--help 哪个是显示帮助?看看有没有结果 嗯,我试过好多绝对正确而且有结果的rcsdiff命令了, 但是在apache中都没有任何output,命令状态返回值始终为1, 现在就是无法找到cli环境和apache重要的区别到底在哪里, 对比phpinfo也没有明显的区别,php中有没有其他命令可以显示更多系统环境信息或者当前登陆用户权限信息?改过apache服务用管理员启动,并且重启后执行,发现结果依旧另外有个想法,比如在linux中,输入一个字母,按Tab键,就会显示已经在环境变量中并且以那个字母开头的命令,在windows中,php中有没有类似的函数,就是说执行那个函数可以知道当前系统环境变量中存在的可执行命令.(我已经通过phpinfo还有打印_ENV比较过CLI和Web中的环境变量了,基本一致,并且均包含了与我想执行命令有关的路径和环境变量)不知道换成IIS再试试有没有转机,下周二上班了再试试 先切换到rcsdiff目录试试,或者把他的目录设成环境变量 试试shell_exec,有没有依赖项目或者配置文件,把所有dll copy到system32有没有用? 今天试过shell_exec了,情况同exec一样,cli成功,apache失败,将apache登陆账户改为当前管理员,问题依旧。崩溃了。实在不行就只有换到linux了。 兄台 遇到的问题 正是 我困恼我 几周的事情 我也快疯啦 我写啦个c的外部程序 在linux终端(./license 参数1 参数2)运行正常 ,但一到apache里面exec('命令',$output, $return) 和system 或者 shell_exec都出现上面问题 甚至 我换种方法 写了个php扩展 也是一样 在linux终端 用 php -r "echo get_extensions() ;"; 调用正常 ,但一到(php加载此扩展正常 extensions = license.so ) apache 里面运行 就出错得不到值 总是为1 , 郁闷! 若兄台 找到啦 解决的 方法 望告知 qq 278831970 #include <stdio.h> #include <math.h> #include <string.h> int main(int argc, char **argv) { char buffer[80]; char *str1 = "abcdefghi"; //strcpy(buffer, str1); //sprintf(buffer, "An approximation of Pi is %f\n", M_PI); //puts(buffer); //sprintf(buffer, "%s", argv[1]); strcpy(buffer, argv[1]); printf("%s",str1); // gcc -o tet tet.c //使用php的exe函数调用 $return_string=exec("/var/www/tet \"kkkjj\" ", $data, $ret); 此句在apache的web页面可以打印出来 printf("%s",buffer); // 同上 此句在apache的web页面打印不出来//// ????? 上面两句为什么 有不知道原因 return 0; } 我要疯了。。今天在linux搭建环境, 试了一下,问题跟windows上几乎可以说是一模一样最恼人的是,没有任何错误输出!!!请问谁知道能细化错误过程,不然这样子没有一点错误输出的话,完全就没有办法调试!!对,关键问题就是不知道apache环境里面到底是少了什么, 我在命令行下执行php xxx.php 也是成功的为什么网上相关资料又很少呢? 没遇到过这种问题display_errors = Ondisplay_startup_errors = Onlog_errors = Onerror_log = "D:/php.log"error_reporting = E_ALL<?phpini_set('display_errors', 1);error_reporting(E_ALL);?>打开所有错误信息试试 我知道我的错误原因了,我在windows中映射了一个网络上的文件夹到本地,取名为V:, 但是即使我让apache用管理员登陆,在apache中,却找不到这个V:,这个估计就是我的错误原因,所以得想办法让apache环境里面也映射这个网络文件夹为同样的V: 再次检查,发现在apache里面,dir 任何网络资源,都失败,而且用的还是域上的账户(本地具有管理员权限) 那让apache以cgi方式调用php试试 To super_ufo:这样用:exec('command'.' 2>&1',$output,$return); 你应该就可以看到你的错误信息了关键问题就是只要是apache环境下,映射的网络驱动器压根儿就不存在郁闷。 菜鸟请教一个PHP的问题 急!一个很简单的错误,帮忙找你下! 用一个方法来提交表单 那位PHP高手帮忙给这段程序写写注释?小弟急用,谢谢 pear的问题!! php问题 广州非小型黑暗公司招人 怎么在APACHE里面设定虚似目录,要修改什么文件内容 有没有php转换成asp的程序? 求大神帮我看看哪里出错了 visual studio 2008 怎么用呢? php 静态首页问题
还有cli的环境变量和web不一样的
改过apache服务用管理员启动,并且重启后执行,发现结果依旧另外有个想法,比如在linux中,输入一个字母,按Tab键,就会显示已经在环境变量中并且以那个字母开头的命令,在windows中,php中有没有类似的函数,就是说执行那个函数可以知道当前系统环境变量中存在的可执行命令.(我已经通过phpinfo还有打印_ENV比较过CLI和Web中的环境变量了,基本一致,并且均包含了与我想执行命令有关的路径和环境变量)不知道换成IIS再试试有没有转机,下周二上班了再试试
exec('命令',$output, $return) 和system 或者 shell_exec都出现上面问题 甚至 我换种方法 写了个php扩展 也是一样 在linux终端 用 php -r "echo get_extensions() ;"; 调用正常 ,但一到(php加载此扩展正常 extensions = license.so ) apache 里面运行 就出错得不到值 总是为1 , 郁闷!
若兄台 找到啦 解决的 方法 望告知 qq 278831970
#include <math.h>
#include <string.h> int main(int argc, char **argv)
{
char buffer[80];
char *str1 = "abcdefghi"; //strcpy(buffer, str1);
//sprintf(buffer, "An approximation of Pi is %f\n", M_PI);
//puts(buffer);
//sprintf(buffer, "%s", argv[1]); strcpy(buffer, argv[1]); printf("%s",str1);
// gcc -o tet tet.c
//使用php的exe函数调用 $return_string=exec("/var/www/tet \"kkkjj\" ", $data, $ret); 此句在apache的web页面可以打印出来 printf("%s",buffer);
// 同上 此句在apache的web页面打印不出来//// ????? 上面两句为什么 有不知道原因 return 0;
}
display_startup_errors = On
log_errors = On
error_log = "D:/php.log"
error_reporting = E_ALL<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>打开所有错误信息试试