1

cronジョブで実行したいPHPスクリプトがありますが、毎秒または2秒ごとに実行する必要があります。(PHPファイルはopengraphを介してページのカバー写真を更新します)

そこで、以下のシェルスクリプトを書くことにしました。しかし、シェルスクリプトによって実行された場合、phpはどのように機能しますか?ブラウザから要求されたように正常に機能しますか、それとも何が起こりますか?セッションは機能しますか?

#!/bin/bash

while true; do
    /path/to/file.php
    sleep 1
done;

echo "Stopped" | mail -s "Cron script has stopped." mymail@domain.com
4

3 に答える 3

5

違いは、他のhttp固有のものが利用できないこと$_GETです$_POST。セッションも機能しません(なぜそれらが必要なのですか?)。明らかに、Cookieやヘッダーなどを設定することはできません。

それ以外は、「シェルの中に」いるという事実をほとんど無視できます。

詳細については、こちらを参照してください:http ://www.php.net/manual/en/features.commandline.differences.php

于 2013-03-13T09:52:23.463 に答える
2

ブラウザのすべての側面をPHPから取り除いてください。そうすれば、PHPはそのように動作します。セッションは取得されません(cURLを使用して呼び出し、Cookieを保存する場合を除く)。

何も得られない$_GETか、$_POST代わりに使用する必要があります$argsが、変数を渡さない場合、これは実際には関係ありません。

スクリプトの実行権限が付与されていることを確認する必要があります。それ以外の場合は、を使用してスクリプトを呼び出します/path/to/php /path/to/file.php

これらのリソースを見てください、彼らはあなたを助けるはずです。

http://www.php.net/manual/en/features.commandline.differences.php http://www.php.net/manual/en/features.commandline.php

于 2013-03-13T09:58:11.953 に答える
2

コマンドライン(CLI)からphpを実行すると、別の環境に入ります。複数の違い
があります

それらのいくつかは

Configuration

コマンドラインから実行する場合は、別のphp.iniファイルを実行します。(通常/etc/php5/php.ini

Permissions

Webでは、通常、ユーザーを使用してPHPを実行しwww-dataます。
コマンドラインから実行する場合、スクリプトは現在のユーザーとして実行されます。

Arguments

$_GET、、...スーパーグローバルにアクセスできなくなりまし$_POSTた。 代わりに、次のような新しいスーパーグローバルがあります。$_FILES
$argv$argc

Sessions

あなたはにアクセスできsessionません$_COOKIES

Relative Paths

スクリプトが使用するパスは、コマンドが開始された場所からの相対パスです。したがって、スクリプトで相対パスを
使用する場合は注意が必要です。./

例えば:

$ pwd 
/path/to/project/

$ cat app/script.php
<?php
echo getcwd(), PHP_EOL;

$ php app/script.php
/path/to/project

$ cd app
$ php script.php
/path/to/project/app

を使用して現在のディレクトリを取得できますgetcwd

于 2013-03-13T10:13:10.593 に答える