Все об экзаменах Zend.

Тема в разделе "PHP Pro", создана пользователем PHPCod3r, 4 июл 2011.

Статус темы:
Закрыта.
  1. PHPCod3r

    PHPCod3r

    Регистр.:
    7 июн 2010
    Сообщения:
    261
    Симпатии:
    25
    Как многие знают зенд дает возможность сдать экзамен на знание пхп
    и тем самым получить небольшой бонус при приеме на новую работу...
    Правда в России и Украине, эти экзамены не сильно распространены
    зато в некоторых западных странах, их нужно сдавать чуть ли не обязательно....
    Сами экзамены не сильно сложные, но содержат малоизвестные факты о пхп.
    Вот я и хочу обсудить в этой теме те вопросы, которые знают далеко
    не все, но которые могут понадобиться при прохождении экзамена.
    И по возможности дополнить их содежательными и полезными примерами
    из жизни...

    _http://static.tor.hu/read/PHP/The Zend PHP Certification Practice Test Book.pdf
    Один из тестовых вариантов экзамена.
    Вот пытаюсь воспроизвести пример 14 из главы 11, и что то выскакивают постояно ошибки
    там примерно такой код
    PHP:
     $f create_function('$a''return $a * {$_POST["t"]};');
     
    $f(10);
    Хотя какие там нужны кавычки понять сложно, потому что в книжке второй аргумент create_function открывается одинарной кавычкой
    а закрывается двойной, видимо опечатка.
    Я пробывал второй аргумент обрамлять и двойными кавычками и одинарными но с курли синтаксисом пример отказывается работать вообще выскакивают какие то такие ошибки
    Без курли синтаксиса, функции удается запустить в штатном режиме,но указаного в ответе выполнения кода нет .....
    Может кто знает в чем тут дело? (Я пол-дня с этим бился так ничего толкового и не вышло, так что помогите пожалуйста)
     
  2. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    проходил пару экзаменов тестов на какомто сайте- просто по проверке начальных знаний пхп. все провалил) нет образования прогера, код изучал по скриптам и мануалам как эти скрипты работают, а в этих самых экзаменах часто спрашивают точные определения, не каждый сразу скажет как рассшифровывается pear, и его роль в жизни прогера, или методы и функции которые не часто встречаются и что именно они возвращают. Хотя до некоторых ответов очень легко дойти при условии знания языка, как например creat_function-
    вторым параметром передаётся строка, и она будет выполнена как код, те должна быть валидным пхп. Ну, скажем, это тоже самое что и подстановка её в eval. Скорее вего том опечатка или есть задание- отыщите ошибки или сформируйте верный код:
    ведь
    'return $a * {$_POST["t"]};' - ошибка систаксиса {$_POST["t"]}- так нельзя обращатся с отдельными переменными. С вызовом функций- да, но там другая история)
    "return $a * {$_POST["t"]};" - тож ошибка будет, если переменные $a и $_POST["t"] будут пусты. Если нет- то всё нормально
    ...
    можно ещё исправить как
    'return $a * $_POST["t"];'- ошибки не будет
     
  3. kos1986

    kos1986 Постоялец

    Регистр.:
    29 окт 2007
    Сообщения:
    118
    Симпатии:
    61
    Вообще-то можно так обращаться к переменным, это сложный (фигурный) синтаксис
    http://www.php.net/manual/ru/language.types.string.php#language.types.string.parsing.complex
    Но дело то в том, что его можно использовать только в строках, как то: echo "{$_POST["t"]}";
    Точно опечатка, не может там быть фигурных скобок...
     
  4. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    PHP:
    $f create_function('$a''return $a * {$_POST["t"]};');
    $f(10);  
    {$var} или ${var} следует использовать внутри строки, чтобы произошлая корректная интерполяция переменной.

    в данном же случае никакой строки нет и тело функции воспринимается, как:
    PHP:
    function lambda($a)
    {
        return 
    $a * {$_POST["t"]};
    }
     
  5. PHPCod3r

    PHPCod3r

    Регистр.:
    7 июн 2010
    Сообщения:
    261
    Симпатии:
    25

    Парни спасибо, за пояснения, но сама задача из тестового экзамена зенд про другое, не хочу копипастить сюда все условие так как оно большое,его можно
    узнать скачав пдфку по ссылки выше, скажу только что там
    предлогают сделать иньекцию кода с использованием тернарного оператора, а от эта иньекция кода ну совсем не хочет работать не прикаких раскладах, ума не приложу что авторы имели ввиду, может
    у кого получиться ее осуществить?
    Очень бы хотелось увидеть пример, с creat_function когда такого
    рода иньекция возможна.

    P.S.
    Да еще вот тут

    http://leonid.shevtsov.me/ru/kak-ya-zend-sertifikaciyu-proxodil

    пишут
    Кто нить эти экзамены покупал? Может у кого есть вопросы от них, что то можно найти в сети, но наверники не все...
    Несколько полезных ссылок на тему

    http://habrahabr.ru/blogs/php/117688/
    Еще полезные ссылки
    http://webenterprise.ru/wp-content/plugins/download-monitor/download.php?id=2
    http://getmizanur.wordpress.com/2010/07/13/zend-php-5-certification-practice-test-1/
    http://zend-php.appspot.com/
    http://forums.zend.com/viewtopic.php?f=63&t=1202

    Уже такой халявы нет, а можно только за косарь баксов купить хз
    какой онлайн курс....
     
  6. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    PHP:
    $a 10;
    $_POST['t']= ' (eval(\'echo \\\'i kill you\\\';\')) ? 0 : 0';
    $f create_function('$a'"return $a * {$_POST["t"]};");
    $f(10);
     
    PHPCod3r нравится это.
  7. PHPCod3r

    PHPCod3r

    Регистр.:
    7 июн 2010
    Сообщения:
    261
    Симпатии:
    25

    Спасибо большое за пример, вот мальца его изменил
    PHP:
    $a =10;
    $p $_POST['t'];
    $f create_function(''"return $a * $p;");
    $f();  
    //и пуляем постом
    //t=(print_r(ini_get_all()))?0:1
    //тернарный оператор тут можно опустить, так тоже будет работать
    //t=print_r(ini_get_all())

    Вообщем понятно что когда в креайте фанкшен у нас второй аргумент
    в двойных кавычках, то переменные берутся из вне....
     
Статус темы:
Закрыта.