Я заметил, что если некоторые серверы (например, Apache2) не настроены на то, чтобы специально разрешить или запретить любое «кэширование», то сервер по умолчанию может отправить «кэшированный» ответ, даже если вы установите заголовки HTTP на «no- кэш». Поэтому убедитесь, что ваш сервер не «кэширует» что-либо до того, как он отправит ответ:
В случае Apache2 вы должны
1) отредактировать файл «disk_cache.conf» - для отключения кеша добавить директиву «CacheDisable / local_files»
2) загрузить модули mod_cache (в Ubuntu «sudo a2enmod cache» и «sudo a2enmod disk_cache»)
3) перезапустить Apache2 (Ubuntu «sudo service apache2 restart»);
Это должно сделать трюк, отключающий кеш на стороне сервера. Ура! :)
Это похоже на замену значения с помощью XOR . Хотя я не уверен в строках в PHP (обычно вы используете его для целых чисел или чего-то еще). Таблицу истинности XOR вы можете посмотреть здесь .
Интересно, что XOR
обратимо: A XOR B XOR B == A ... который не работает с AND
или OR
]. Из-за этого его можно использовать, как в вашем примере, чтобы поменять местами два значения:
$x ^= $y;
$y ^= $x;
$x ^= $y;
означает:
$x = $x ^ $y
$y = $y ^ ($x ^ $y) // = $x
$x = ($x ^ $y) ^ ($y ^ ($x ^ $y)) // = $y
^ - это побитовый оператор «исключающее ИЛИ». По-английски это читается как «либо, либо». Результатом будет 1, если и только если оба бита различаются:
1 ^ 0 = 1
1 ^ 1 = 0
0 ^ 0 = 0
Немного упрощая пример (и используя псевдокод):
$x = 0011 //binary
$y = 0010
$x = $x xor $y
//Result: x = 0001
//x = 0001
//y = 0010
$y = $y xor $x
//Result: y = 0011
//x = 0001
//y = 0011
$x = $x xor $y
//Result: x = 0010
Все, что сделал PHP, это обработал строку «a» и «b» как их целое число. эквиваленты.
В этом примере, когда вы используете символы ^, они приводятся к целым числам. Итак,
"a" ^ "b"
то же самое, что:
ord("a") ^ ord ("b")
, за одним исключением. В первом примере результат был возвращен в строку. Например:
"a" ^ "6" == "W"
из-за:
ord("a") ^ ord("6") == 87
и
chr(87) == "W"
Оператор ^ выполняет операцию XOR над битовыми значениями каждой переменной. XOR выполняет следующее:
a = 1100
b = 1010
xor = 0110
x - результат операции XOR. Если биты равны, результатом будет 0, если они разные, результатом будет 1.
В вашем примере ^ = выполняет XOR и присваивание, и вы меняете биты между двумя переменными $ x и $ y.
Подробнее здесь http://en.wikipedia.org/wiki/Xor_swap_algorithm
Оператор Th ^
- это побитовый оператор, то есть он работает с каждым битом своих операндов.
Он возвращает значение, в котором каждый бит равен 1
, если два соответствующих бита в операндах не равны, и 0
, если они равны.
Например:
100110110 ^ 010001100 = 110111010