php - выполнить несколько других php-скриптов из php - PullRequest
0 голосов
/ 26 апреля 2011

Можно ли из PHP-скрипта выполнить другой PHP-скрипт с другими переменными GET?

У меня есть скрипт, который в основном работает так (псевдокод):

// 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?

Я пытался включить , но не нравится, что один и тот же файл включен дважды или что-то в этом роде. Exec не может принимать $_GET переменные.

Предпочтительно, «php_script» вообще не нужно редактировать.

Ответы [ 2 ]

3 голосов
/ 26 апреля 2011

Использовать локон http://ru2.php.net/manual/en/book.curl.php

1 голос
/ 26 апреля 2011

Я скопирую и вставлю из моего скрипта, где я запускаю несколько ботов с ним в моей среде;

# 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

<code>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 "
\ n ";createLog ("CURL FAIL: {$ url} TIMEOUT = {$ timeout}, CURL_ERRNO = {$ err}");} curl_close ($ curl); вернуть FALSE;} # ON SUCCESS curl_close ($ curl); вернуть $ htm;}

Этот код позволяет мне выполнить скрипт с помощью CURL и перейти к запуску другого бота.

Вы можете зациклить первый код (над функцией), чтобы вы могли запуститьнесколько (и разных) php-скриптов без ожидания ответа (или вы можете подождать).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...