Attention! Current CAPTCHA need to the standard PHP sessions. «System Settings» -> «Sessions and Cookies» -> «session_handler_class» clean (make blank).
[2014-03-12 09:55:25] (ERROR @ ...../core/components/modcaptcha/php-captcha.inc.php: 295) PHP warning: imagefttext() [function.imagefttext]: Could not find/open font
$fonts = array( dirname(__FILE__).'/fonts/VeraBd.ttf', dirname(__FILE__).'/fonts/VeraIt.ttf', dirname(__FILE__).'/fonts/Vera.ttf');
if($response->isError()){ $result = $response->getMessage(); } else{ $result = 'true'; }
if($response->isError()){ $result = false; } else{ $result = true; }
&preHooks=`modcaptcha.preHook` &captcha_key=`mycaptcha`
<input type="text" name="mycaptcha"> [[!$modcaptcha? &captcha_key=`mycaptcha`]]
$code = $this->getProperty('code');
$code = $this->modx->request->parameters[$this->getProperty('method')][$key];
PS У меня версия modx 2.3.3 там modCaptcha не заработал. Пришлось подправить немного процессор «modcaptcha/web/check»,
Не понятно ошибка это была или раньше modProcessor подгружал в свойства переменные из глобальных массивов, но в версии 2.3.3 этого не происходит.
$key = $scriptProperties['captcha_key']; if(empty($scriptProperties['code'])){ $param = "_".strtoupper($method); if(isset($$param)){ $p = $$param; $scriptProperties['code'] = (!empty($p[$key]) ? $p[$key] : ""); } }
public function process(){ $key = $this->getProperty('captcha_key'); $method = $this->getProperty('method'); $code = $this->getProperty('code'); if(empty($code)){ $code = $this->modx->request->parameters[$method][$key]; } $session_code = $_SESSION[$key];
public function process(){ $key = $this->getProperty('captcha_key'); $method = $this->getProperty('method'); $code = $this->getProperty('code'); if(empty($code)){ $code = $this->modx->request->parameters[$method][$key]; } $session_code = $_SESSION[$key];
создал 2 поля ввода и вывод 2-х картинок всё с разными «captcha_key». Каждый экземпляр отработал независимо от другого. =)
$a = 111; class A { public function myfunc() { global $a; echo $a; } }
$session_code = (!empty($_SESSION[$key]) ? $_SESSION[$key] : '');
плохие глобальные переменные это $a = 111; class A { public function myfunc() { global $a; echo $a; } }
$_REQUEST: Замечание: Это 'суперглобальная' или автоматическая глобальная переменная. Это просто означает что она доступна во всех контекстах скрипта. Нет необходимости выполнять global $variable; для доступа к ней внутри метода или функции.
Где тут глобальные переменные которые «плохие»? ))
$this->modx->request->parameters[$method][$key];
Почему $_SESSION это не плохо, а $this->modx->request->parameters[$method][$key] плохо?
<?php $_REQUEST['mykey'] = '123'; $method = 'REQUEST'; $key = 'mykey'; echo $modx->request->parameters[$method][$key];
123
$scriptProperties['method'] = 'GET'; $modx->runProcessor('modcaptcha/web/check', $scriptProperties, array( 'processors_path' => $path.'processors/', ))
function __construct(modX & $modx,array $properties = array()) { $this->modx =& $modx; $this->setProperties($properties); }
public function setDefaultProperties(array $properties = array()) { $this->properties = array_merge($properties,$this->properties); return $this->properties; }
$code = $modx->request->getParameters($key, strtoupper($method));
Легко! Код в консоли: $_REQUEST['mykey'] = '123'; $method = 'REQUEST'; $key = 'mykey'; echo $modx->request->parameters[$method][$key];
по умолчанию $method задан в вашем же процессоре и его значение 'REQUEST'
Сессия одна на все области видимости скрипта.
И опять работа с глобальной переменной… Кто бы сомневался.
<?php $method = 'REQUEST'; $key = 'action'; echo $modx->request->getParameters($key, strtoupper($method));
exec
Очевидно, что это рудимент, который, судя по истории процессора, даже никогда не использовался. Надо просто удалить будет.
Не понятно то, что вы вместо того чтобы развивать компонент доказываете мне то чего нет. =)
Я лишь хотел понять причину почему $_SESSION можно, а $_REQUEST нельзя.