PHP对服务器共享对象的多次调用?
我想知道Apache上的PHP。在不同的州、不同的国家,不同的用户对服务器的多个调用是否可以并排进行…-共享内存 例如,如果我在PHP脚本中创建一个静态变量,并将其默认设置为PHP对服务器共享对象的多次调用?,php,apache,pdo,static,scale,Php,Apache,Pdo,Static,Scale,我想知道Apache上的PHP。在不同的州、不同的国家,不同的用户对服务器的多个调用是否可以并排进行…-共享内存 例如,如果我在PHP脚本中创建一个静态变量,并将其默认设置为1,然后user1进入,它会变为2,然后几乎同时,user2进入,他是否看到值为1或2的静态变量 一个更好的例子是我在PHP中的这个类: class ApplicationRegistry { private static $instance; private static $PDO; private function
1
,然后user1
进入,它会变为2
,然后几乎同时,user2
进入,他是否看到值为1
或2
的静态变量
一个更好的例子是我在PHP中的这个类:
class ApplicationRegistry {
private static $instance;
private static $PDO;
private function __construct() {
self::$PDO = $db = new \PDO('mysql:unix_socket=/........');
self::$PDO->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
}
static function instance() {
if(!isset(self::$instance)) {
self::$instance = new self();
}
return self::$instance;
}
static function getDSN() {
if(!isset(self::$PDO)) {
self::instance();
return self::$PDO;
}
return self::$PDO;
}
}
这是一个具有静态PDO实例的单例。如果user1
和user2
同时命中服务器,它们使用的是不同的PDO实例还是相同的PDO实例
这对我来说是一个令人困惑的概念,我正试图思考我的应用程序将如何扩展
对服务器执行来自不同用户的多个调用(可能正在运行)
彼此相邻,在不同的州、不同的国家等)
共享内存
不会。每次Apache调用PHP脚本时,都会运行一个新的脚本实例
例如,如果我在PHP脚本中创建一个静态变量并设置它
默认设置为1
,然后进入user1
,它将更改为2
,并且
然后几乎同时,user2
进来了,他看到了吗
值为1
或2
的静态变量
如果两个用户以将脚本更改为2
的方式与您的脚本交互,他们将看到1
,并且只会看到2
。一切行动都是徒劳的
如果user1和user2同时命中服务器,则
他们使用不同的PDO实例,还是使用相同的实例
它们可以完美地击中它,同时你的思维也会被打乱,但是每个服务器请求都会产生一个新的Apache进程,该进程反过来会启动一个新的PHP进程,然后运行你的代码
这对我来说是一个令人困惑的概念,我正试图思考我的应用程序将如何扩展
您混淆了两个不同的概念:可伸缩性和加载时的PHP代码状态。对于Ruby和Java程序来说,这是你必须非常担心的事情,因为它们通常在服务器上运行
但PHP仅在发出Apache请求时运行。就这样。可伸缩性是您现在不应该太担心的事情。只需编写并创建一个您喜欢的应用程序。很快,您就会发现代码运行时出现的瓶颈
更新:由于您在评论中提到,您担心ID冲突,因为您没有使用MySQL的自动增量功能,这是一个问题。这可能会给您带来麻烦,但如果不看实际的代码,很难说
本例中使用MySQL的问题与PHP无关,而是坚持不自动递增id值。这是MySQL的一个优势&最好重构代码,将id创建的负担放在MySQL服务器本身上
如果你真的担心这一点&出于某种原因,你绝对不能为你的MySQL数据库设置auto-increment,考虑使用一个随机生成的MD5散列或类似的东西,而不是一个ID。或者可能与一个普通的数字ID相结合。这样,2个用户在同一时刻碰到服务器的几率和得到相同的ID的随机哈希值非常低。
对服务器执行来自不同用户的多个调用(可能正在运行)
彼此相邻,在不同的州、不同的国家等)
共享内存
不会。每次Apache调用PHP脚本时,都会运行一个新的脚本实例
例如,如果我在PHP脚本中创建一个静态变量并设置它
默认设置为1
,然后进入user1
,它将更改为2
,并且
然后几乎同时,user2
进来了,他看到了吗
值为1
或2
的静态变量
如果两个用户以将脚本更改为2
的方式与您的脚本交互,他们将看到1
,并且只会看到2
。一切行动都是徒劳的
如果user1和user2同时命中服务器,则
他们使用不同的PDO实例,还是使用相同的实例
它们可以完美地击中它,同时你的思维也会被打乱,但是每个服务器请求都会产生一个新的Apache进程,该进程反过来会启动一个新的PHP进程,然后运行你的代码
这对我来说是一个令人困惑的概念,我正试图思考我的应用程序将如何扩展
您混淆了两个不同的概念:可伸缩性和加载时的PHP代码状态。对于Ruby和Java程序来说,这是你必须非常担心的事情,因为它们通常在服务器上运行
但PHP仅在发出Apache请求时运行。就这样。可伸缩性是您现在不应该太担心的事情。只需编写并创建一个您喜欢的应用程序。很快,您就会发现代码运行时出现的瓶颈
更新:由于您在评论中提到,您担心ID冲突,因为您没有使用MySQL的自动增量功能,这是一个问题。这可能会给您带来麻烦,但如果不看实际的代码,很难说
本例中使用MySQL的问题与PHP无关,而是坚持不自动递增id值。这是MySQL的一个优势&最好重构代码,将id创建的负担放在MySQL服务器本身上
如果你是