Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP对服务器共享对象的多次调用?_Php_Apache_Pdo_Static_Scale - Fatal编程技术网

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

我想知道Apache上的PHP。在不同的州、不同的国家,不同的用户对服务器的多个调用是否可以并排进行…-共享内存

例如,如果我在PHP脚本中创建一个静态变量,并将其默认设置为
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服务器本身上

如果你是