PHPには、実行中のスクリプトで変更したり、別のスクリプトで読み取ったりできるグローバル変数がありますか?
9 に答える
いいえ、設計上、PHPは「シェアードナッシング」アーキテクチャです。つまり、同時に実行されているプロセス間、または次々に実行されているリクエスト間で何も共有されません。データを共有する方法はいくつかありますが、明示的に行う必要があります。
同じユーザーからの2つのリクエスト間で共有したいだけの場合は、セッションまたはCookieが最適です。
複数のユーザー間で共有する場合は、キャッシュ内の短期間の共有(memcachedなど)またはデータベースのようなより堅牢な、ある種の共有永続性が必要になる可能性があります。
いずれにせよ、データは実際にはリクエストごとに取得および再構築されています。セッションの場合は自動的に処理されます。
$ _SESSIONを使用できます。つまり、次のようになります。
script1.php
<?php
session_start();
$_SESSION['myVar'] = "something";
?>
script2.php
<?php
session_start();
echo $_SESSION['myVar'];
//something
?>
スクリプト間でアクセスできるのは、スーパーグローバルの$_SESSION配列だけです。これは、配列に格納したものはすべてCookieに送信され、次のPHPスクリプトで取得できるためです。
グローバル変数は、スコープに関係なく、スクリプトでアクセスできることを意味します。これは、スクリプト間で送信できるという意味ではありません。
したがって、$ _ SESSION配列を使用して変数を転送する必要があります(これにより、クライアントコンピューターにCookieが格納されるため、その配列を介して機密情報を送信しないでください)、スクリプト間でPOSTまたはGETを実行して変数を送信できます。
各リクエストは、独自のphpインスタンスによって処理されます。phpのグローバル変数には、同じphpインスタンス内からのみアクセスできます。ただし、memchachedモジュールのようなものを使用して、異なるインスタンス間でデータを共有できます(通常、ファイルシステムにデータを書き込むよりも高速です)。
PHPでのグローバル変数のもう1つの一般的な置換は、MySQLのようなデータベースの共有使用です(完全なものではありませんが)
そうではありませんが、Cookieまたはセッションを使用して、ユーザーのブラウジングエクスペリエンスの期間中データを維持できます。または、情報がそれを超えて持続する必要がある場合は、データベースまたはディスク上のファイルに書き込むことができます。
グローバル変数はほとんどのプログラミングで悪いです。それらは、webappsのようなマルチスレッド/マルチユーザーシステムでは特に悪いです。避ける。(グローバル定数ではなく)グローバル変数を使用する必要がある場合は、更新を保護するトランザクションを使用してデータベースに配置します。
ただし、さまざまなスクリプトについて話しているので、本当に必要なのは、Django(python)やRails(ruby)などのよりアプリケーション指向の言語のWebアプリケーションフレームワークのようです。これらにより、Webリクエストを処理する多くの疎結合スクリプトではなく、コードをまとまりのあるプログラムのように考えることができます。
これを実行できる小さなライブラリ(〜2 KB; <100行)を作成しました:varDx
データの書き込み、読み取り、変更、チェック、削除を行う機能があります。シリアル化を実装しているため、すべてのデータ型をサポートします。
使用方法は次のとおりです。
<?php
require 'varDx.php';
$dx = new \varDx\cDX; //create an object
$dx->def('file.dat'); //define data file
$val1 = "this is a string";
$dx->write('data1', $val1); //writes key to file
echo $dx->read('data1'); //returns key value from file