Ответы пользователя по тегу PHP
  • Как открыть сайт в кодировке w-1251?

    tomnolane
    @tomnolane
    профессиональный разработчик
    https://ru.wikipedia.org/wiki/Windows-1251

    В современных приложениях отдается предпочтение Юникоду (UTF-8). На 1 апреля 2019 лишь на 1 % всех веб-страниц используется Windows-1251.


    p.s. shapka.php это жесть....
    p.s.s. у вас сервер отдает в формате UTF-8 , посмотрите внимательнее в правой части в скриншоте
    p.s.s.s. используйте UTF-8 . Хорош извращаться
    Ответ написан
    6 комментариев
  • Require без ../?

    tomnolane
    @tomnolane
    профессиональный разработчик
    1) использовать composer
    2) composer использует PSR
    это типо что-то вроде этого:
    vendor\Autoloader.php
    <?php
    /**
     * PSR-4 Autoload without composer 
     */
    define('ROOT', __DIR__ . DIRECTORY_SEPARATOR);
    define('SRC', str_replace("vendor\\","",ROOT) . DIRECTORY_SEPARATOR); // тут я удаляю из пути папку, в которой лежит данный автозагрузчик. В моём случае это папка "vendor"
     
    spl_autoload_register(function ($class) {
        $file = str_replace('//', '/', str_replace('\\', '/', SRC .$class)) . '.php';
        if (file_exists($file)) {
            require_once $file;
        }
    });


    Структура проекта:
    папка[root]->
            папка[vendor]->Autoloader.php
            папка[cars]->Car.php
            index.php

    и далее делаете как хотите:
    idnex.php
    namespace kakoeto;
    
    require_once 'vendor/Autoloader.php'; // тут подключается автолоадер
    use Autoloader;
    
    use cars\Car as Car; // вот тут подключаете всё что хотите. Главное, чтобы название класса совпадало с названием php файла, а-ля Car.php
    
    .....
    ?>

    Вот тут почитайте
    Ответ написан
    Комментировать
  • Хороший фреймворк для разработки бота?

    tomnolane
    @tomnolane
    профессиональный разработчик
    botman на данный момент самый "лучший" (ИМХО), ибо не очень большой выбор. В целом, он не плох (если) хорошо изучить документацию. Я, например, ВК драйвер недавно сделал для него (скоро залью на гитхаб). Проблемы только с Телеграмм - если использовать сервер из РФ, он работать не будет. А так, в целом, очень неплохой. Лучше, я пока не встречал

    п.с. до него я написал трёх ботов "в ручную" (для ВК, Фейсбук и Web). Работают норм, но больше похоже на "костыли", и не очень удобно. А в botman "Hello world" в 39 строк кода, у меня выглядит так:
    <?php
    require_once 'vendor/autoload.php';
    
    use BotMan\BotMan\BotMan;
    use BotMan\BotMan\BotManFactory;
    use BotMan\BotMan\Drivers\DriverManager;
    use BotMan\BotMan\Cache\CodeIgniterCache;
    
    $config = [
        'facebook' => [
          'token' => 'EAAZAT6dcgYDQBAC6x7X******85SLSPF0BRCVeRPPgutgtfvZCkZC9lxnP5pYcRXtF0m7sOAliTEztGPR45cOxx3rZAMZBc9Mb9UhB62gBSG2kXTo7ldyk2fTquadMJQVY8nqKxiOakLXLUZBCSavncCljoe5IAZDZD',
          'app_secret' => 'b52517e****71b6afa76dca657',
          'verification'=>'my_example_veryfy_token',
        ],
        "vkontakte" => [
           "token" => "9af81c610faf0ea319*****d17b0b2b53b164ff3b18cc1b9d4e422fd15db046594139078"
        ],
        'telegram' => [
            'token' => '60176***:****fVCz43IblR72siiyfbebv7wgqCn8tc'
        ]
    ];
    
    DriverManager::loadDriver(\BotMan\Drivers\Vkontakte\VkontakteDriver::class);
    DriverManager::loadDriver(\BotMan\Drivers\Facebook\FacebookDriver::class);
    DriverManager::loadDriver(\BotMan\Drivers\Telegram\TelegramDriver::class); 
    
    $this->load->driver('cache');
    
    $botman = BotManFactory::create($config, new CodeIgniterCache($this->cache->file)); 
    
    $botman->hears('привет', function (BotMan $bot) {
        $bot->reply('Хай.');
    });
    
    $botman->fallback(function($bot) {
        $bot->reply('Чё ??? ...');
    });
    
    $botman->listen();


    UPD
    на этом фреймворке возможны проблемы с русским языком (кодировкой).
    Чтобы её решить, нужно использовать iconv
    iconv('utf-8', 'windows-1251', тут_ваш_ответ_сервера);
    Ответ написан
    1 комментарий
  • Как подделать HTTP_HOST?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Ответ написан
    Комментировать
  • Можно ли сделать так и на сколько это будет правильно???

    tomnolane
    @tomnolane
    профессиональный разработчик
    не думаю, что удачный вариант. я не создавал CMS'ки. Но пользовался в своё время wordpress и joomla (потом отказался от их использования).
    Объясняю почему не удачна мысль: у вас блок может иметь 5000 строк кода. Эта куча текстовой информации которая хранится в БД + проблема будет с SQL инъекциями, т.к. экранировать не получится вводные данные (либо слишком геморройно всё это добавить).
    Может проще - в БД хранить (условно) id блока. Например, если выбран id = 1, то в Landing Page загружается файл example.php с этим кодом. Если id = 2, то example2.php. А непосредственно править нужно в самом php файле... вроде так работают большинство CMS.... не думаю, что есть вариант получше...

    html код нужно хранить в файлах, не в БД
    Ответ написан
    5 комментариев
  • Как достать параметры gid?

    tomnolane
    @tomnolane
    профессиональный разработчик
    $res = json_decode($json); 
    foreach ($res->response as $array) 
    { 
        echo $array->gid. '<br />'; 
    }
    Ответ написан
    1 комментарий
  • Unknown column 'POP' in 'where clause' что за ошибка?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Mysql пишет: "я не знаю POP в (where) поле clause"
    т.е. вы делаете запрос в БД где хотите выбрать в поле clause значения, которые (равны) называются POP
    и он пишет: sorry I dont know wtf is POP
    напишите пример запроса сюда (запроса в БД)
    п.с. для всех - кто в будущем планирует задавать аналогичные вопросы: сразу в теле вопроса пишите свой код (часть кода, где появляется ошибка) и код вставляйте сюда:
    4b36892d9f5b479f86d4dce4f3ca6c8a.PNGОТВЕТ
    $sql = "SELECT * FROM section_song WHERE section='".$category."'";
    Ответ написан
    3 комментария
  • PHP Instagram API: как обойти лимит в кол-ве отдаваемых изображений?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Vit - верно подметил, посмотрите это:
    github /mgp25/Instagram-API
    возможно вам поможет (п.с. сам пользуюсь для постинга)
    Ответ написан
    6 комментариев
  • Как использовать метод users.search из ВК?

    tomnolane
    @tomnolane
    профессиональный разработчик
    .xml <- уберите из запроса

    <?php GET_http(String.Format("https://api.vk.com/method/users.search?" + request + "&offset=0&count=1000&fields=photo_id&access_token={0}", Settings1.Default.token)); ?>
    Ответ написан
    Комментировать
  • На что ругается PHP?

    tomnolane
    @tomnolane
    профессиональный разработчик
    daniyalov: на хостинге могут быть другие папки(пути) (не /usr/share/php) чем было до этого
    и /var/www/www-root/data/www/domain.com/ajax/sql.php а точнее domain.com напрягает - у вас же не domain.com ведь??
    Ответ написан
  • Как в пхп пишется повторяющаяся функция от даты/времени?

    tomnolane
    @tomnolane
    профессиональный разработчик
    cron
    ставите выполнение 1 раз в день, в php файле пишете то, что нужно сделать. в кроне указываете этот php и всё)
    и не надо ничего проверять)
    Ответ написан
    Комментировать
  • Есть ли способы спарсить facebook?

    tomnolane
    @tomnolane
    профессиональный разработчик
    из личного опыта: на данный момент (не через API) такое сделать (например через один компьютер + аккаунт) невозможно. В лучшем случае капчу будете ловить, а так скорее всего забанят аккаунт (как у меня).
    п.с. фейс использует около 100 000 методов для определения качества поста и куда его пихнуть (в ленте новостей, кому отобразить и т.д.) - и подумайте, сколько они создали методов для того, чтобы (а они ведь категорически против!!!) - чтобы их не спарсили??
    п.с.с. Прокси не поможет.

    возможно есть выход... как например с Instagram - его реверснули (оф. приложение для мобильника) - забрали оф. ID и SECRET приложения - и через него пользуются "закрытым" API (например постинг фото). Мне не интересно таким заниматься (реверснуть оф.приложение facebook для получения их ID и SECRET) ... но это путь возможно сможет вам помочь.

    на счёт инста: я как раз это использую в своём приложении CatPost. Т.е. через комп я могу постить фото в инст. (хотя официально это запрещено)
    Ответ написан
    Комментировать
  • Тематика курсовой работы?

    tomnolane
    @tomnolane
    профессиональный разработчик
    первое, вот -> моя программа CatPost написанная полностью на c# (wpf) которая использует оф. API (в т.ч. и ВК)
    так что - на C# МОЖНО работать с API (да и наверно с любым языком ООП или Функциональным, прототипно-ориентированный и некоторых других видах)
    второе, (простое) приложение для VK на c#: подробная статья

    п.с. на youtube полно видео уроков - как создать (простое) приложение для работы с API VK на C#
    п.с.с. на github тоже можно найти разные и полезные решения/наработки

    насколько это сложно, насколько целесообразно ?

    Просто(гугл/яндекс/ютуб/хабрахабр/тостер в помощь), целесообразно

    Тематика:
    по аналогии Алексей Лебедев -> создать приложение, которые ищет всех в ВК, кто учится в вашем учебном заведении - показать в списке: вместе с имя/фамилия + ава + id + пол (п.с. если память не изменяет, максимум API может за раз показать список первых 5000 юзеров)
    Ответ написан
    1 комментарий
  • Как правильно выводить данные из массива?

    tomnolane
    @tomnolane
    профессиональный разработчик
    $mas_samara = ['Чапаевск','Новокуйбыышевск','безенчуг'];
    $mas_moscow = ['Москва','Аргентина','Казань','Иннополис'];  
    
    echo "Самарская область:<br/>";
    foreach ($mas_samara as $city)
    echo "$city<br/>";
    
    echo "<br/><br/>Московская область:<br/>";
    foreach ($mas_moscow as $city)
    echo "$city<br/>";


    или так:
    $mas = [
        'Самарская область' => [
            'Чапаевск',
            'Новокуйбыышевск',
    		'безенчуг'
        ],
    	'Московская область' => [
    		'Москва',
    		'Аргентина',
    		'Казань',
    		'Иннополис'
    	]
    ];
    
    echo "<br/><br/>Самарская область:<br/>";
    foreach ($mas['Самарская область'] as $city)
    echo "$city<br/>";
    
    echo "<br/><br/>Московская область:<br/>";
    foreach ($mas['Московская область'] as $city2)
    echo "$city2<br/>";


    результат всего:
    2981b0093c9d4106856dfcec8e00ebe6.PNG

    п.с. <br/>- это перенос на новую строку
    Ответ написан
    Комментировать
  • Почему не работает метод docs.save Vk api?

    tomnolane
    @tomnolane
    профессиональный разработчик
    я загружаю так (правда не на php, а на c#, но суть одна и таже):
    1) получаю сервер для загрузки:
    var json = JObject.Parse(VkRequest("https://api.vk.com/method/docs.getUploadServer?v=" + Vk.Version + "&access_token=" + Vk.AccessToken)); // выполняю без group_id, и в данном случае документы будут сохранены в моём аккаунте в документах .. если нужен group_id, то id указываем положительным

    парсю ответ и получаю url куда загружать
    2) загружаю файл на указанный url (обычным POST запросом), получаю json ответ и беру от туда file
    3) сохраняю и получаю как attachment:
    string request_path = "https://api.vk.com/method/docs.save?file="+file+"&title=999999999&tags=9999999999&v="+Vk.Version+"&access_token=" + Vk.AccessToken;
                
    var json = JObject.Parse(VkRequest(request_path)); // в json - уже мой attachment, который использую при отправке на стену


    п.с.
    Допустимые форматы: любые форматы за исключением mp3 и исполняемых файлов.
    Ограничения: файл объемом не более 200 МБ.
    Поле POST-запроса: file.
    Ответ написан
  • Как проверить в php существует ли силка?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Проверяем ссылку на существование:
    Первым делом разобьем ссылку на составляющие части и проверим записи DNS
    $url_p=parse_url($url);
    if (!empty ($url_p ['host']) and checkdnsrr($url_p ['host'])){
     // Запись DNS существует
    }

    Когда мы убедились, что такой сайт существует, мы должны получить ответ от сервера:
    if ($otvet=@get_headers($url)){
     echo  substr($otvet[0], 9, 3);
    }

    Если сервер вернет код 200 или 301/302, тогда страница существует!

    полный скрипт:
    <?
    // Корректность ссылки (URL)
    function check_url($url)
    { 
      if(preg_match("@^http://@i",$url)) $url = preg_replace("@(http://)+@i",'http://',$url);
      else if (preg_match("@^https://@i",$url)) $url = preg_replace("@(https://)+@i",'https://',$url);
      else $url = 'http://'.$url;
     
     
      if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) { 
        return false;
    }
    else return $url;
    }
     // Существование ссылки (URL)
    function open_url($url)
    {
     $url_c=parse_url($url);
     
      if (!empty($url_c['host']) and checkdnsrr($url_c['host']))
      {
        // Ответ сервера
        if ($otvet=@get_headers($url)){
          return substr($otvet[0], 9, 3);
        }
      }
      return false;     
    }
    
    // Проверка ссылки
    $url='https://tomnolane.ru/';
    if ($url=check_url($url))
    {
      // ссылка корректная
      if ($o=open_url($url))
      {
        echo "Ответ сервера " . $o;
      }
      else
      {
        echo "Сервер не отвечает";
      }
    }
    else echo "Некорректная ссылка";
    ?>
    Ответ написан
    1 комментарий
  • Авторизация через соц. сети с помощью sdk небезопасна (android). Как должен выглядеть алгоритм на сервере?

    tomnolane
    @tomnolane
    профессиональный разработчик
    мей би... сделать так, чтобы все сравнения (ID) проходили не в андроид приложении? а на самом сайте? И вообще, всю процедуру сделать так, чтобы андроид передаёт только специальные запросы (например в формате json) на сайт, а на самом сайте идёт всё остальное (проверка, подключение и прочие алгоритмы)? В приложении единственное, что должно - это "методика" (например API) общения с сайтом (без каких-либо хранений подключений к БД). И в зависимости от полученных результатов сайт - передаёт те или иные сообщения(ответы) в приложение.
    Ответ написан
  • PHP-скрипты выполняются последовательно?

    tomnolane
    @tomnolane
    профессиональный разработчик
    php выполняется последовательно (если вы конечно, не используете дополнительные потоки).
    Чтобы произошло то, что вы написали - нужно, чтобы вызов функции удаления (в php) выполнилась ДО функции получения данных (где ключ, по которому вы получаете данные один и тот же при использовании запроса на удаление и последующего вызова). Пример: удаляете запись под id=5. И сразу хотите получить запись под этим же id. Тогда в этом случае - данные просто не подгрузятся в html разметку.

    Если пользователь получил какие-то данные с БД, и во время этого какие-то записи были удалены - у него(пользователя) ничего не изменится, пока он не перезагрузит/перезайдёт на эту же страницу.

    И как этого избежать?

    удалять/получать записи не по "фиксированному" ключу, а по ключу, который вы получаете напрямую с БД (как правило это id, который должен быть "уникальным", т.е. иметь сво-во автоинкриминтации)
    Ответ написан
    Комментировать
  • Почему echo не хочет работать?

    tomnolane
    @tomnolane
    профессиональный разработчик
    вы используете подход как javascript для php. PHP при загрузки страницы выполняет свои все функции/методы (которые были прописаны). После чего уже ничего не делает (пока страницу не перезагрузите). а javascript - это "клиентский" язык программирования, позволяющий создавать скрипты, которые встраиваются в HTML-страницы и выполняются в браузере посетителя страницы. PHP - "серверный язык" который выполняется только на сервере. Соответственно, так вызвать как вы хотите никак не получиться. Нужно встроить скрипт javascript в страницу для ваших целей.
    Ответ написан