Ответы пользователя по тегу PHP
  • Когда заливаю сайт на хостинг, то ломается кодировка, как решить?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых надо выяснить где у вас ломается кодировка. Попробуйте залить обычный хтмл файл, вывести какой-то текст через пхп, запросить и вывести какие-то текстовые строки из бд - какой вариант даст поломанную кодировку?

    Во вторых - проверить что установленно в пхп.ини в качестве default_charset (должно быть default_charset = "utf-8").

    В третьих, конечно же проверить кодировку подключения к бд, которая должна быть выставлена как utf8mb4.

    Ну и в четвертых - для использования мультибайт функций нужно установить mb_internal_encoding("UTF-8");
    Ответ написан
    3 комментария
  • Как вывести в переменную данные из file_get_contents?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) при чем тут "вывести в переменную данные из file_get_contents"?
    2) все выводится, ищите ошибку в другом месте
    3) Если вы получаете xml, то зачем вам регулярки, есть средства, предназначенные для работы с xml
    Ответ написан
    Комментировать
  • Генерация зеркального текста для печати настольных табличек - что лучше изображения или PDF?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Наилучший вариант, который вижу я:
    Делаете хтмл шаблон, с разметкой под принтер на А4, выводите все страницы в хром, контрол+пэ, выбираете печатать в пдф. Готово, вы великолепны!

    по сути там просто сложенный лист формата А4 (с обрезанными краями), но главное с зеркальной инфой на обеих сторонах.
    Не совсем понял. Где там зеркально что-то? Разве не перевернуто?
    Ответ написан
    5 комментариев
  • На какой технологии или плагине работает подгрузка блока контента на сайте?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Подскажите примеры плагинов
    Для чего плагины то? Для фотошопа?

    - при нажатии на ссылку категории, в меню слева, сначала подставляется ссылка в адресную строку, а потом подгружается блок с контентом и бок с меню слева. Верхний и нижние блоки не перезагружаются.
    Это называется SPA, так же работает например вк, фликер и еще куча сайтов.

    Есть задача ускорить загрузку страницы, разделив страницу на блоки, который будут подгружаться в определённой последовательности.
    Это не всегда ведет к увеличению скорости загрузки, и бОльшая часть таких сайтов имеет иные цели и более веские причины для этого, то есть это не сильвер буллет, а осознанный выбор под определенную задачу, где скорость отрисовки не самый важный показатель. Возможно в вашем случае достаточно будет подключить лэзи лоад, и оптимизировать другие параметры загрузки, вместо не совсем подходящего вам функционала (например, вполне понятно что текст хтмл содержимого занимает в байтах в стони раз меньше чем изображения, и логично что легче и эффективнее откладывать только загрузку картинок, а не кусков хтмля).
    Ответ написан
    Комментировать
  • Как конвертировать изображение в webp формат после загрузки на сайт?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Я изменил код на этот:
    Во первых, код принимает загрузку только жпег и пнг,
    во вторых, включите вывод ошибок, иначе будете до бесконечности гадать что не так,
    в третьих вполне возможно (и наиболее вероятно) что текущая версия гд на вашем сервере просто не поддерживает вебп.
    Для начала так:
    ...
    ini_set('error_reporting',E_ALL);
    ini_set('display_errors', 1);
            if (move_uploaded_file($_FILES['image']['tmp_name'][$tmp_i], $totalPath)) {
    							$image;
    							if ($ext == 'jpg' or $ext == 'jpeg') {
    								$image = imagecreatefromjpeg( $totalPath );
    							}
    							if ($ext == 'png') {
    								$image = imagecreatefrompng( $totalPath );
    							}
    							
    							if (isset($image)) {
    								
    								$imageWidth=imagesx($image);
    								$imageHeight=imagesy($image); 
    								$newImageWidth = 600;
    								$newImageHeight = ($newImageWidth * $imageHeight) / $imageWidth;
    								
    								$image = imagescale( $image, $newImageWidth, $newImageHeight);
    								
    								$logoWidth=imagesx($logoImage);
    								$logoHeight=imagesy($logoImage);
    								
    								imagecopy(
    								  $image,
    								  $logoImage,
    								  0, ($newImageHeight/2) - ($logoHeight/2),
    								  0, 0,
    								  $logoWidth, $logoHeight 
    								);
    								imagewebp( $image, $totalPath, 90 );
    
    								imagedestroy( $image );
    								imagedestroy( $logoImage );
    							}
    						}
    Ответ написан
  • Почему не работает cURL?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Но если воспользоваться точно таким же кодом на другом сервере VPS (хостинге) - то он отрабатывает нормально.
    Скорее всего хост занесен в спам лист, если принципиально работать именно с этого хоста - связываться с администрацией хостинга (хотя скорее всего им пофиг), или связаться с админами 5ka.ru с просьбой снять ограничения.
    Ответ написан
    1 комментарий
  • Как отследить какой элемент из select выбран?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    phpfaq.ru/newbie/na_tanke

    Сверху код не хочет отслеживать выбирание элементов select.
    Это вы не хотите читать доки, а код вообще ничего не хочет, он делает что ему говорят.
    <select name="select"> <!-- name -->
              <option value="one">One</option> <!-- value!!! -->
              <option value="two">Two</option>
            </select>

    if(isset($_POST['select'])){ // имя селекта, а не опции, опция имеет только значение
      if($_POST['select']=='one'){?>
         <div><?=$one?></div>
    <?php
      }
       else {?>
         <div><?=$one?></div>
    <?php
      }
    }
    Ответ написан
  • Почему не выводится текст echo?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    у вас там много конечно что не по уму, я так перечислю, а вы уже смотрите что делать (в идеале все исправить, конечно же).
    1) mysql_query: Данный модуль устарел, начиная с версии PHP 5.5.0, и удалён в PHP 7.0.0. Используйте нормальный PDO или mysqli драйвер бд.

    2) Используйте подготовленные выражения в запросах, а не дырявое решето вместо них...

    3) Используйте нормальный стиль форматирования и именования переменных, читайте PSR для ознакомления с принятым форматированием кода. Все эти $XP, $exp_in, $Lvls... Кровь из глаз...

    4) Сначала получайте все данные, затем выводите разметку, вставляя заранее вычисленные значения. Не делайте кашу из вычислений, запросов и вывода разметки.

    5) echo не требует скобок, хотя они и не влияют на его работу.

    6) Если что-то работает не так, как вы ожидаете - 99% где то в переменных не то, что вы думаете. По этому var_dump() ваш лучший друг на ближайшие 2-3 года.

    var_dump([$exp_in, $XP]);
    if($exp_in <= $XP){ 
    var_dump(1);
    ...
    var_dump(2);
    ...

    Тем более работа с БД выполняется успешно
    Как вы это проверяете?
    Ответ написан
    5 комментариев
  • Как правильно сделать запрос ajax на javascript?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    На сколько правильное решение сформировалось в голове,
    Достаточно стандартное решение

    и как правильно отправить запрос ajax именно на ванильном js?
    XMLHttpRequest или fetch, по сути разницы нет, единственно надо учесть что данные через фетч по умолчанию попадут в php://input, а не в $_POST, либо нужно формировать запрос с формДата в качестве отсылаемой структуры данных.

    получается можно и без бекенда решить задачу?
    Нет. Не понятно откуда такой вывод...
    Ответ написан
    4 комментария
  • Как написать функцию на php которая будет выводить js и html?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Скорее всего вам нужно что-то типа:
    function my_plugin_activate() {
      ob_start(); //если нужно в возвращаемом значении иметь строку
      include /path/to/html; //путь куда сохраните ваш "мой js + html"
      return ob_get_clean(); // если надо просто вставлять код, то 1 и 3 строки функции не нужны
    }
    Ответ написан
    1 комментарий
  • Как в PHP в классе свойствам назначать значения по умолчанию объекты.?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) Почему статика? В общем случае статические классы плохой тон, так как повышают неконсистентность системы и непредсказуемость поведения.
    2) Да, можно задать анонимный класс, но делать это в конструкторе.
    <?php
    class Curs{
      public $currencies;
        function __construct($curencyArray){
          $this->currencies =  new class($curencyArray){
            function __construct($arr){
              foreach($arr as $crn){
                $this->{strtolower($crn['code_cur'])} = (object)$crn;
              }
        	}
    	  };
       }
    };
    $currencies = [
        ['name_cur'=>'Рублей','short_cur'=>'₽','code_cur'=>'RUB','ratio_cur'=>1,'default_cur'=>1,'display_cur'=>1,],
        ['name_cur'=>'Dollar','short_cur'=>'$','code_cur'=>'USD','ratio_cur'=>1,'default_cur'=>1,'display_cur'=>1,],
        ['name_cur'=>'Euro','short_cur'=>'€','code_cur'=>'EUR','ratio_cur'=>1,'default_cur'=>1,'display_cur'=>1,],
        ['name_cur'=>'Pound','short_cur'=>'£','code_cur'=>'GBP','ratio_cur'=>1,'default_cur'=>1,'display_cur'=>1,],
        ['name_cur'=>'円','short_cur'=>'¥','code_cur'=>'JPY','ratio_cur'=>1,'default_cur'=>1,'display_cur'=>1,],
        ['name_cur'=>'元','short_cur'=>'Ұ','code_cur'=>'CNY','ratio_cur'=>1,'default_cur'=>1,'display_cur'=>1,],
      ];
    
    $curs = new Curs($currencies);
    var_dump($curs->currencies->usd);
    /*
    object(stdClass)#4 (6) {
      ["name_cur"]=>
      string(6) "Dollar"
      ["short_cur"]=>
      string(1) "$"
      ["code_cur"]=>
      string(3) "USD"
      ["ratio_cur"]=>
      int(1)
      ["default_cur"]=>
      int(1)
      ["display_cur"]=>
      int(1)
    }
    */

    или в любой другой конфигурации...
    Ответ написан
    Комментировать
  • Как вывести строки mysql в масив php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Смотреть логи, или выводить все что происходит в коде:
    ini_set('error_reporting',E_ALL); // выводим все ошибки и варнинги
    ini_set('display_errors', 1);
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // все ошибки соединениея и бд выводим
    $mysqli = new mysqli("localhost", "root", "", "testtest");
    $sth = $mysqli->prepare("SELECT * FROM test_eisenck WHERE id=?");// бинд не поддерживает ничего кроме "?"
    ...
    $arResult = $sth->fetch(); // читаем про фетч, а PDO::FETCH_ASSOC вообще от другого драйвера
    Ответ написан
    Комментировать
  • В чем ошибка Fatal error: Uncaught Error: Call to a member function prepare() on null in?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $link=mysqli_connect("localhost", "root", "", "temp");
    ...
    $sql = $pdo(?????)->prepare

    Зачем приведен класс PdoConnect не ясно, так как он в коде вообще не участвует...
    Ответ написан
    Комментировать
  • Как сохранять файл при отправке формы (в случае если форма не валидна)?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Самым логичным вариантом кажется валидация полей аяксом, и если все ок - засубмитить форму яваскриптом.
    Как вариант, все отправлять аяксом, и в случае успеха просто редирект на нужный роут, но в таком случае придется заморачиваться с файлами - ждать пока загрузятся, удалять если форма не валидна... Или гибридный вариант - отослать поля без файлов, если все ок - дослать аяксом файлы, потом редирект, имхо самый толковый вариант, как по логике, так и по ресурсам.
    Ответ написан
    Комментировать
  • Как преобразовать аудио-файл в нормальный mp3 на PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    https://github.com/PHP-FFMpeg/PHP-FFMpeg , библиотеку и сам ffmpeg надо устанавливать на сервер. Если у вас шаред хостинг, скорее всего облом.
    Ответ написан
    3 комментария
  • Как обработать запрос?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Хинт: var_dump($_POST);
    Хинт 2: ... name="areato" ... name="id" ... => $_POST['goclient'] (?????)
    Ответ написан
    Комментировать
  • Как генерировать красивый PDF с помощью PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    TL;DR: Если нужно точное совпадение с хтмл шаблоном - только хеадлесс хром, остальное достаточно сильно отличается от оригинала, в силу ряда проблем.

    Сталкивался ровно с такой же задачей пару раз, нормальных вариантов на самом деле всего 2:
    генерить на фронте через хтмл2пдф, или подобные библиотеки, работающие через канвас,
    или на бэке через хеадлесс хром.

    Естественно оба со своими нюансами. В первом случае минус в том что пдф по сути будет набором картинок скринов, со всеми вытекающими, типа разных размеров экрана и невозможности выделить например текст в готовом пдф.
    Во втором - надо ставить хедлес хром на сервер и соответственно из бэка отдавать ему сгенеренный хтмл, что несет свои трудности и приколы, зато на 99,9% совпадает с тем что вы отправляете на печать из хрома, и отладка и подгонка хтмл под формат в разы проще и удобнее. Кроме того, использование стилей и медиа запросов для печати открывает невероятную гибкость в плане работы с готовыми шаблонами (автонумерация, поля, колонтитулы етц). А, и забыл киллер фичу - оно выполняет жс, то есть если есть графики или какие-то элементы, выводимые через жс - то только хром, других вариантов просто нет.

    Что касается других библиотек (mpdf, FPDF, wkhtmltopdf) - все они сильно "плавают" в отличие от хрома, многие вещи в них просто невозможны, кроме того у некоторых есть хронические проблемы со шрифтами и кодировками... Возможно за последние 3 года с тех пор как я их пробовал что-то изменилось, но думаю часть проблем все равно осталась.
    Ответ написан
    4 комментария
  • Как преобразовать json string в php array с ключом - значением?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) Уберите всю эту хрень вывода под спойлер

    2)
    Если я делаю json_decode до закрытия curl оно выводит все элементы, если после то только последний
    какие элементы? Код давайте, явно вы там какой-то треш намутили.

    3)
    но выводит по сути не совсем то что мне нужно
    Как выводите так и получаете

    4)
    Как вывести это в нормальном варианте и в особенности убрать string()
    Зависит от того что вы хотите получить.

    5)
    Мне нужно сделать json_decode, но что бы оно вывело его двумя array с key => value
    Вы его и получили, то что вы его выводите через var_dump, не понимая что и зачем вы делаете, сути не меняет.

    6)
    я про то что у меня в 1 массиве есть подмассив например и я не могу просто фильтровать скажем по запятой
    array_walk_recursive()
    Ответ написан
  • Почему не передаётся значение в php из ajax запроса?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Так как вы не передаете заголовок с контент типом, пхп не понимает что это пост, и ловить надо поток инпута.
    var_dump(json_decode(file_get_contents('php://input', true)));
    Ответ написан
  • Почему не происходит отправка сообщений?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Всё работает,
    Очевидно нет

    в консоли ошибок нет,
    тоже вранье6249ec31e700f878953982.jpeg

    network показывает, что php успешно отправляет запросы,
    Да нифига подобного6249ec6c30b3a813115213.jpeg

    Перестань маяться херней, займись исправлением ошибок и проверкой работы по шагам - ошибки скрипта, ошибки запросов сети, ошибки пхп...
    Ответ написан