PHP无法执行创建的命令,但是exec()和system()正常工作

时间:2018-08-11 07:49:31

标签: php

我遇到了一个问题,PHP可以在Windows上正确执行CMD命令,但是当我创建要运行的自定义命令时,没有任何效果。

逻辑: 我想“ cd”进入目录,然后运行python脚本,该脚本将从网络上抓取数据并将其保存在csv中。 Python脚本工作正常。

PHP代码:

<?php

if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
    $keyword = $_POST['singleSearchTerm'];
    $filename = $_POST['singleFilename'];
    $settings = file('settings.txt', FILE_SKIP_EMPTY_LINES);
    $conda_path = $settings[0];
    $working_env = $settings[1];
    $script = "scrape.py";
    $url = "https://www.pinterest.com/search/pins/?q=";
    $current_dir = getcwd();

    // cd into path
    $cd_path = "cd " . $conda_path . "&& ";

    // activate env
    $activate_env = "activate " . $working_env . " && cd ";

    // run python script
    $pyCommand = $current_dir . "\\ps\\ " . " && python -W ignore ". $script . " --url " . $url . $keyword . " --fname " . $filename;

    // full command
    $full_command = $cd_path . $activate_env . $pyCommand;

    echo $full_command;

    // test - works fine
    exec("start notepad.exe");

    // doesn't do anything
    exec($full_command);

    // doesnt do anything
    system($full_command)
}

生成的命令: 加载上述PHP后,将生成以下命令:

cd C:\Users\da74\Anaconda3\Scripts && activate scrape && cd C:\MAMP\htdocs\pinscraper\ps\ && python -W ignore scrape.py --url https://www.pinterest.com/search/pins/?q=old --fname dat.csv

问题: 将以上命令粘贴到CMD中后,它将运行。但是,当它在PHP中使用exec()或system()传递时,它不会运行。

已测试: 经过测试:

exec("start notepad.exe");

,它会打开一个记事本窗口。我不知道出什么问题了。是隐藏空间吗?还是其他?

感谢您的帮助。 谢谢

1 个答案:

答案 0 :(得分:0)

我有使用NodeJS运行它的替代方法。

任何人都在寻找相同的问题,发现PHP在'&&'之后和之前留下了不寻常的空格,有时会无故断行。

为此,我安装了nodejs。然后使PHP逐行将每个var保存在设置文件中,并让nodejs形成一个使用'process'和exec运行的命令。它运行完美,只需要几行代码。