php - 从php执行其他几个php脚本

时间:2011-04-26 13:55:37

标签: php invoke

从PHP脚本,是否可以使用不同的GET变量执行另一个PHP脚本?

我有一个基本上像这样工作的脚本(伪代码):

// GENERATE STUFF
$ids = fetch_from_database();

foreach($ids as $id)
{
    $command = "wget http://someserver.com/php_script.php?id=$id > output_$id";
    exec($command);
}

由于几个原因,我需要摆脱wget,并在本地执行此操作。没有wget,实现上述目标的最佳方法是什么?

我已经尝试了include,但它不喜欢同一个文件包含两次或其他内容。 Exec无法获取$_GET个变量。

最好不要编辑“php_script”。

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

我会复制&从我的脚本粘贴,我在我的框架中运行一些机器人;

# Executing The Script
$data = array();
$data['start'] = 0;
$data['end'] = 20;

$url = SITE_ROOT.CRONS_DIR.$found->path."/".$found->name.".php";

$response = curlPost($url,$data,3,TRUE);

if ($response){
echo "<pre>";
echo htmlentities($response);
}

curlPost功能

function curlPost($url, $postArray = NULL, $timeout=2, $errorReport=FALSE) {
    # PREPARE THE POST STRING
    if ($postArray != NULL) {
        $postString = '';
        foreach ($postArray as $key => $val) {
            $postString .= urlencode($key) . '=' . urlencode($val) . '&';
        }
        $postString = rtrim($postString, '&');
    }

    # PREPARE THE CURL CALL
    $curl = curl_init();
    curl_setopt( $curl, CURLOPT_URL,            $url         );
    curl_setopt( $curl, CURLOPT_HEADER,         FALSE        );
    curl_setopt( $curl, CURLOPT_POST,           TRUE         );
    ($postArray != NULL) ? curl_setopt( $curl, CURLOPT_POSTFIELDS,     $postString ) : '';
    curl_setopt( $curl, CURLOPT_TIMEOUT,        $timeout     );
    curl_setopt( $curl, CURLOPT_RETURNTRANSFER, TRUE         );

    # EXECUTE THE CURL CALL
    $htm = curl_exec($curl);
    $err = curl_errno($curl);
    $inf = curl_getinfo($curl);

    # ON FAILURE
    if (!$htm) {
        # PROCESS ERRORS HERE
        if ($errorReport) {
            echo "CURL FAIL: {$url} TIMEOUT={$timeout}, CURL_ERRNO={$err}";
            echo "<pre>\n";
            var_dump($inf);
            echo "</pre>\n";
            createLog("CURL FAIL: {$url} TIMEOUT={$timeout}, CURL_ERRNO={$err}");
        }
        curl_close($curl);
        return FALSE;
    }

    # ON SUCCESS
    curl_close($curl);
    return $htm;
 }

此代码允许我使用CURL执行脚本,然后继续运行另一个bot。

你可以循环第一个代码(在函数上方),这样你就可以运行多个(和不同的)php脚本而无需等待响应(或者你可以等待)。

我希望这会有所帮助。