【问题标题】:How to set proper PATH for proc_open如何为 proc_open 设置正确的 PATH
【发布时间】:2013-07-24 09:31:54
【问题描述】:

我有一段代码如下:

$process = proc_open(sprintf('node "%s"', $tmpfile), $desc, $pipes);

哪个产生

sh: node: command not found

我尝试在httpd.conf 中设置$PATHSetEnv,然后使用getenv('PATH') 回显它。输出实际上包含节点的路径。

我可以将pass 变量传递给proc_open,但我想避免这种情况,因为它是别人的代码。

有没有办法让我给它正确的路径?

我正在为 Mac OS X 运行 XAMPP 1.8.2。

【问题讨论】:

    标签: php apache xampp


    【解决方案1】:

    proc_open 允许您将环境变量传递给它。如果您的 PHP 生成进程的路径,这可能是最容易获取节点的方法。

    $env = array(
        'PATH' => '/usr/local/bin' //Path to node bin dir
    );
    
    $process = proc_open($command, $descriptorspec, $pipes, __DIR__, $env);
    

    【讨论】:

      【解决方案2】:

      在 $pipes 之后,您可以分配 CWD。你应该在这里传递它。在用php.ini文件设置cwd方面,我认为这是不可能的。

      您应该能够做到以下几点:

      $process = proc_open(sprintf('node "%s"', $tmpfile), $desc, $pipes, __DIR__);
      

      提供“node”可执行文件位于同一目录中。或者,您可以将“节点”移动到

      echo getcwd();
      

      虽然这通常有点乱。

      编辑: 您还应该能够避免使用 cwd 的别名或符号链接

      【讨论】:

      • 感谢有关符号链接的想法。此代码在服务器上运行良好,只是我想在不更改代码的情况下获得本地版本。
      猜你喜欢
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多