Профиль пользователя заблокирован сроком с 16 октября 2023 г. и навсегда по причине: систематические нарушения правил сервиса
Ответы пользователя по тегу PHP
  • Почему include не видит файл?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    ну и поправьте include_path
    и от него уже и задавайте
    Ответ написан
  • Как релизовать поиск по сайту без базы?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Гугл поиск по сайту.
    Встройте и не мучтесь
    Ответ написан
    Комментировать
  • CMS или Framework?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Вот ровно сейчас я уговаривал заказчика не придумывать велосипед. В итоге заказчик меня уломал и я вынужден получить 3.600.000 рублей, ДМС и прочие прелести официального трудоустройства.
    Выберите CMS Wordpress напишите для нее свой плагин и радуйтесь жизни все за вас уже сделано.
    Ответ написан
    Комментировать
  • Когда стоит начинать изучать ООП в PHP?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Я бы прочёл документацию там это в 6 или 7 главе
    Ответ написан
    Комментировать
  • Как сделать появление второго select при выборе значения в первом html\php?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Логика следующая.
    Есть 3 селекта страна регион город
    Со стороны php проверяется наличие параметров country region city
    По умолчанию регион и город скрыты то есть не выводятся в разметке. При наличии в get запросе параметра страна отображается список регион и так далее.
    Пример запроса

    Select.php
    Select.php?country=ru
    Select.php?country=ru&region=31
    Select.php?country=ru&region=31&city=309530

    Последний возвращает Россия Белгородская область г. Старый Оскол
    Ответ написан
    2 комментария
  • Парсинг изображений и добавление их на сайт, возможно ли и как?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Есть Википедия ограничиваете список поиска категорией animals и скрапите картинки из ссылок.
    После заполнения базы делаете апи и выпадающий список с прелоадером. Работы ну максимум на 1 день.
    Ответ написан
    Комментировать
  • Почему mysql запрос с php медленный?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    "Расчлените" код.
    Чудес в общем то не бывает, если код работает медленно, то что то тормозит, ваша задача упростить код до минимума с сохранением тормозов. Когда вы еще более упростите вы поймете где ошибка.
    То есть кстати в вашем случае первый кандидат это changelog 8 mysql Смотрите на изменения
    Ответ написан
    Комментировать
  • Есть ли разница между памятью в PHP и C#?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Существенная . Насчет памяти в PHP https://habr.com/ru/company/otus/blog/582442/
    И что касается исполнения. NET запускается как процесс выполняет что то на старте, возможно создает пул соединений, заполняет буфера, по ходу работы оптимизирует код в рантайме.

    PHP отработал и забыл, то есть туже работы выполняют при каждом вызове скрипта. В какой то мере это и лучше, память не течет и все сбрасывается при каждом запросе.
    Ответ написан
  • Существует ли возможность отправлять почту без авторизации на яндексе?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Пробуйте
    https://unix.stackexchange.com/questions/204299/ce...

    если пользователь 1 то должно взлететь, соответственно следите что бы вас не взломали
    Ответ написан
    Комментировать
  • Как сделать систему новых уведомлений на сайте?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Способ в лоб
    Контроллер отдающий уведомления
    /api/notification

    Таблица
    Id
    Userid
    Body
    Created
    Isread

    Ваше приложение каждые 5 секунд опрашивает этот контооллер если есть новые Сообщения то рисует список. При клике отправляется запрос с айдишником для установки статуса.

    Есть и другие способы long pooling, signal ir но они требуют по одному соединению на каждого клиента, а сокетов может на всех и не хватить.

    Как вариант можно эти Сообщения хранить в redis
    Ответ написан
  • Как передать координаты GPS через ссылку?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    POST https://site.com/api/geolog/

    payload

    {
    "longitude": 57,55
    "latitude": 32,765
    }


    либо https://site.com/api/geolog/?lon=57,55&lat=32,765
    Ответ написан
    Комментировать
  • React/vue и cms?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Вот пример роутера для vue
    // Imports
    import Vue from 'vue'
    import Router from 'vue-router'
    import { authGuard, logoutHabdler } from '@/helpers'
    
    Vue.use(Router)
    
    const router = new Router({
      mode: 'history',
      base: process.env.BASE_URL,
      scrollBehavior: (to, from, savedPosition) => {
        if (to.hash) return { selector: to.hash }
        if (savedPosition) return savedPosition
    
        return { x: 0, y: 0 }
      },
      routes: [
        {
          path: '/logout',
          beforeEnter: logoutHabdler,
        },
        {
          path: '/',
          component: () => import('@/layouts/home/Index.vue'),
          children: [
            {
              path: '',
              name: 'Home',
              component: () => import('@/views/home/Index.vue'),
            },
    
            {
              path: 'about',
              name: 'About',
              component: () => import('@/views/about/Index.vue'),
            },
            {
              path: 'description',
              name: 'Description',
              component: () => import('@/views/description/Index.vue'),
            },
            {
              path: 'price',
              name: 'Price',
              component: () => import('@/views/price/Index.vue'),
            },
            {
              path: 'login',
              name: 'Login',
              component: () => import('@/views/login/Index.vue'),
            },
            {
              path: 'legal',
              name: 'Legal',
              component: () => import('@/views/home/Legal.vue'),
            },
            {
              path: 'eula',
              name: 'Eula',
              component: () => import('@/views/home/Eula.vue'),
            },
            {
              path: 'condition',
              name: 'Condition',
              component: () => import('@/views/home/Condition.vue'),
            },
            {
              path: 'disclosure/:id?',
              name: 'Disclosure',
              component: () => import('@/views/home/Disclosure.vue'),
            },
            {
              path: 'userlist/:id?',
              name: 'UserList',
              component: () => import('@/views/home/UserList.vue'),
            },
            {
              path: 'open/:id?',
              name: 'SuccessorList',
              component: () => import('@/views/home/SuccessorList.vue'),
            },
          ],
        },
        {
          path: '/user',
          component: () => import('@/layouts/user/Index.vue'),
          beforeEnter: authGuard,
          children: [
            {
              path: '',
              name: 'UserHome',
              component: () => import('@/views/user/Index.vue'),
            },
            {
              path: 'store/:id?',
              name: 'UserStore',
              component: () => import('@/views/user/Store.vue'),
            },
            {
              path: 'faq',
              name: 'UserFaq',
              component: () => import('@/views/user/Faq.vue'),
            },
            {
              path: 'messages',
              name: 'UserMessages',
              component: () => import('@/views/user/Messages.vue'),
            },
            {
              path: 'contacts',
              name: 'UserContacts',
              component: () => import('@/views/user/Contacts.vue'),
            },
            {
              path: 'profile',
              name: 'UserProfile',
              component: () => import('@/views/user/Profile.vue'),
            },
            {
              path: 'payment/:id',
              name: 'Payment',
              component: () => import('@/views/user/Payment.vue'),
            },
          ],
        },
        {
          path: '*',
          component: () => import('@/layouts/user/Page404.vue'),
          children: [
            {
              path: '*',
              name: 'Page404',
              component: () => import('@/views/user/Page404.vue'),
            },
           ],
      },
      ],
    })
    
    export default router


    Вот конкретно этот кусок обрабатывает пути /user/store/какойто_идентификатор
    {
              path: 'store/:id?',
              name: 'UserStore',
              component: () => import('@/views/user/Store.vue'),
            },


    Соответственно вы можете создать путь для ваших страниц

    далее
    vue.config.js

    const path = require('path')
    const PrerenderSPAPlugin = require('@dreysolano/prerender-spa-plugin')
    const Renderer = PrerenderSPAPlugin.PuppeteerRenderer
    const isDev = process.env.NODE_ENV !== 'production'
    const plugins = isDev
      ? []
      : [
          new PrerenderSPAPlugin({
            // Required - The path to the webpack-outputted app to prerender.
            staticDir: path.join(__dirname, 'dist'),
    
            // Optional - The path your rendered app should be output to.
            // (Defaults to staticDir.)
            // outputDir: path.join(__dirname, 'prerendered'),
    
            // Optional - The location of index.html
            indexPath: path.join(__dirname, 'dist', 'index.html'),
    
            // Required - Routes to render.
            // Генерируйте пути из бд и билдите приложение какким нибудь скриптом на основе базы данных
            routes: ['/', '/about', '/description', '/price', '/about'],
    
            // Optional - Allows you to customize the HTML and output path before
            // writing the rendered contents to a file.
            // renderedRoute can be modified and it or an equivelant should be returned.
            // renderedRoute format:
            // {
            //   route: String, // Where the output file will end up (relative to outputDir)
            //   originalRoute: String, // The route that was passed into the renderer, before redirects.
            //   html: String, // The rendered HTML for this route.
            //   outputPath: String // The path the rendered HTML will be written to.
            // }
            postProcess (renderedRoute) {
              // Ignore any redirects.
              renderedRoute.route = renderedRoute.originalRoute
              // Basic whitespace removal. (Don't use this in production.)
              // renderedRoute.html = renderedRoute.html.split(/>[\s]+</gim).join('><');
              // Remove /index.html from the output path if the dir name ends with a .html file extension.
              // For example: /dist/dir/special.html/index.html -> /dist/dir/special.html
              if (renderedRoute.route.endsWith('.html')) {
                renderedRoute.outputPath = path.join(
                  __dirname,
                  'dist',
                  renderedRoute.route,
                )
              }
    
              return renderedRoute
            },
    
            // Optional - Uses html-minifier (https://github.com/kangax/html-minifier)
            // To minify the resulting HTML.
            // Option reference: https://github.com/kangax/html-minifier#options-quick-reference
            minify: {
              collapseBooleanAttributes: true,
              collapseWhitespace: true,
              decodeEntities: true,
              keepClosingSlash: true,
              sortAttributes: true,
            },
    
            // Server configuration options.
            server: {
              // Normally a free port is autodetected, but feel free to set this if needed.
              port: 8001,
            },
    
            // The actual renderer to use. (Feel free to write your own)
            // Available renderers: https://github.com/Tribex/prerenderer/tree/master/renderers
            renderer: new Renderer({
              // Optional - The name of the property to add to the window object with the contents of `inject`.
              injectProperty: '__PRERENDER_INJECTED',
              // Optional - Any values you'd like your app to have access to via `window.injectProperty`.
              inject: {
                foo: 'bar',
                prerender: false,
              },
    
              // Optional - defaults to 0, no limit.
              // Routes are rendered asynchronously.
              // Use this to limit the number of routes rendered in parallel.
              maxConcurrentRoutes: 4,
    
              // Optional - Wait to render until the specified event is dispatched on the document.
              // eg, with `document.dispatchEvent(new Event('custom-render-trigger'))`
              // renderAfterDocumentEvent: 'custom-render-trigger',
    
              // Optional - Wait to render until the specified element is detected using `document.querySelector`
              renderAfterElementExists: '#app',
    
              // Optional - Wait to render until a certain amount of time has passed.
              // NOT RECOMMENDED
              renderAfterTime: 5000, // Wait 5 seconds.
    
              // Other puppeteer options.
              // (See here: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#puppeteerlaunchoptions)
              headless: true, // Display the browser window when rendering. Useful for debugging.
            }),
          }),
        ]
    
    module.exports = {
    
      devServer: {
        disableHostCheck: true,
        progress: false,
        before () { // Output the same message as the react dev server to get the Spa middleware working with vue.
          console.info('Starting the development server...')
        },
      },
      transpileDependencies: ['vuetify'],
    
      configureWebpack: {
        plugins: [...plugins],
      },
    }


    В итоге получите SPA приложение с поисковой оптимизацией
    Ответ написан
    Комментировать
  • Какой есть инструмент для генерация pdf из html на стороне сервера?

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

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

    Для остального существует БД из нее вы все получаете и отправляете клиенту.
    Ответ написан
    Комментировать
  • Как сделать генерацию страницы с результатом сайта на html?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    2 варианта
    1. Правильный
    2. Как легче

    Первый на старте опроса вы заводите сессию на опрос.
    В конце опроса сохраняете 1 параметр скор в базе данных, там id и счет

    servey.ru/score/555666

    Яваскриптовый
    Опрос проходит
    и формируется ссылка типа
    servey.ru/score/?score=10&img=exelent.jpg
    Ответ написан
    Комментировать
  • Что за зверь? Если возможность раскодировать его?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    if(!isset($_SESSION['token']))
    если не назначена переменная token
    то назначить ее со следующими значениями
    {$_SESSION['token'] = md5($_SERVER['SERVER_NAME'].$_SERVER['REMOTE_ADDR'].microtime());}
    имя сервера + удаленный адрес + отпечаток времени
    и взять хэш от этой строки

    Код вполне валидный для получения уникальных значений для клиентов.
    Ответ написан
  • Как сделать чтобы сайт не открывался по ip адресу, а только по домену?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    В дефолтовый конфиг указать /var/www/html
    дальше сделать виртуалхосты по имени
    Ответ написан
  • Возможно ли сгенерировать из OpenAPI/SWAGGER документации еще одну документацию?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    что не так?
    У вас на входе есть json у вас есть условия, зачастую они автогенерируемые типа role === "admin" вот и вырезайте обьекты по этому условию ну или по сигнатуре
    Ответ написан
    Комментировать
  • Почему PHP используется в не HighLoad приложениях?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    При выборе ЯП обычно руководствуются следующими критериями:
    * Распространенность языка
    * Стоимость специалистов
    * Хорошая документация
    * Насколько подходит для данной задачи
    * Какие поддерживает платформы
    * Скорость
    * Наличие существуещего кода или специалистов знающих его
    * Унификация фронта и бэка

    Итак в вашем случае.

    * Распространенность языка - очень распространен, ближайшие конкуренты только C# и Java
    * Стоимость специалистов - Средняя или низкая
    * Хорошая документация - есть
    * Насколько подходит для данной задачи - специально создавался для формошлепства,
    * Какие поддерживает платформы - unix, windows
    * Скорость - ниже чем у конкурентов, но при должном уровне специалистов удовлетворительная
    * Наличие существуещего кода или специалистов знающих его - это вы сами ответите
    * Унификация фронта и бэка - это уже в сторону NodeJS или C#, но как правило PHP разработчики часто FullStack
    Ответ написан
    Комментировать
  • Как можно преобразовать такую строку в читаемые данные?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Это параметры при запросе "name=222&email=444&message=ghjkghjk&agree=on"

    https://simple.com/?name=222&email=444&message=ghjkghjk&agree=on

    RTFM https://www.php.net/manual/en/function.parse-url.php
    Ответ написан
    Комментировать