Ответы пользователя по тегу PHP
  • Laravel не видит класс модуля ffmpeg-php?

    ArsenBespalov
    @ArsenBespalov
    Сам себе разработчик
    $movie = new \ffmpeg_movie($public_path);
    Ответ написан
  • Порекомендуйте, на чём сделать backend?

    ArsenBespalov
    @ArsenBespalov
    Сам себе разработчик
    Слишком все поверхностно, самый правильный вариант — это найти грамотного руководителя проекта (с бооольшим опытом разработки) и он уже сможет определиться на чем писать ваш проект и команду разработчиков ему же поручить, чтобы и набирал и руководил, иначе говно получится.

    А вам надо доверится этому человеку и тогда проект реально получится.
    Ответ написан
    Комментировать
  • Как в php разобрать PDF на картинки (по странично)?

    ArsenBespalov
    @ArsenBespalov
    Сам себе разработчик
    Можно перегонять PDF в Jpeg с помощью ImageMagick.

    Что-то типа этого:
    $im = new imagick();
    $im->setResolution(300, 300);
    $im->readImage($srcimg);
    $im->setImageFormat('jpeg');
    $im->setImageCompression(imagick::COMPRESSION_JPEG); 
    $im->setImageCompressionQuality(100);
    $im->writeImage($targetimg);
    $im->clear();
    $im->destroy();


    ну а в твоем случае что-то типа этого:
    $images = new Imagick("test.pdf"); 
    foreach($images as $i=>$image) {
        $image->setResolution(300,300);
        //etc 
        $image->writeImage("page".$i.".jpg"); 
    }


    только не тестировал, надо пробовать, короче, там ничего сложного нет.
    Ответ написан
    Комментировать
  • Почему не корректно работает путь к файлу?

    ArsenBespalov
    @ArsenBespalov
    Сам себе разработчик
    У вас слишком много ошибок в подходе к разработке, таким методом много не сделаешь, а если и сделаешь, то лучше бы не делал, НО! В самом PHP если что-то инклудите, то делать лучше это с использованием переменной __DIR__, которая задает полный путь до текущего файла. Что касается форм на сайте, то там уже необходимо использовать относительные пути. Сначала попытайтесь решить первые 2-е проблемы, а потом уже пеняйте на такие проблемы. И в локальном варианте у вас все работало только из-то того, что сервер был локальный, а не удаленный.
    Ответ написан
  • Почему не переходит по ссылке, в которой есть кириллица?

    ArsenBespalov
    @ArsenBespalov
    Сам себе разработчик
    Не используйте национальные символы в адресах и в именах файлов, я понимаю что хочется отечественного, но так лучше не делать по ряду причин, хотя бы из-за того, что кодировка в ОС и в коде скрипта может быть разной и тогда обращение к файлам может также вызывать ошибку, короче, никогда не делайте так.
    Ответ написан
    Комментировать
  • Как запретить загрузку файлов с расширением .php в битрикс?

    ArsenBespalov
    @ArsenBespalov
    Сам себе разработчик
    Вот здесь настраивается, но все зависит от кастомных модулей, в них могут быть уязвимости.

    nAyQq3Ki6vZPAZ.png
    Ответ написан
    2 комментария
  • Как через denwer осуществить email рассылку?

    ArsenBespalov
    @ArsenBespalov
    Сам себе разработчик
    Denver — это инструмент для разработчиков, а не для хостинга, по умолчанию все письма в Денвере складываются в текстовый файлик в одной из папок Денвера, однако на сайте раньше была инструкция о том как можно Денвер использовать как полноценный хостинг, в том числе каким образом настроить sendmail.

    www.denwer.ru/faq/other.html#h30-27 — Это про почту.

    Что касается CLI, то рекомендую почитать:
    https://habrahabr.ru/post/149545/

    Адрес интерпретатора php думаю сами найдете.

    Однако хочу заметить то, что с большой вероятностью все ваши письма будут валиться в СПАМ, из-за ряда настроек DNS, на основании которых почтовые сервера определяют честность отправителя.
    Ответ написан
  • Как показывать языковые версии сайта средставами php?

    ArsenBespalov
    @ArsenBespalov
    Сам себе разработчик
    Можно, но все по большей части зависит от CMS движка вашего сайта, если вы занимаетесь изобретением велосипеда, тогда вот вам с ходу набросанная реализация того, о чем вы говорите:

    class Language
    {
    	var $language = null;
    
    	public function __construct()
    	{
    		if (($list = strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']))) {
    			if (preg_match_all('/([a-z]{1,8}(?:-[a-z]{1,8})?)(?:;q=([0-9.]+))?/', $list, $list)) {
    				$this->language = array_combine($list[1], $list[2]);
    				foreach ($this->language as $n => $v)
    					$this->language[$n] = $v ? $v : 1;
    				arsort($this->language, SORT_NUMERIC);
    			}
    		} else $this->language = array();
    	}
    
    	public function getBestMatch($default, $langs)
    	{
    		$languages=array();
    		foreach ($langs as $lang => $alias) {
    			if (is_array($alias)) {
    				foreach ($alias as $alias_lang) {
    					$languages[strtolower($alias_lang)] = strtolower($lang);
    				}
    			}else $languages[strtolower($alias)]=strtolower($lang);
    		}
    		foreach ($this->language as $l => $v) {
    			$s = strtok($l, '-'); // убираем то что идет после тире в языках вида "en-us, ru-ru"
    			if (isset($languages[$s]))
    				return $languages[$s];
    		}
    		return $default;
    	}
    }


    Вот таким образом уже будете использовать:
    // Определяем для кого будет выбираться русский язык
    $site_langs = array('ru' => array('ru', 'be', 'uk', 'ky', 'ab', 'mo', 'et', 'lv'));
    
    // Опеределяем язык пользователя и выбираем нужный для сайта
    $user_lang = new Language();
    $current_lang = $user_lang->getBestMatch('de', $site_langs);
    
    // Отправляем пользователя на нужный язык для его локали.
    if ($user_uri == '/') {
        if ($current_lang != 'de') {
            header("Location: http://site.de/" . $current_lang . "/");
        }
    }
    Ответ написан
    Комментировать
  • Как сгенерировать таблицу с суммирующими колонтитулами?

    ArsenBespalov
    @ArsenBespalov
    Сам себе разработчик
    А в чем проблема? Если у тебя генерируются путевые листы автоматом с какого-то php скрипта, то и делай соответствующие обращения для генерации колонтитулов.

    Например:
    wkhtmltopdf --margin-top 35mm --margin-bottom 27mm \ 
     --margin-left 10m --margin-right 10mm \ 
     --header-html <путь,имя шапки.php> \ 
     --footer-html <путь,имя подвала.php?параметр=значение> \ 
     <путь,имя исходного файла.php?параметр=значение> \ 
     <путь, имя выходного файла.pdf>


    вот подобную строку уже генерируй другим php, bash или любым другим скриптом скриптом.

    А далее склеивай получившиеся PDF файлы в один.

    Склеить можно разными способами, вот пример на PHP с помощью библиотеки FPDF:
    $pdffile = "Filename.pdf";
        $pagecount = $pdf->setSourceFile($pdffile);  
        for($i=0; $i<$pagecount; $i++){
            $pdf->AddPage();  
            $tplidx = $pdf->importPage($i+1, '/MediaBox');
            $pdf->useTemplate($tplidx, 10, 10, 200); 
        }


    или с помощью GhostScript можно склеить:
    gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \ 
     -sOutputFile=<имя конечного файла.pdf> \ 
     <файл1.pdf> <файл2.pdf> <файл3.pdf> <...> <файлN.pdf>
    Ответ написан
  • Как так устроены ссылки на некоторых сайта?

    ArsenBespalov
    @ArsenBespalov
    Сам себе разработчик
    Это динамические страницы. Вам надо для начала приступить к изучению какого-либо языка, тогда станет ясно как делать подобное.

    Если вы хотите такое же применять на PHP, то допустим для Apache есть вот такая конфигурация .htaccess

    Options +FollowSymLinks
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]


    Ну а в index.php вам нужно будет весь остаточный путь парить под свои нужды.

    UPD

    FX-Mercury: ну допустим если вопрос стоит именно в том, чтобы не перезагружать страницу, то это AJAX технология + работа с историей браузера, тогда вам надо использовать что-то подобное:

    Работает в браузерах Chrome, Safari, FF4+ и IE10pp4+!

    Пример:
    function processAjaxData(response, urlPath){
         document.getElementById("content").innerHTML = response.html;
         document.title = response.pageTitle;
         window.history.pushState({"html":response.html,"pageTitle":response.pageTitle},"", urlPath);
     }


    Также можешь использовать windows.onpopstate для определения нажатия кнопок навигации браузера назад/вперед:

    window.onpopstate = function(e){
        if(e.state){
            document.getElementById("content").innerHTML = e.state.html;
            document.title = e.state.pageTitle;
        }
    };


    Для более глубокого изучения манипуляции с историей браузера читай MDN, там все расписано.

    Кстати, если надо что-то подобное использовать на IE7, то рекомендую смотреть в сторону history.js.

    Для тех, кто задается вопросом что такое IE10pp4+ — это Internet Explorer 10 версии и старше на Windows 8 Platform Preview 4 версии и старше
    Ответ написан
  • Почему PHP очень долго работает?

    ArsenBespalov
    @ArsenBespalov Автор вопроса
    Сам себе разработчик
    Проблема решена:

    1. Долгая авторизация по SSH и невозможность пользоваться Интернетом с сервера решилась заменой DNS провайдера, оказалось DNS не рабочие.
    2. Поменял формат логов Apache, т.к. выяснилось, что Apache даже с нормальными DNS тем не менее не может резолвить имена. Поставил чтобы писал в логи только IP адреса клиентов и тем самым скорость работы вернулась к прежней, даже стало работать чуть быстрее. Такие логи меня устраивают более чем, тем более что никогда не поздно преобразовать ip в имена посредством утилиты logresolve.

    В целом проблема оказалась на стороне провайдера. О своих приключения отписался в службу поддержки, посмотрим что они решат. Замечу что ничего подобного никогда не наблюдалось у Amazon. Почему всегда такое происходит с русскими компаниями, остается открытым вопросом.
    Ответ написан
    Комментировать
  • Почему не могу получить информацию со стороннего сайта по ссылке?

    ArsenBespalov
    @ArsenBespalov
    Сам себе разработчик
    Вот уж действительно не знаю, почему вы не получаете данные, код правильный, все работает как надо, данные получаются.
    Ответ написан
    Комментировать
  • Где найти хороший пример для обучения "регистрация/авторизация"?

    ArsenBespalov
    @ArsenBespalov
    Сам себе разработчик
    Хорошая авторизация или регистрация может быть хорошей лично для тебя по своему, кому-то хорошо будет то, что он сам напишет, кому-то хорошим будет использовать фреймворк.

    Нет супер универсального инструмента в этом плане. Все зависит от текущих требований.

    Могу только сказать, что лично для себя всегда и везде использую функцию crypt.

    Кстати есть отличная развернутая статья по паролям:
    php.net/manual/ru/faq.passwords.php
    Ответ написан
    Комментировать
  • Как решить проблему с сессиями в Drupal 7?

    ArsenBespalov
    @ArsenBespalov Автор вопроса
    Сам себе разработчик
    Да! Кстати, я нашел решение без модуля Session API. Не факт что это будет работать далеко и долго, но это уже сейчас решило проблему с анонимными сессиями. Достаточно добавить 0 пользователя, вот ссылка: https://www.drupal.org/node/1029506
    Ответ написан