Ответы пользователя по тегу PHP
  • Каковы Возрастные ограничения в программировании?

    zenden2k
    @zenden2k
    PHP & C++ programmer
    Нет, даже не пытайтесь. В 27 лет надо быть минимум тимлидом или архитектором. Никто не будет ждать, пока вы наверстаете упущенное. На рынке и так переизбыток кадров, толпы программистов с опытом месяцами ищут работу, куда вы лезете-то?
    Нет вы конечно можете устроиться в контору "Сайты от Маги", но у кого вы будете набираться опыта, у таких же, как вы?
    Ответ написан
    5 комментариев
  • Как сделать якорь-ссылку без #?

    zenden2k
    @zenden2k
    PHP & C++ programmer
    Навешайте на ссылки обработчики, крутите страницу куда надо и меняйте адрес с помощью history api.
    Ответ написан
    Комментировать
  • Как передать через PHP CURL данные в "php://stdin"?

    zenden2k
    @zenden2k
    PHP & C++ programmer
    Вам надо запускать новый процесс PHP и как-то передавать туда данные.
    Чтобы вариант через curl работал, нужно, чтобы скрипт читал php://input а не php://stdin
    Ответ написан
    Комментировать
  • Какой делать выбор ученику закончивший 11 класс?

    zenden2k
    @zenden2k
    PHP & C++ programmer
    >не буду учиться выпрут нафиг от туда
    Вы слишком высокого мнения о российских вузах. На самом деле многие бездельники дотягивают до выпуска.
    Я бы порассказывал вам историй... но не буду.
    Я учился не в самом плохом техническом вузе Санкт-Петербурга. И поверьте что там на 70% была халтура. Халтура как со стороны студентов, так и преподавателей. Преподаватели делают вид, что преподают, студенты делают вид, что учатся. Хотя тут тоже многое зависит от вашего желания. Я впитывал, как губка, все знания, которые мне встречались на пути. И совсем не жалею о потраченных годах.
    И да, программировать на по большому счету и не учили. Как-то предполагалось, что писать код мы научимся сами.
    Помимо фундаментальных наук, баз данных и т.д., нам пытались впарить: технологии промышленного производства ПО (которые вроде бы используются в компаниях с мировым именем, не знаю, не проверял), основы тестирования ПО, писать тест кейсы, спецификации и HLD (хз где это нужно), методологии разработки ПО (всякие scrum, agile, waterfall и т.д.), многопоточное программирование и синхронизация, основы построения операционных систем (всякие там планировщики задач в ос, RTOS, примитивы синхронизации (дедлок, race, инверсии приоритетов и т.д.)), теория формальных языков и компиляторов (самый мой любимый предмет, после матлогики), защита информации (криптография), сети и телекоммуникации (протоколы, сети, сетевое оборудование, кабели, разъемы xD), программирование для микроконтроллеров, электроника, разработка процессоров, VHDL....
    Я уже вижу как вы это всё изучаете самостоятельно онлайн. Не, конечно, чтобы делать сайтики на php, это всё знать не надо, но вы ведь хотите стать программистом, ведь так? Да даже если по большому счету это мало где пригодится, всё равно это весьма интересно и очень расширяет кругозор. А так называемые "технологии" (языки, библиотеки, фреймворки) вы всегда успеете выучить.
    А хабр не является отражением действительности, серьезные разработчики не сидят на хабре и обходят его стороной, здесь собираются любители скругливать уголки на CSS.

    >и там не будет друзей таких которые вечерам тебя просят выйти на улицу мешая тебе заниматься самообразованием за компьютером.
    Вы сказали, что будете жить в общежитии. Думаете, там кто-то вам даст заниматься самообразованием?
    Я жил в общежитии. Правда не в общежитии айтишного факультета, а вперемешку.
    И там было много быдла, в т.ч. приезжих из Казахстана и Киргизии, которым лишь бы "покурить анашу".
    Мне трудно было не только сосредоточиться на самообразовании, а даже просто заснуть нормально.
    В зависимости от вашего характера, вы можете втянуться в "общажную жизнь" или нет.
    Со мной этого, слава богу, не произошло. Потому что я не поддаюсь никакому влиянию и знаю, чего хочу.

    Ну Киргизия - это днище, конечно, бегите оттуда.
    Ответ написан
    Комментировать
  • Как заполнить PDF?

    zenden2k
    @zenden2k
    PHP & C++ programmer
    На самом деле, вопрос не так прост, как кажется.
    После долгих мучений я так и не нашел идеального варианта.
    Почти все решения, имеющиеся в инете, имеют проблемы с юникодом.
    И тут проблема может быть не только в кодировке, а и то, что в pdf файле могут отсутствовать шрифты для нужных букв, или буквы отображаются каким-то нестандартным образом.
    Почти все портят pdf файл или поддерживают далеко не все файлы (например защищенные или запакованные файл). Тут уж как повезет.
    Еще решение зависит от того, нужно ли вам, чтобы поля оставались редактируемыми, или нет.
    Если поля вы оставите редактируемыми, то может оказаться, что скажем значение в поле правильное, а отображается неправильно. Или наоборот, отображается правильно, а редактируется неправильное значение. Или вообще не отображается (например, в гугл хроме)
    Все усложняется, если в форме есть комбобоксы, радиобаттоны и т.д.

    Сперва надо узнать список полей программой pdftk:
    pdftk samplex.pdf dump_data_fields

    Вот мои варианты:

    Вариант с zend1
    нужен патченный zend pdf.php https://drive.google.com/file/d/0B_RKTUl10DcrOF9uZ...
    весь архив с zend1 https://drive.google.com/file/d/0B_RKTUl10DcrbV8wN...

    set_include_path(implode(PATH_SEPARATOR, array(
        realpath('./zend1/library/'),//the path
        get_include_path(),
    )));
    require "Zend/Loader/Autoloader.php";
    $autoloader = Zend_Loader_Autoloader::getInstance();
    
    $pdf = Zend_Pdf::load('form.pdf');
    $pdf->setTextField("name","value");
    $pdf->save('outputfile.pdf');


    Вариант с FPDM:
    $pdf = new FPDM('template.pdf');
    $pdf->Load(array("field" => "value"), false); // second parameter: false if field values are in ISO-8859-1, true if UTF-8
    $pdf->Merge();
    $pdf->Output();


    Вариант с xfdf файлом:
    function createXFDF($file,$info,$enc='UTF-8'){
        $data=
            '<?xml version="1.0" encoding="'.$enc.'"?>
    <xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
        <fields>';
        foreach($info as $field => $val){
            $data.='
            <field name="'.$field.'">';
            if(is_array($val)){
                foreach($val as $opt)
    //2013.01.17 - Jon Hulka - all non-ascii characters get character references
                $data.='
                <value>'.mb_encode_numericentity(htmlspecialchars($opt),array(0x0080, 0xffff, 0, 0xffff), 'UTF-8').'</value>';
            }else{
                $data.='
                <value>'.mb_encode_numericentity(htmlspecialchars($val),array(0x0080, 0xffff, 0, 0xffff), 'UTF-8').'</value>';
            }
            $data.='
            </field>';
        }
        $data.='
        </fields>
        <ids original="'.md5($file).'" modified="'.time().'" />
        <f href="'.$file.'" />
    </xfdf>';
        return $data;
    }
    
    $pdf = new FPDM('template.pdf', 'fields.fdf');
    $pdf->Merge();
    $pdf->Output();

    Вариант с программой pdftk:
    pdftk formfile.pdf fill_form fieldinfo.fdf output outputfile.pdf flatten

    Если убрать flatten поля останутся редактируемыми.
    fdf файл имеет формат:
    %FDF-1.2
    %,,oe"
    1 0 obj
    <<
    /FDF << /Fields [
    << /T (CheckBox1) /V /A>>
    << /T (CheckBox2) /V /Off>>
    << /T (CheckBox3) /V /Off>>
    << /T (ComboBox1) /V (Option 1)>>
    << /T (ListBox1) /V (Item2)>>
    << /T (MultiLineText1) 
    /V (This is a Multi-line text box. Note that the text wraps around to the next line!)>>
    << /T (RadioGroup1) /V /Yes>>
    << /T (TextBox1) /V (Sample Text)>>
    ]
    /F (testfile.pdf)>>
    >>
    endobj
    trailer
    <<
    /Root 1 0 R
    >>
    %%EOF


    Вариант со встроенным javascript и скриптом addjstopdf.py (заполнение полей внутри просмотрщика с помощью javascript, поля остаются редактируемыми, работает в adobe reader, foxit, x-pdf, не работает в google chrome, едва ли работает в firefox, не работает в линуксе):
    <?php
    class Helper_Pdf {
    
        protected function build_pdf_javascript(array $fields) {
            $js = "app.alert({cMsg: \"Please fill out this form.\",cTitle: \"Title\", nIcon: 3});";
            foreach ( $fields as $key => $value) {
                if ( $value === null ) {
                    $value = '';
                }
                $encodedValue = json_encode($value);
                $encodedValue = str_replace("\\u", "\\\\u", $encodedValue);
                $keyEncode = str_replace("\\u", "\\\\u", json_encode($key));
                $js .= " if ( this.getField($keyEncode) != null) {
                this.getField($keyEncode).value=$encodedValue;
                }
                ";
            }
    
            return $js;
        }
    
        function escapeJs($js) {
            $js = str_replace("(","\\(",$js);
            $js = str_replace(")","\\)",$js);
            $js = str_replace("/","\\/",$js);
            $js = str_replace("\r\n","\\r\\n",$js);
            return $js;
        }
        public function generate(){
    
            $addJsToPdfFilePath = DOCROOT . "plugins/addjstopdf/addjstopdf.py";
            $sourcePdf = DOCROOT . "data/pdf/rental_contract.pdf";
            $embeddedJsPath = DOCROOT . "data/pdf/js/" . uniqid().".js";
    
            $fields =
            array(
            'field1' => 'value'
            'field2' => 'value2'
            );
    
            $embeddedJs = $this->build_pdf_javascript($fields);
            file_put_contents($embeddedJsPath,$this->escapeJs($embeddedJs));
            $outFilePath = DOCROOT . "data/pdf/temp/" .  uniqid().".pdf";
            $pythonPath = Kohana::$is_windows ? "c:\\Python27\\python2.exe" : "/usr/bin/python2";
            $command = "$pythonPath $addJsToPdfFilePath -f $embeddedJsPath $sourcePdf $outFilePath";
            $command = str_replace( "\\","/", $command);
            system($command);
        }
    }


    Все варианты, кроме javascript, плохо работают с юникодом.
    Ответ написан
  • SOAP client или запрос curl'ом, что лучше?

    zenden2k
    @zenden2k
    PHP & C++ programmer
    Почему бы не совместить? К примеру:

    class SOAPHttpSender extends SoapClient 
    {
        /**
        * Overrides the __doRequest method of SoapClient
        * 
        * @param $request Values to be sent via post/get method
        * @param $location WSDL 
        * @param $action Soap action
        * @param $version Soap version
        * @return $response Boolean
        */
        public function __doRequest($request,$location,$action,$version)
        {
            // Modify as per your requirement. For example, check out the Api-Key, user agent, soap action, etc. that we need to send in HTTP Header.
            $headers = array('Method: POST','Connection: Close','User-Agent: YOUR-USER-AGENT','Content-Type: text/xml','Api-Key:XYZ','SOAPAction: "'.$action.'"', 'SOAPVersion: "'.$version.'"'); 
    
            $ch = curl_init($location);
            curl_setopt_array($ch, array(CURLOPT_VERBOSE => FALSE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_POST => TRUE, CURLOPT_POSTFIELDS => $request, CURLOPT_HEADER => FALSE, CURLOPT_HTTPHEADER => $headers));
            $response = curl_exec($ch);
            curl_close($ch);
            return $response;
        }	
    }
    ?>
    Ответ написан
    3 комментария