Функции PHP password_hash () и password_verify () работают на localhost, но не на моем сервере [дубликат]

Делает мелкую копию. Но значения в этой мелкой копии указывают на исходные массивы / объекты, потому что они являются объектными ссылками.

Итак, скажем, у нас есть:

var orig = [ [1] ];

В памяти у нас есть:

                    +−−−−−−−−−−−−−+
[orig:Ref22157]−−−−>|   (array)   |
                    +−−−−−−−−−−−−−+        +−−−−−−−−−−−−−+
                    | 0: Ref84572 |−−−−−−−>|   (array)   |
                    +−−−−−−−−−−−−−+        +−−−−−−−−−−−−−+
                                           | 0: 1        |
                                           +−−−−−−−−−−−−−+

Теперь мы делаем:

var copy = orig.slice();

и имеем:

                    +−−−−−−−−−−−−−+
[orig:Ref22157]−−−−>|   (array)   |
                    +−−−−−−−−−−−−−+   
                    | 0: Ref84572 |−−−+
                    +−−−−−−−−−−−−−+   |
                                      |
                                      |    +−−−−−−−−−−−−−+
                                      +−−−>|   (array)   |
                    +−−−−−−−−−−−−−+   |    +−−−−−−−−−−−−−+
[copy:Ref54682]−−−−>|   (array)   |   |    | 0: 1        |
                    +−−−−−−−−−−−−−+   |    +−−−−−−−−−−−−−+
                    | 0: Ref84572 |−−−+
                    +−−−−−−−−−−−−−+

Обратите внимание, как ссылка на вложенный массив (показано здесь как «Ref84572», но мы никогда не видим реальных значений ссылок на объекты) был скопирован, но все же относится к одному и тому же вложенному массиву.

Вот доказательство, что оно мелкое:

var orig = [ [1] ];
var copy = orig.slice();
console.log("orig[0][0] = " + orig[0][0]);
console.log("copy[0][0] = " + copy[0][0]);
console.log("Setting copy[0][0] to 2");
copy[0][0] = 2;
console.log("orig[0][0] = " + orig[0][0]);
console.log("copy[0][0] = " + copy[0][0]);

Обратите внимание, что когда мы изменяем состояние вложенного массива, мы видим эту модификацию независимо от того, какой маршрут мы берем для ее получения (orig[0][0] или copy[0][0]).

19
задан Supuhstar 8 April 2014 в 02:23
поделиться

1 ответ

Новые password_* методы доступны только в PHP 5.5:

http://www.php.net/manual/en/function.password-hash.php

Взгляните на эту библиотеку, обеспечивающую прямую совместимость:

https://github.com/ircmaxell/password_compat

Вы можете использовать это, чтобы получить доступ к новым password_* методам, пока не сможете запустить PHP 5.5.

28
ответ дан jszobody 31 August 2018 в 18:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: