4

PHPには、実行中のスクリプトで変更したり、別のスクリプトで読み取ったりできるグローバル変数がありますか?

4

9 に答える 9

12

いいえ、設計上、PHPは「シェアードナッシング」アーキテクチャです。つまり、同時に実行されているプロセス間、または次々に実行されているリクエスト間で何も共有されません。データを共有する方法はいくつかありますが、明示的に行う必要があります。

同じユーザーからの2つのリクエスト間で共有したいだけの場合は、セッションまたはCookieが最適です。

複数のユーザー間で共有する場合は、キャッシュ内の短期間の共有(memcachedなど)またはデータベースのようなより堅牢な、ある種の共有永続性が必要になる可能性があります。

いずれにせよ、データは実際にはリクエストごとに取得および再構築されています。セッションの場合は自動的に処理されます。

于 2009-09-16T23:09:04.733 に答える
5

実際には、共有メモリ、またはAPC(共有メモリ自体を使用している)を使用してこれを行うことができます。

于 2009-09-16T23:37:55.317 に答える
5

$ _SESSIONを使用できます。つまり、次のようになります。

script1.php

<?php
session_start();
$_SESSION['myVar'] = "something";
?>

script2.php

<?php
session_start();
echo $_SESSION['myVar'];
//something
?>
于 2015-05-01T21:47:47.833 に答える
1

スクリプト間でアクセスできるのは、スーパーグローバルの$_SESSION配列だけです。これは、配列に格納したものはすべてCookieに送信され、次のPHPスクリプトで取得できるためです。

グローバル変数は、スコープに関係なく、スクリプトでアクセスできることを意味します。これは、スクリプト間で送信できるという意味ではありません。

したがって、$ _ SESSION配列を使用して変数を転送する必要があります(これにより、クライアントコンピューターにCookieが格納されるため、その配列を介して機密情報を送信しないでください)、スクリプト間でPOSTまたはGETを実行して変数を送信できます。

于 2009-09-16T23:04:41.967 に答える
1

各リクエストは、独自のphpインスタンスによって処理されます。phpのグローバル変数には、同じphpインスタンス内からのみアクセスできます。ただし、me​​mchachedモジュールのようなものを使用して、異なるインスタンス間でデータを共有できます(通常、ファイルシステムにデータを書き込むよりも高速です)。

于 2009-09-16T23:05:39.140 に答える
0

PHPでのグローバル変数のもう1つの一般的な置換は、MySQLのようなデータベースの共有使用です(完全なものではありませんが)

于 2009-09-16T23:42:33.293 に答える
0

そうではありませんが、Cookieまたはセッションを使用して、ユーザーのブラウジングエクスペリエンスの期間中データを維持できます。または、情報がそれを超えて持続する必要がある場合は、データベースまたはディスク上のファイルに書き込むことができます。

于 2009-09-16T23:04:37.830 に答える
-1

グローバル変数はほとんどのプログラミングで悪いです。それらは、webappsのようなマルチスレッド/マルチユーザーシステムでは特に悪いです。避ける。(グローバル定数ではなく)グローバル変数を使用する必要がある場合は、更新を保護するトランザクションを使用してデータベースに配置します。

ただし、さまざまなスクリプトについて話しているので、本当に必要なのは、Django(python)やRails(ruby)などのよりアプリケーション指向の言語のWebアプリケーションフレームワークのようです。これらにより、Webリクエストを処理する多くの疎結合スクリプトではなく、コードをまとまりのあるプログラムのように考えることができます。

于 2009-09-16T23:58:55.833 に答える
-1

これを実行できる小さなライブラリ(〜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
于 2018-12-30T14:44:56.660 に答える