【问题标题】:Can't Run a background PHP Script With Popen无法使用 Popen 运行后台 PHP 脚本
【发布时间】:2015-11-20 23:28:42
【问题描述】:

我有一个 PHP 代码需要在后台运行(没有 cronjobs 或类似选项),但我无法在后台调用它。我正在尝试以下方法:

$files = $_GET['files'];
$id = $_GET['id'];

pclose(popen("start /B D:\\server\\php\\php.exe D:\\server\\www\\whatever\\importat\\import.php?files=".$files."&id=".$id." 2>nul >nul", "r"));

但它永远不会运行。如果我手动运行 import.php ,它可以正常工作。

PS:我无法更改 import.php。

帮助?

【问题讨论】:

  • 你不能在网络上运行脚本吗?例如。 file_get_contents("http://www.link.to.script.com/import.php?params")
  • 在cmd中运行该命令是否有效?尝试打开错误报告,看看它是否返回任何错误。
  • @AndersAndersen 我正在尝试以这种方式运行脚本D:/server/php/php-win.exe "D:/path/to/progress_import.php?files=9&id=2",我在 CMD 中没有收到任何错误,但它也不起作用。使用file_get_contentsworks,但不要在后台运行,这就是脚本的全部目的。
  • 在 cmd 中使用 \ 而不是 / 也不会改变任何东西。
  • @MetalSonic 尝试查看,起初用户在此页面上贡献了php.net/manual/en/function.exec.php#86329 这是“Arno van den Brink”的一个也许你需要在你的命令中删除这个“2>nul >nul”

标签: php background-process popen pclose


【解决方案1】:

我得到了解决方案:

我正在做的是在批处理中调用 PHP 并使用 popen 启动它:

$phpBatch = "progress_import_".$idImport.".bat";
$myPhp = fopen($phpBatch, "w") or die("Error opening file!");
$batchContent .= "@echo OFF \n";
$batchContent .= "\"D:\\path\\to\\php.exe\" D:\\path\\to\\progress_import.php ".$idImport." ".$_SESSION['numberFiles']." ";
pclose(popen("start /B D:\\path\\to\\".$phpBatch."", "r"));

在我使用的progress_import.php 内部:

$id = $argv[1];
$numberFiles = $argv[2];

捕捉参数。

希望对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多