如何通过添加变量在后台运行文件

时间:2018-02-02 09:04:39

标签: php

嘿PHP开发人员我是新手。 今天我想在后台运行我的process.php文件,因为加载需要太多时间......这是我想要使用的代码。

$proc=new BackgroundProcess();
$proc->setCmd('exec php <BASE_PATH>/process.php hello world');
$proc->start();

我想添加这个ids=$postid&reaction=$reaction变量而不是hello world。 并希望通过process.php文件中的帖子接收它,如此

$id =$_POST['ids'];
$type = $_POST['reaction'];

我正在使用这个GitHub文件 https://github.com/pandasanjay/php-script-background-processer/blob/master/README.md

在做downvote之前回答我,我是PHP的新手。

2 个答案:

答案 0 :(得分:0)

您可以尝试exec()。如果你想传递参数,那就试试这个。

InputStream is = getContentResolver().openInputStream(data.getData());

Bitmap bitmap = BitmapFactory.decodeStream(is);

希望这对您有用:)

试试这个

//it will store logs to log_data.log
exec("php process.php $id $type >log_data.log &");

答案 1 :(得分:0)

一旦它不是HTTP请求,就无法访​​问$ _GET和$ _POST超全局。在这种情况下接收参数的正确方法是访问数组$ argv。参见官方文档:

http://php.net/manual/en/reserved.variables.argv.php

UPD:而且,如果你真的想将$ _GET / $ _ POST参数传递给通过shell执行的这个脚本,这是一个肮脏的伎俩:

$get_params_as_string = base64_encode(json_encode($_GET));
$proc=new BackgroundProcess();
$proc->setCmd("exec php <BASE_PATH>/process.php {$get_params_as_string}");
$proc->start();

并在process.php访问它:

$get_params = json_decode(base64_decode($argv[1]), true);

所以,我们刚刚从$ _GET数组创建了JSON。然后,我们知道JSON字符串包含特殊字符(如"{}等),并且为了避免处理转义和取消转义的问题,我们只需对此字符串进行编码作为base64。它保证我们在结果字符串中没有特殊字符。现在我们可以将此字符串用作单个参数,我们将其传递给shell命令(您的BackgroundProcess)。最后,在process.php中,我们可以从$ args [1]访问此字符串,然后从base64解码,然后从JSON解码为常规PHP数组。我们走了。

此解决方案仅用于教育目的,请不要在现实生活中使用。