【问题标题】:Pass argument with path to command line executable with php将带有路径的参数传递给使用 php 的命令行可执行文件
【发布时间】:2014-02-10 20:42:57
【问题描述】:

我有一个简单的 hello world 命令行应用程序,我试图通过 php 执行它,但我不知道如何切换到应用程序的调试文件夹,然后运行可执行文件。到目前为止,我已经尝试使用popen 移动终端所在的位置,但是我这样做的方式似乎不正确,然后使用exec 执行命令。

这是我的 PHP 文件:

<?php
$loc = '/Users/dave/Library/Developer/Xcode/DerivedData/HelloWorld-akuofooecqboeybtsfalcrelvfjt/Build/Products/Debug';
$argv = "./HelloWorld j";
popen($loc, 'r');
echo exec($argv);

这是我的 C++ 命令行程序:

#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
    if( argc < 2 )
    { printf("Please enter a value \n");
        return -1;
    }
    std::cout << argv[1]<<"\n";
    std::cout << "Hello, World!\n";
    return 0;
}

调试文件夹所在的目录是/Users/dave/Library/Developer/Xcode/DerivedData/HelloWorld-akuofooecqboeybtsfalcrelvfjt/Build/Products/Debug,为了执行它,我使用了./HelloWorld x(请注意,如果HelloWorld 应用程序有空间,这将如何工作?)

当我从终端运行它时一切正常,所以 c++ 文件没有问题。

那么谁能告诉我如何从 php 执行这个应用程序?

【问题讨论】:

    标签: php c++ xcode executable


    【解决方案1】:

    在php中你可以通过system()函数执行命令:

    system('YOUR COMMAND - FOR EXAMPLE ./HelloWorld (in your path)');
    

    要获得结果,您可以将其放入变量中。

    $test=system("some command");
    var_dump($test);
    

    在你的情况下:

    system('PATH/HelloWorld j'); // runs your HelloWorld executable file
    

    另一种解决方案是使用shell_exec() 函数。以 php.net 为例:

    $output = shell_exec('ls -lart');
    echo "<pre>$output</pre>";
    

    每个人都有自己的优点和缺点。您可以在 php.net/following 链接中阅读更多关于上述功能的信息:

    shell_exec — Execute command via shell and return the complete output as a string

    system — Execute an external program and display the output

    【讨论】:

    • 这将如何工作?如果我不在正确的目录中时不使用系统,它不会给我答案。
    • 您必须将您的可执行应用程序放入预定义的目录中。例如在您的 PHP 应用程序的目录中。它的目录会动态变化吗?
    • 你可以轻松做到:system('PATH/HelloWorld j')
    • 不,但它不是在由Xcode 而不是我创建的目录中,因此将可执行文件移动到位于MAMP htdocs 中的我的php 目录可能会出现问题文件。
    • 路径有效,谢谢,我不知道你可以执行这样的可执行文件。如果您可以将其添加到您的答案中,那对于其他想知道答案的人来说会很棒。
    猜你喜欢
    • 1970-01-01
    • 2010-11-26
    • 2013-11-21
    • 2014-06-19
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 2017-10-07
    相关资源
    最近更新 更多