質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.37%

PHP errorを解決したい

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 774
退会済みユーザー

退会済みユーザー

前提・実現したいとこ
wordpressをアップグレードしたら、function.phpに異常がみられたので解決方法を教えてください。
現在発生している情報だけでなく、元の補足情報に記載してあるphpそのものが怪しいとおもっております。(大変申し訳ございませんが、もし現在の発生しているバグ以外で怪しい箇所がありましたら記載していただけると助かります。)
よろしくおねがいします。

発生している問題・エラーメッセージはこちら
Parse error: syntax error, unexpected T_FUNCTION in /home/users/(省略) on line 66

該当のソースコードはこちらです
65/**
66* Adds a function to run in the task queue when it is next 'run()' and returns
67 * a promise that is fulfilled or rejected with the result.
68*
69* @param callable $task Task function to 'run'.
70*
71* @return PromiseInterface
72*/

補足情報ソースコードはこちらです。こちらがfunction.phpの全ての情報です。
<?php
namespace GuzzleHttp\Promise;

/**

  • Get the global task queue used for promise resolution.
  •  
  • This task queue MUST be run in an event loop in order for promises to be
  • settled asynchronously. It will be automatically run when synchronously
  • waiting on a promise.
  •  
  • <code>
  • while ($eventLoop->isRunning()) {
  •     GuzzleHttp\Promise\queue()->run();
  • }
  • </code>
  •  
  • @param TaskQueueInterface $assign Optionally specify a new queue instance.
  •  
  • @return TaskQueueInterface
    */
    function queue(TaskQueueInterface $assign = null)
    {
    static $queue;

if ($assign){
$queue = $assign;
} elseif (!$queue){
$queue = new TaskQueue();
}
return $queue;}

/**

  • Adds a function to run in the task queue when it is next 'run()' and returns
  • a promise that is fulfilled or rejected with the result.
  •  
  • @param callable $task Task function to 'run'.
  •  
  • @return PromiseInterface
    */
    function task (callable $task) {
    $queue = queue();
    $promise = new Promise ($queue, 'run');

$queue->add (function () use ($task, $promise){

try{

$promise->resolve ($task() );
} catch (\Throwable $e) {
$promise->reject($e);
} catch (\Exception $e) {
$promise->reject($e);
}
return $promise;
}

/**

  • Creates a promise for a value if the value is not a promise.
  •  
  • @param mixed $value Promise or value.
  •  
  • @return PromiseInterface
    */
    function promise_for?($value);{

if ($value instanceof PromiseInterface) {

return $value;

}

// Return a Guzzle promise that shadows the given promise.
if (method_exists($value, 'then')); {
$wfn = method_exists($value, 'wait') ? [$value, 'wait'] : null;
$cfn = method_exists($value, 'cancel') ? [$value, 'cancel'] : null;
$promise = new Promise($wfn, $cfn);

$value->then([$promise, 'resolve'], [$promise, 'reject']);
return $promise;

}
return new FulfilledPromise($value);
}

/**

  • Creates a rejected promise for a reason if the reason is not a promise. If
  • the provided reason is a promise, then it is returned as-is.
  •  
  • @param mixed $reason Promise or reason.
  •  
  • @return PromiseInterface
    */
    function rejection_for($reason)
    {
    if ($reason instanceof PromiseInterface) {
    return $reason;
    }

return new RejectedPromise($reason);
};

/**

  • Create an exception for a rejected promise value.
  •  
  • @param mixed $reason
  •  
  • @return \Exception|\Throwable
    */
    function exception_for($reason)
    {
    return $reason instanceof \Exception || $reason instanceof \Throwable
    ? $reason
    : new RejectionException($reason);
    }

/**

  • Returns an iterator for the given value.
  •  
  • @param mixed $value
  •  
  • @return \Iterator
    */
    function iter_for($value)
    {
    if ($value instanceof \Iterator) {
    return $value;
    } elseif (is_array($value)) {
    return new \ArrayIterator($value);
    } else {
    return new \ArrayIterator([$value]);
    }
    }

/**

  • Synchronously waits on a promise to resolve and returns an inspection state
  • array.
  •  
  • Returns a state associative array containing a "state" key mapping to a
  • valid promise state. If the state of the promise is "fulfilled", the array
  • will contain a "value" key mapping to the fulfilled value of the promise. If
  • the promise is rejected, the array will contain a "reason" key mapping to
  • the rejection reason of the promise.
  •  
  • @param PromiseInterface $promise Promise or value.
  •  
  • @return array
    */
    function inspect(PromiseInterface $promise)
    {
    try {
    return [
    'state' => PromiseInterface::FULFILLED,
    'value' => $promise->wait()
    ];
    } catch (RejectionException $e) {
    return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()];
    } catch (\Throwable $e) {
    return ['state' => PromiseInterface::REJECTED, 'reason' => $e];
    } catch (\Exception $e) {
    return ['state' => PromiseInterface::REJECTED, 'reason' => $e];
    }
    }

/**

  • Waits on all of the provided promises, but does not unwrap rejected promises
  • as thrown exception.
  •  
  • Returns an array of inspection state arrays.
  •  
  • @param PromiseInterface[] $promises Traversable of promises to wait upon.
  •  
  • @return array
  • @see GuzzleHttp\Promise\inspect for the inspection state array format.
    */
    function inspect_all($promises)
    {
    $results = [];
    foreach ($promises as $key => $promise) {
    $results[$key] = inspect($promise);
    }

return $results;
}

/**

  • Waits on all of the provided promises and returns the fulfilled values.
  •  
  • Returns an array that contains the value of each promise (in the same order
  • the promises were provided). An exception is thrown if any of the promises
  • are rejected.
  •  
  • @param mixed $promises Iterable of PromiseInterface objects to wait on.
  •  
  • @return array
  • @throws \Exception on error
  • @throws \Throwable on error in PHP >=7
    */
    function unwrap($promises)
    {
    $results = [];
    foreach ($promises as $key => $promise) {
    $results[$key] = $promise->wait();
    }

return $results;
}

/**

  • Given an array of promises, return a promise that is fulfilled when all the
  • items in the array are fulfilled.
  •  
  • The promise's fulfillment value is an array with fulfillment values at
  • respective positions to the original array. If any promise in the array
  • rejects, the returned promise is rejected with the rejection reason.
  •  
  • @param mixed $promises Promises or values.
  •  
  • @return PromiseInterface
    */
    function all($promises)
    {
    $results = [];
    return each(
    $promises,
    function ($value, $idx) use (&$results) {
    $results[$idx] = $value;
    },
    function ($reason, $idx, Promise $aggregate) {
    $aggregate->reject($reason);
    }
    )->then(function () use (&$results) {
    ksort($results);
    return $results;
    });
    }

/**

  • Initiate a competitive race between multiple promises or values (values will
  • become immediately fulfilled promises).
  •  
  • When count amount of promises have been fulfilled, the returned promise is
  • fulfilled with an array that contains the fulfillment values of the winners
  • in order of resolution.
  •  
  • This prommise is rejected with a {@see GuzzleHttp\Promise\AggregateException}
  • if the number of fulfilled promises is less than the desired $count.
  •  
  • @param int   $count    Total number of promises.
  • @param mixed $promises Promises or values.
  •  
  • @return PromiseInterface
    */
    function some($count, $promises)
    {
    $results = [];
    $rejections = [];

return each(
$promises,
function ($value, $idx, PromiseInterface $p) use (&$results, $count) {
if ($p->getState() !== PromiseInterface::PENDING) {
return;
}
$results[$idx] = $value;
if (count($results) >= $count) {
$p->resolve(null);
}
},
function ($reason) use (&$rejections) {
$rejections[] = $reason;
}
)->then(
function () use (&$results, &$rejections, $count) {
if (count($results) !== $count) {
throw new AggregateException(
'Not enough promises to fulfill count',
$rejections
);
}
ksort($results);
return array_values($results);
}
);
}

/**

  • Like some(), with 1 as count. However, if the promise fulfills, the
  • fulfillment value is not an array of 1 but the value directly.
  •  
  • @param mixed $promises Promises or values.
  •  
  • @return PromiseInterface
    */
    function any($promises)
    {
    return some(1, $promises)->then(function ($values) { return $values[0]; });
    }

/**

  • Returns a promise that is fulfilled when all of the provided promises have
  • been fulfilled or rejected.
  •  
  • The returned promise is fulfilled with an array of inspection state arrays.
  •  
  • @param mixed $promises Promises or values.
  •  
  • @return PromiseInterface
  • @see GuzzleHttp\Promise\inspect for the inspection state array format.
    */
    function settle($promises)
    {
    $results = [];

return each(
$promises,
function ($value, $idx) use (&$results) {
$results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value];
},
function ($reason, $idx) use (&$results) {
$results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason];
}
)->then(function () use (&$results) {
ksort($results);
return $results;
});
}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2019/09/02 12:15

    (質問文は編集できます)質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。

    キャンセル

  • Orlofsky

    2019/09/02 15:20

    コードは https://teratail.com/help/question-tips#questionTips3-7 の [コード] に修正してください。

    キャンセル

回答 1

checkベストアンサー

0

Wordpressの何のファイルなのか探すのに苦労しました。
backwpupでしょうか。
ちゃんと最新版が入っているのでしょうか・・・?

function promise_for?($value);{

ここが怪しいですね。forのあとの「?」や「;」、これを誤って入れてしまったのでは。

function promise_for($value){

が正しそうです。

また、

function task (callable $task) {
    $queue = queue(); 
    $promise = new Promise ($queue, 'run');
    $queue->add (function () use ($task, $promise){
        try{
           $promise->resolve ($task() );
        } catch (\Throwable $e) {
           $promise->reject($e);
        } catch (\Exception $e) {
           $promise->reject($e);
        }
    });
    return $promise;
}

でしょうね。

https://github.com/inpsyde/backwpup/blob/d928c57196ae32a51a8a3ee16d0a6c3038091742/vendor/guzzlehttp/promises/src/functions.php#L42-L57

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る