• Кто может подсказать по теоретическим вопросам по архитектуре таких сайтов, как соц.сети, сайты знакомств (интересует back-end: БД, картинкохранение)?

    Acuna
    @Acuna
    Заполнил свой профиль
    О хранении картинок расскажу. У ВК тут все просто на самом деле: имеется просто куча своих серверов дабы не забивать каналы хостера трафиком, в БД хранятся прямые ссылки на эти картинки, привязанные к id каждого поста. Прелесть этого метода в том, что при переезде на новые сервера на них можно создать такую же структуру папок и никакие ссылки менять не нужно. Простые смертные, разумеется, ни VPN, ни даже выделенные сервера для хранения чего-либо не используют в принципе - трафик забьет все каналы хостера уже при 1000 хостов в день, да и место невообразимо дорого. Используются системы хранения типа Amazon S3 или Google Cloud Storage - оплачивается объем занятого места и объем скачанного исходящего трафа (просмотр юзерами фоток - это, по сути, их скачивание). Экономия раз в 10 получается. Серьезно.
    Ответ написан
    Комментировать
  • Кто писал свою CMS?

    Acuna
    @Acuna
    Заполнил свой профиль
    Пару лет назад отвечал на совершенно аналогичный вопрос, набросал целые мемуары, отныне просто копирую ссыль на него, ибо он с лихвой покрывает все моменты: Php cms для самоучки реально?
    Ответ написан
  • Тупиковое и медленное развитие, лекарство?

    Acuna
    @Acuna
    Заполнил свой профиль
    Все просто: надо делать свой проект для души, который будет хотеться делать, ибо полезен конкретно для Вас, иначе будет просто не интересно и не будет мотивации. и скилы под одно подтянете. Отвечал уже давно весьма основательно по этому поводу, в конечном итоге решил просто давать ссылку на этот ответ: https://toster.ru/answer?answer_id=665948#comments...
    Ответ написан
    Комментировать
  • Как сделать абсолютно безопасную загрузку файлов на сервер?

    Acuna
    @Acuna
    Заполнил свой профиль
    Что за предрассудки касаемо PHP? Ну реально, аж задело как-то даже. Если криворукая школота клепает на нем сайтики игровых кланов, которые через пять минут взламывают их такие же криворукие обиженные дружки - стоит ли винить в этом PHP? Всякие музыкальные файлопомойки же позволяют грузить файлы всем и вся, никто же их не ломает. Они же на С++ же написаны.

    Если "очень долго ковырялись с темой безопасности" - то каким образом, на каких ресурсах, какие доводы они приводили, почему нет, и т. д. Это очень серьезная тема, тут не должно быть диванных теорий и домыслов, нужны факты и ссылки на авторитетные источники (если они утверждают что это невозможно).

    Предварительно проверяйте все по банальному разрешению, просто берете его из имени файла и через in_array () проверяете наличие в массиве предварительно разрешенных для загрузки на сервер. Из пути вырезаете все спец. символы, в том числе .. обязательно, чтобы было нельзя пройти на уровень выше и не загружать и потом скачивать ваши же файлы. С изображениями вообще красота: с помощью дефолтной GD'шной imageCreateFromJPEG () создаете объект. Если создать она не смогла - выкидывайте ошибку. Если совсем паранойя - можете после этого получить через imagesX ее ширину, если не смогла - то выкидываете ошибку. При ошибке временный файл просто удаляем. Теперь фишка в том, как будет невозможно получить готовый файл еще в процессе его проверки на сервере, так как его нужно для этого загрузить: добавляете рандомную строку к концу файла и кидаете его в рандомно сгенерированную папку, и даже если злоумышленник сможет узнать директорию куда грузятся ваши файлы и даже получит к ней доступ - он не сможет узнать имя своего файла для его запуска. Полные пути к файлам храним в БД. Если файлы загружены - наверное предполагается, что их будут скачивать. Отдавайте их через простенький скрипт на PHP, с прописанными в нем заголовками типов файлов и размером, он будет делать запрос в БД по id этого файла, получать полный путь к нему и отдавать его браузеру на закачку, при этом ни юзеры, ни даже вы сами не будете знать имя скачиваемого файла. Качается и качается, не все ли равно что? C остальными файлами все то же самое, с текстовыми еще проще: если они имеют расширение .txt - их браузер чисто физически не сможет выполнить. Только напрямую не отдавайте, не выворачивайте пути, отдавайте через скачку. Вот и все. Просто и эффективно.
    Ответ написан
    Комментировать
  • Как обновить количество товаров в корзине без перезагрузки?

    Acuna
    @Acuna
    Заполнил свой профиль
    Вот у Вас триггеры какие-то висят, они куда-то ведут? Как это часто бывает в такого рода поделках - все реализовано через заднее место. Ладно бы индусы писали, но ведь вроде бы нормальные люди пишут.

    А конкретно по Вашему примеру - что-то на подобии

    $('.elem.plus').click (function () {
      $.post ('ajax.php', { 'action':'cart', 'area':'plus' }, function (result) {
         $('.total').html (result);
      });
    });

    И теперь на словах: у Вас имеется какой-то элемент <div class="elem plus"></div> - это кнопка плюса. Мы вешаем на нее обработчик нажатия, который при нажатии шлет постом данные в какой-то скрипт ajax.php (лучше всего указывать абсолютный url к нему (который http://), этот скрипт уже выполняет нужные запросы в БД и отдает результат через echo, который затем выводится в объекте с классом .total где-то на странице. Например, каким-то таким:

    Количество: <div class="total"></div>

    Вот и все)
    Ответ написан
    Комментировать
  • Bootstrap - как осуществить совершенно не стандартную верстку?

    Acuna
    @Acuna
    Заполнил свой профиль
    Понятно, что вопрос уже не актуален скорее всего, однако зачем тут вообще бутстрап, если по сути верстка основана вообще не на нем? То есть почему вообще заказчику так принципиально его использовать? Потому-что бутстрап?))
    Ответ написан
    Комментировать
  • Lamp или Denwer? Объясните подробно: что такое Lamp?

    Acuna
    @Acuna
    Заполнил свой профиль
    Ставь OpenServer, у него очень удобная панелька десктопная для управления и настройки. С Денвером просто не сравнивается, это как луна с семечками.
    Ответ написан
    Комментировать
  • Как изменить статус VK группы?

    Acuna
    @Acuna
    Заполнил свой профиль
    Вам нужен ключ доступа сообщества: https://vk.com/dev/authcode_flow_group Проходите все шаги постепенно, особо ничего сложного нет, нужно просто знать специфигу контактного API.
    Ответ написан
    3 комментария
  • Как на PHP правильно сделать валидацию поля email в форме?

    Acuna
    @Acuna
    Заполнил свой профиль
    А это у Вас, простите-с, что за образец такой? Откуда он и каким образом Вы планируете по нему что-либо проверить? Проверять нужно регуляркой уже при отправке формы. То есть когда юзер нажал кнопку "Отправить" в форме.

    $errors = [];
    if (!preg_match ('/[\.a-z0-9_\-]+[@][a-z0-9_\-]+([.][a-z0-9_\-]+)+[a-z]{1,4}/i', $_POST['email']))
    $errors[] = 'Не валидный email';
    
    if ($errors) {
      
      $content = 'При отправке формы произошли следующие ошибки:<br/><br/>';
      foreach ($errors as $error) $content .= $error.'<br/>';
      echo $content;
      
    }

    В идеале нужно сабмитить форму на аяксе и выводить сообщение о неверном введеном адресе прямо под полем ввода красиво оформленным без перезагрузки страницы. Но это Вам навыки уже другие нужно иметь.
    Ответ написан
  • Как правильно вывести комментарии с записью?

    Acuna
    @Acuna
    Заполнил свой профиль
    Самое изящное решение, чтобы как в варианте выше не тянуть за каждой записью кучу комментов (ибо представляете, сколько тогда будет запросов, если на странице будет, например, 20 записей, к каждой из которых добавлено по 10-20 комментов) заключается в том, что в таблице нужно создать колонку `parent` и заносить туда единицу, если коммент добавляется из поля ввода новой записи, иначе, если из поля, открываемого по ссылке "Ответить" - 0. Это будет означать по сути ответ на родительский коммент, который и является записью на стенке (ибо чем не запись? Текст есть, картинка есть). При выводе комментов просто выводите записи со значением `parent` = 1 другим шаблоном, например comment_parent.htm, если шаблонизатор у Вас свой - типа с серым фоном, более крупным текстом, и т. д. А комменты - comments_answer.htm. В БД создаете колонку `thread_id`, куда заносите `id` коммента, если это запись, и его же, при добавлении коммента к ней, просто получая `thread_id` родительского коммента. И самое главное - при выводе сортируйте их по thread_id и id коммента одновременно:

    ... AND `position` <= "3"
    ORDER BY `thread_id` DESC, `id` ASC
    LIMIT 0,20

    Это поможет сгруппировать их в нужном порядке, причем не прибегая к GROUP BY, выводя помимо самой записи три последних коммента к ней. Писал экспромтом, реализовал относительно давно, детали опустил, но главное, что суть передал. При наличии определенных навыков и главное понимания сути это все реализовывается относительно просто. Для того я саму суть и изложил, что бы Вы поняли сам принцип. А реализация осуществляется конкретно для проекта.
    Ответ написан
  • Как скормить большой xml(6MB) php?

    Acuna
    @Acuna
    Заполнил свой профиль
    Дак ведь это... simple_html_dom вообще весьма медленная вещь, ибо парсит все регулярками, она же не для этого совсем. Смотрите в сторону специализированных решений для XML, например XMLReader. Открываете этим свой файл через file_get_contents (), и вперед.
    Ответ написан
    Комментировать
  • Привязка через php платёжной системы к сайту?

    Acuna
    @Acuna
    Заполнил свой профиль
    1) У Робокассы, Яндекс.Денег, QIWI и остальных платежек имеются готовые скрипты на PHP.
    2) Эти скрипты просто банально обращаются курлой к API этой платежной системы, вот и все.
    3) Скрипт делает запрос к API, успешный ответ API платежки должен перекинуть юзера на шлюз самой платежки, где он уже сам делает что ему нужно. Далее платежка сама делает нужные ей запросы на свой же API, и если ей все понравилось - кидает юзера на вашу ссылку (колбек), которую Вы указываете при настройке этой платежки. По этой ссылке Вы уже делаете нужные Вам действия если юзер все оплатил. Либо заносите в БД в колонку количество денег юзера в зависимости от того, сколько он заплатил на предыдущем шаге, либо переадресуете его на какой-то закрытый раздел сайта, и т. д. Тут уже смотря что Вы хотите позволить юзеру после оплаты, это уже Ваш сайт.

    А условие, что по этой ссылке нельзя попасть иначе, как только через шлюз платежки после успешной оплаты - должен быть передан токен, который берется из адреса этого колбека и сравнивается с токеном, выданный платежкой после после успешной оплаты. То есть если юзер просто так на нее войдет, ему нужно выдать ошибку, типа не верный токен. Собссно, система весьма примитивная, как это ни парадоксально, самое сложное - это научить Ваш скрипт слать на сервер правильные подписи, чтобы генерился правильный токен, который как раз и будет сравниваться с сервером платежки для перехода на эту Вашу секретную страницу на Вашем сайте. Или пользоваться готовыми скриптами самой платежки, обычно этот процесс намного облегчается этим.
    Ответ написан
    1 комментарий
  • На OpenServer сайт открывается а на сервере не подключает css файл?

    Acuna
    @Acuna
    Заполнил свой профиль
    Ctrl + U в Хроме, в коде смотрите какой URL прописан в теге < style >, кликаете по ссылке прямо там и смотрите, существует ли сам файл. Это если путь абсолютный. Если относительный - то придется самому прикидывать, в правильном ли месте он лежит. Если путь указан, например, css/style.css - это означает, что этот файл должен лежать в папке C:\OpenServer\domains\сайт\css\style.css. То есть любой относительный путь видит все от корневой папки сайта.
    Ответ написан
    Комментировать
  • Google Chrome DevTools как настроить css в алфавитном порядке?

    Acuna
    @Acuna
    Заполнил свой профиль
    Сходу не могу вспомнить, ибо задача слишком частная... А поиском искать в файле, не? Просто если на каждую букву будет несколько десятков стилей - то это все-равно сведет всю задумку на нет.
    Ответ написан
  • OK API - Как получить право для того чтобы ставить "Класс"?

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

    Acuna
    @Acuna
    Заполнил свой профиль
    В каком смысле? Это чистой воды бизнес. Нефть дорожает, бензин дорожает - никто при этом ни с кем отношения не портит, все всё понимают.
    Ответ написан
    Комментировать
  • Как связать PHP и GO?

    Acuna
    @Acuna
    Заполнил свой профиль
    Cамый простой вариант - заставить GO возвращать свой результат обработки на JSON, на PHP написать простенький API, и уже на PHP с помощью API курлой возвращать ответы от GO. JSON просто легче всего распарсить с помощью PHP. Да его, соббсно, любым ЯП легче всего распарсить :/
    Ответ написан
    Комментировать
  • Открывать ИП или нет?

    Acuna
    @Acuna
    Заполнил свой профиль
    Ни в коем случае не хочу умалить достоинства ответивших, однако чем слушать товарищей, которые считают, что налоги - это пустая трата денег (сам из таких), однако помимо того, что в один прекрасный день за вами могут прийти, плюс ситуация когда ИП регать по сути необходимо - это трудоустройство по договору сессионно в фирму удаленно. Здесь все доходчиво расписано про плюсы и минусы и в чем конкретно реально выигрыш в денежках: https://vc.ru/p/ip-for-it
    Ответ написан
    Комментировать
  • В чем причина бурного роста, а затем падения популярности java в 2016 году?

    Acuna
    @Acuna
    Заполнил свой профиль
    Дак ведь Андроид появился, видите, с этого времени и начала расти с переменным успехом, но вектор все-равно направлен вверх. А падение, как следствие, возможно связано с небывалым опять же хайпом вокруг огрызков и переход на них в плане разработки. Но последнее - это мое предположение если честно.
    Ответ написан
    Комментировать
  • Как понять странный дженерик?

    Acuna
    @Acuna
    Заполнил свой профиль
    Явление называется тип данных. В данном случае эта функция возвращает хэш-таблицу с парами "ключ-значение": ключи - это "I", значения "O". Странность здесь в том, что это просто хэш-таблица, поэтому Вы можете обратиться к ее элементу вызвав ее ключ типа I, а не просто по номеру элемента как в обычном массиве.
    Ответ написан
    2 комментария