• Как отдать статический файл с сервера через PHP скрипт?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Let me google it for you: google.com/search?q=отдать+файл+PHP
    очень сложный поисковый запрос, правда?

    А, главное, найдет тебе статьи, написанные какими-то левыми людьми.
    То ли дело задать вопрос на тостере, и получить ответ от корифеев, строчащих ответы между ковырянием в носу и выпрашиванием у мамки прощения за очередную двойку.
    Ответ написан
    2 комментария
  • Как лучше записывать ip:port серверов в один столбец базы данных mysql?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    Сегодня мы будем изучать циклы - незаменимая вещь в программировании при работе с коллекциями.
    for ($i = 0; $i < count($ip_port); $i = $i+2) {
      $ip = $ip_port[$i];
      $port = $ip_port[$i+1];
      echo $ip.':'.$port.PHP_EOL;
    }
    Ответ написан
    4 комментария
  • Быстрый и простой переезд с одного VPS на другой?

    @tushev
    - Заранее продумать, какие пакеты надо поставить на принимающей стороне.
    - Заблокировать доступ к старому серверу
    - Все скрипты и конфиги удобно синхноризировать через rsync. (Очень быстро получается пересинхронизация, если вдруг что то не с первой попытке получилось.)
    - БД одной командой, которая через удаленный ssh на одной стороне дампит базы, а на другой тут же исполняет эти дампы.
    - Переключаем DNS, а на старом серваке ставим редирект, на случай если у кого то DNS не обновился.

    Если сайт ответственный и не хочется простоя, то я в таком случае все команды по переносу сначала отпрабатываю в тестовом режиме. Потом делаю bash скрипт, который весь перенос выполняет за один запуск. И потом просто однократно запускаю этот скрипт.
    Ответ написан
    2 комментария
  • Вы в браузере набрали адрес сайта, нажали Enter. Расскажите максимально подробно о технических процессах происходящих далее?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Действительно, уважаемый. Это слишком. Вряд ли я затрону все тонкости, но попробую наметить примерный путь:

    0) Пользователь вбивает в адресную строку браузера адрес сайта (нажимая клавиши на клавиатуре, которые замыкают определённую дорожку в матрице, по которой происходит определение нажатой клавиши, что через шину USB в какой-то момент передастся OS, где это поймает HID-драйвер и вызовет определённое прерывание, что OS передаст как событие/или_ещё_как в программу, которая вызовет соотвествующую функцию из API менеджера окон, которая изменит содержимое строки и в результате когда-то будет перерисован UI-элемент, а если нажат был Enter, то начнётся следующее).
    1) Браузер вытащит из input'а строку с запросом и посмотрит, похоже ли это на адрес. Если да, то добавит недостающие уточнения (например, http или file протокол, порт и подобные довольно стандартные вещи). Если нет - то скорее всего создаст запрос в поисковую систему, установленную по умолчанию (я более не буду опускаться до таких бессмысленных деталей, как вызовы API-функций, иначе я буду набирать это сообщение ОЧЕНЬ долго). В любом случае на выходе мы по сути получим URL, который надо загрузить. Протокол file:// мы рассматривать не будем, ftp далеко не везде есть, https:// на не хватит вечности, так что остановимся на http, который по сути есть tcp/ip по умолчанию на 80 порту с определённым форматом общения.
    2) Окей, url есть. Теперь нам нужен адрес, к которому обращаться. Так как http это tcp/ip - нам нужен ip адрес. Здесь нам помогают dns-сервера. Обычно, нормальный провайдер устанавливает у себя кэш-сервера dns, которые не обращаются по стопицот раз за vk.com к ответственному серверу com-зоны. Давайте не будем отвлекаться на то, как происходит там общение, если что - вот (вики тем хороша, что часто содержит внизу релевантные ссылки). Скажу лишь то, что на выходе мы получаем ip адрес(а).
    3) Имея адрес мы можем запросить страницу. Собственно, всё что после первого слэша - это как-бы параметры для http-сервера: какую именно страницу запрашивать, он всё же не телепат. Конечно, можно было бы немного схитрить и отправить читать про tcp/ip, но ведь существует и shared-hosting. Ограничемся лишь его упоминанием. Собственно, по полученному адресу отправляется GET запрос, который и обрабатывает сервер, находящийся по полученному IP-адресу.
    4) Сервер же, получив адрес, начинает распарсивать строку, медленно вытягивая нужные данные из баз-данных и настроек, выполняются сотни скриптов, иногда делается ещё не одна сотня различных запросов на другие сервера (здесь и разного вида метрики и разного вида HADOOP и т.д.). Пройдя сквозь скрипты и темплейторы в самом конце мы получаем html-страницу, готовую к употреблению. Её-то сервер и отправит в ответе (после заголовков, конечно).
    5) Вот и началось самое интересное. Получив html страницу браузер начинает жутко надругаться над CPU, HDD и GPU, попутно сжирая тонны RAM и мусоря в swap. Виной всему нереальные для полного соблюдения стандарты от небезызвестной w3c.org. Для облегчения многие делают костыли, вроде webkit, а некоторые и вовсе забивают на него и пилят свой стандарт с преферансом и картёжницами (впрочем, в последнее время становиться лучше). Здесь снова начинаются сотни вызовов API ОС, windows manager'а и прочих библиотек, вроде boost, qt или libpng. В ходе работы в RAM строится макет, по которому потом строится нечто вроде PDF (тоже сильно векторный), что, потом, обрабатываясь быстрыми шейдерами на GPU, выдаётся на экран. Опять же, многое пропущено, но вряд ли кому-либо, кроме парня в свитере с оленями, действительно интересно, как работает GDI, DirectX или OpenGL.
    6) Ах да, мы же забыли про тысячи js-скриптов, миллионы картинок и анимации с котиками, а также о таких дополнительных плюшках, как flash-player или java-weblets. В кратце, что js, то и flash и java - это виртуалка, со специальной архитектурой. Они, виртуалки, конечно разные (хотя flash и js довольно похожи, ещё бы - ECMAScript один и тот же). JS - самый интегрированный внутрь браузера, он же и самый медленный чисто визуально (ибо последние два имеют доступ к быстрому GPU), хотя самый быстрый в попугаях. Второй постепенно вымирает и представляет из себя, так же как и третий специальную shared-библиотеку, о которой браузер как-нибудь узнал и которой скармливает специальное содержимое помечанное специальным тегом html. Третий уже почти умер и встречается лишь изредка или в каком-нибудь энтерпрайзед со страшным legacy-базой. Ну здесь из сылок разве только гугл. Ибо сколько всего - даже не сообразишь. Да и вообще, эта тема ещё скучнее GDI, DirectX и OpenGL и к свитеру с оленями требуются ещё очки с толстенными стёклами, дающие стопицот к терпению и задроству над матаном. Если в кратце, то в случае JS, всё что было загружено в память и не думает выгружаться и формирует этакое дерево - DOM, над которым с помощью специального API и происходят модификации. При этом, перед тем как исполниться, весь JS-код компилируется, в нативный для VM байт-код. То же самое в общем-то и со вторым и третьим, разве только они не имеют доступа к DOM и организовать его - дело тех ещё костылей. Ах да, забыл ещё про Silverlight (или как оно там пишется), который сдох, не успев родиться. Так же как и Java, жив в серьёзном энтерпрайзе, не поскупившийся не "дешёвую" поддержку MS.
    7) Ну... А дальше пользователь нажимает на нужную гиперссылку и всё по новой.

    За кадром остались такие костыли, как ajax, websockets и прочая асинхронная ересь. С ней всё в миллионы раз сложнее. И к очкам со свитером потребуется ещё и... а чёрт их знает, что они там ещё носят. Ну да ладно, я искренне завидую тем парням (и девушкам), которые разбираются во всей этой машине. Целиком. Ибо это лишь верхушка айсберга. Разбавленная не лучшей памятью и ужасным гуглом.

    P.S. Не бейте сильно за грамматические и синтаксические ошибки. Спеллчекер приказал долго жить, да и 5 утра как никак.

    UPDATE
    На хабр выложили неплохой перевод дающий некоторое представление, как браузер ругается над памятью и процессором. Хотя и весьма поверхностное,
    Ответ написан
    26 комментариев
  • PHP: нужно ли создавать массив перед его заполнением?

    @resurection
    Нельзя isset-ом проверять т.к. для null-ового значения она возвращает false. См. доку:

    $a = array ('test' => 1, 'hello' => NULL);

    var_dump(isset($a['test'])); // TRUE
    var_dump(isset($a['hello'])); // FALSE

    Для проверки существования ключа массива необходимо использовать array_key_exists():

    var_dump(array_key_exists('hello', $a)); // TRUE

    ru.php.net/manual/en/function.isset.php
    Ответ написан
    Комментировать
  • Как facebook определяет People you may know?

    sl_bug
    @sl_bug
    У вас есть друзья, у которых еще есть друзья, у которых еще есть друзья, а там этот человек. (ну или не друзья я такое-же сравнение профилей через несколько друзей).
    Ответ написан
    2 комментария
  • Какую структуру использовать для хранения карты игровых полей со сложными границами?

    TheHorse
    @TheHorse
    Cell: struct {
    x,y, height, width: float/double/int/bool (про bool пошутил)
    neighbors: list of cell;
    isLeftRed, isRightRed, itTopRed, isBottomRed: bool;
    }

    Каждая ячейка хранит инфу о своем положении, ссылки на соседей и набор параметров указывающих на допустимость пересечения конкретной границы (на примере не нарисовано, и я надеюсь, что нет случаев когда для какой-то ячейки одна из границ может быть пересекаемой только в конкретном положении).
    По такой структуре можно легко и быстро определять куда можно ходить, куда нельзя. Не сложно оптимизировать структуру для меншего потребления ОП сжав все параметры в некий набор байт.
    И тогда может очень большая карта влезет в 10 мб, что, я верю, достаточный результат.
    Ответ написан
    3 комментария
  • PHP интерпретатор не понимает index.php

    Kindman
    @Kindman
    index.php может отдаться «файлом» если забыть в самом начале написать
    <?php
    Ответ написан
    Комментировать
  • PHP vs UTF-8

    @Ura78
    Была похожая проблема. Помог параметр mbstring.func_overload в php.ini
    Ответ написан
    2 комментария
  • Linux, руководство пользователя

    Screatch
    @Screatch
    Ruby On Rails front-end developer
    На мой взгляд литература тут не поможет. Вам необходимо просто начать полноценно работать с системой и сразу как только возникает какая нибудь проблема или необходимо что-то найти / установить / сделать, обращаться к Google.

    Прежде чем я стал полноценным пользователем Linux, я поломал систему как минимум 3-4 раза.
    После всех этих поломок и часами проведённых в попытке восстановить систему в обнимку с гуглом я могу с уверенностью сказать что система не ломается у меня теперь вовсе. Я уже полтора года являюсь Linux пользователм, довольно уверенно работаю с консолью и пишу не сложные Bash скриптики, и это не читая ни одну книгу.

    Самое лучше обучение это самообучение. Тыкайте, нажимайте что видите, узнаете много интересного но скорее всего, в этом случае, вы поломаете систему, так что под рукой лучше держать установочный диск, на всякий случай)
    Ответ написан
    5 комментариев
  • Как можно через одно ssh-соединение сделать несколько действий?

    kondor
    @kondor
    Возможно Вам стоит посмотреть в сторону ключика "-M" у ssh. Эта опция позволяет использовать уже установленное соединение с удаленным хостом для новых ssh сессий с тем же хостом. Чуть подробнее с небольшим примером: www.linuxjournal.com/content/speed-multiple-ssh-connections-same-server
    Ответ написан
    Комментировать
  • Как продлить срок службы батареи ноутбука (нетбука)?

    Wott
    @Wott
    Смотрим тип батареи и сообразно ему поступаем. Но в общем ноут имеет контроллер, который приглядывает за батареей.
    Менять приходиться когда полного заряда уже не хватает на приемлемое время. По моему опыту это 2, максимум 3 года.
    Ответ написан
    Комментировать