我自己的cli程序,在linux下能正常运行(带参数的),但用php的exec调用后却不能执行,
还有,返回的数组用isset测试不为空,输出时又没数据。
可以肯定的是linux与php均无问题,因为其他程序都正常,叫这一个。这是怎么回事?这种问题从哪个入手?从没遇到过。有点急,马上要提交源码了!!!!!!!!!!!!我有个软考的DS证书,应该不会被拘留吧,哈哈……

解决方案 »

  1.   

    权限是 -rwsr-sr-x,没问题的啊!但是,如果不带任何参数可以调用(参数是可选的),处理参数我用的是getopt_long。是否跟这些有关?
      

  2.   

    话说回来 php的exec下的操作不是一般的有问题,我以前试过测试个代码就是死活不能...最后只好放弃
      

  3.   

    楼主好歹把你 exec 那行程序贴出来呀。
      

  4.   

    代码不好贴啦,而且也不会有问题啦。
    我用php拼接的带参数的命令原模原样的复制在linux上运行是可以,而且得到了正确的输出。
      

  5.   

    权限设置为 -rwxr-xr-x把所有的错误信息打开,看看报什么错误!
      

  6.   

    楼主你太自信了。下面这两种用法,也许在命令行是一样的,但在 PHP 程序里,由于运行的身份和环境配置的差异,结果可能会不同:
    exec( 'test.php' );
    exec( 'php test.php' );
    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  7.   


    我也用网页登录的用户登录linux测试过,也是可以正常执行的。
      

  8.   

    不止是用户权限,还有运行环境,也可能有差异,所以要你把 exec() 那一行的代码贴出来呀。虽然真正的原因不一定在这里,虽然这不一定能解决你的问题,但你总不能让大家猜你的做法来判断原因吧?
      

  9.   


    $cmd1 = "./a.out -i 30 -p 2";
    $cmd2 = "./a.out -L 0 -i 30 -p 2";
    $cmd3 = "./a.out -L 3 -i 30 -p 2";exec($cmd1, $result, $ret);//可执行,且输出正确exec($cmd2, $result, $ret);//可执行,且输出正确exec($cmd3, $result, $ret);//不可执行,且isset($result) = 1, $ret = 11
    //$ret返回的值a.out程序返回的一个计数的值,正确的应该是$ret = 19。//$cmd1,$cmd2,$cmd3在linux下均可以运行,且是网页访问对应的用户在linux下运行的(不知道这个用户的专业术语就什么?)
      

  10.   

    补充下:exec($cmd3, $result, $ret);//不可执行,且isset($result) = 1, $ret = 11,print_r($result)时为空。
    //$ret返回的值a.out程序返回的一个计数的值,正确的应该是$ret = 19。
      

  11.   

    哦,还要补充一下:$cmd3 = "./a.out -L 3 -i 30 -p 2";
    //参数 -L 会导致a.out程序里走的是不同函数,会不会是C代码的某种方式与php某种处理方式的会导致某种问题啊?
      

  12.   

    几乎可以肯定是你的 a.out 在 -L 3 的情况下执行了某些犯禁的操作。BTW: 当 $result = false 的时候就会出现“isset($result) == 1 而且 print_r($result) 为空”的情况,这没有什么奇怪的。
      

  13.   


    无证程序员,哈哈。当 $result == false 
      

  14.   

    我也无证. 既然是cmd2没错的话 那就是"-L 3"干了啥不可告人的事.
    吐槽一下a.out Makfile都懒得写啊.
      

  15.   


    犯禁的操作???完全没这个概念,能详细点吗?什么样的操作是犯禁的操作?不过,我在a.out前面多输出一行字符串,问题就解决了。我是越来越糊涂了,极度费解!!!!!
      

  16.   

    其实我的本意是“做了那样一个赋值操作后”。如果用条件表达式来说的话,应该是 $result === false 更准确。如果只是满足 $result == false 这种条件,并不一定出现后面说的现象,比如 $result = 0 之后。不过确实是我表达的不够清楚。另外,确实无证 @_@
      

  17.   

    这只是一个含糊的说法。在命令行里直接执行,跟在 web 容器里加载运行,多少还是有些不同的。而运行结果的差异,肯定是碰巧触犯了这种不同之处。如果要进一步分析,就只能看 a.out 的源代码了。
    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  18.   

    “办“”证” “xxxxxxxx”
      

  19.   


    可能是cli程序中的一些操作没有权限,比如说读写文件。
      

  20.   

    cli启动和服务器启动php有理上一样, 但服务器多了一个服务器, 而cli则可自行设置输出, 运行参数之类等等, cli能实现的, 通过服务器去启动php也能实现。
      

  21.   

    cli启动和服务器启动php有理上一样, 但服务器多了一个服务器,
    ========================================
    cli启动和服务器启动php原理上一样, 但服务器多了一个服务器配置,  因为这个配置导致你执行cli得到不同结果。
      

  22.   

    前两个能执行成功,不应该是权限的问题。lz把你a.out的源程序贴出来看看?
      

  23.   

    估计是权限的问题,网页访问方式在LINUX下是WWW用户组,建议chown修改一下文件夹权限,再重新运行
      

  24.   

    我严重怀疑那2个程序员,只是背了XX的黑锅而已。铁道部不会傻B到找个作坊式的软件公司去写相关调度的软件。