• Отключить возможность обращения к функциям через переменные?

    @resurection
    Никак. Это конструкции языка.
    Максимум, что вы можете, это запретить некоторые функции:
    disable_functions = file_get_contents
    Ответ написан
    Комментировать
  • Где найти HTML верстальщика?

    @resurection
    Вы должно быть шутите? Мы уже 3 месяца в поисках верстальщика на 70-90т.р. в центре Москвы
    Ответ написан
    Комментировать
  • Как заставить phpStorm определять тип переменной в файлах определённого типа?

    @resurection
    Вопрос в догонку. Как правильно написать phpDoc для $this, что бы PS не ругался на приватные методы? То есть когда файл инклюдится из класса и в файле написать:
    <?php
    /**
    *@var myClass $this
    */
    $this->_privateMethod(); // PS Ругается красным.
    ?>
    Ответ написан
    Комментировать
  • PHP: Проверить, открыт ли файл на запись

    @resurection
    Подозреваю, что FTP-сервер пишет в локальный файл порциями, буферизируя пришедшие данные и периодически скидывая их на диск. Если моё предположение верно, то в промежутках между сбросами, файл не заблокирован. Если так, то, в настройках ФТП-сервера может быть соответствующая галка, что бы блокировать файл на протяжении всего процесса закачивания.
    Ответ написан
  • Как правильно deploy-ить с GitHub и с BitBucket?

    @resurection
    Я делаю новую ветку «Live» из которой удаляю директории: _backups, _docs, _adminCreator и все файлы /settings/dev-***.cfg
    Получается такая «дырявая» версия, которая разворачивается на боевом серваке.
    Ответ написан
    Комментировать
  • 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
    Ответ написан
    Комментировать
  • Когда в PHP использовать интерфейсы, а когда абстрактные классы?

    @resurection
    Я бы сказал так:
    Интерфейс — это возможность задать жёсткую семантику.
    Абстрактный класс — это возможность вынести дублирующийся код и явно это отметить в иерархии.
    Ответ написан
    Комментировать
  • Как отучить стажёра от говнокода?

    @resurection
    Когда я начал изучать программирование (начал с php), то, наверное, первый год я просто узнавал основы синтаксиса и принципов. Например, если написать unset($arr[23]); — что будет: все последующие индексы сместятся или будет дырка? А как, что бы не было дырки? Если в двойных кавычках все переменные заменяются на значения, то будут ли кавычки влиять на ф-цию date(«Y-m-d»)? А что делать, если мне надо дату разбить на две строки br-ом? А как «склеить» два числа: 1+2=12?

    В общем, очень много базовых вопросов, которые в документациях явно не прописаны или описаны как-то завуалированно (в пхп не существует нумированных массивов, только ассоциированные!). На такие вопросы я очень много времени тратил в первый год. Базы данных даже не щупал — всё в файлах. Но тогда я программил для себя и понимал, что пока не сделаю самостоятельно несколько сайтов, устраиваться на работу — тупо. А вы хотите: первые дня два,… показал ему, что такое HTML, CSS, PHP, MySQL. Дня два не хватит даже что бы выбрать удобное IDE, а Вы ему 4 языка!

    В итоге: либо не экономьте на программерах, либо платите мелкую з/п за то что он ничего не успевает. А этому прогеру надо сначала написать хотя бы пару сайтов для себя/друзей и только после этого уже просить за свою работу денег.
    Ответ написан
    6 комментариев
  • Цена создания интернет-магазина

    @resurection
    Как то я тоже задался вопросом создания магаза автозапчастей с каталогом з/ч. Там куча каталогов от производителей надо парсить а некоторые ещё расшифровывать. Это огромная работа. Есть люди которые только на этом специализируются. По очень примерным прикидкам получить базу для основных марок авто — это 1 — 1,5 млн. р. Хотя мой знакомый обратился в КИА и ему за 10кр. предоставили каталог в удобном формате. Может быть можно договорится с elcats.ru. В общем, для этого надо искать варианты что бы минимизировать затраты. Но я, на пример, не представляю откуда брать каталог БМВ, которые есть только у официальных дилеров и они его не распространяют. Спарсить exist тоже не получится — у них защита от парсера прошла уже несколько поколений переделок. Но в инете полно других магазинов которые проще спарсить, однако и каталоги у них не точные или старые.
    Ответ написан
    Комментировать
  • Задать белый цвет шрифта при печати страницы

    @resurection
    На страницу добавьте ещё один файл-стилей вот так:
    Атрибут media=«print» указывает, что эти стили будут применяется только для печати. Через эти стили можно подменить цвет текста.
    Ответ написан
  • Игнор в Mercurial?

    @resurection
    Эта задачка не должна решаться системой контроля версий.
    Вместо этого надо создать несколько конфигов под каждый сервак и сделать пачку
    if () { подключаем_конфиг_1 }
    elseif () { конфиг_2 }


    На хабре была статья как это сделать. Не могу найти, но вкратце как я реализовал это в своём велосипеде:
    Есть иерархия файлов-настроек:
    /settings.php
    /settings/live.php
    /settings/dev.php
    /settings/dev/htmler.php
    /settings/dev/resurection.php
    /settings/dev/resurection/notebook-hp.php

    Все файлы у меня синхронизируются между компами и если я запускаю на своём стационаре, то подключается каскад файлов:
    /settings.php
    /settings/dev.php
    /settings/dev/resurection.php

    А если запускаю на ноуте, то дополнительно подключится ещё
    /settings/dev/resurection/notebook-hp.php

    При этом, settings.php содержит абсолютно все настройки в виде массива. Дочерние файлы могут переопределять некоторые настройки.
    Например, /settings/dev.php содержит всего одну строчку:
    $settings['debugMode'] = true;

    Кстати, на боевой сервак я всё заливаю через меркуриал и в меркуриале есть ветка live которая разворачивается на серваке и является «дырявой версией». В неё не попадают некоторые файлы в т.ч. настройки для моего локальной тачки. Там только два файла:
    /setting.php
    /settings/live.php.
    Ответ написан
    Комментировать
  • MySQL InnoDB + MyISAM

    @resurection
    С транзакциями будут проблемы. rallback будет работать странно: он откатит только часть изменений — ту часть которая была сделана в InnoDB. А ту которая в MyISAM оставит. Естественно, это проявится не только на rallback, но может проявится например при падении сервера, когда foreign keys сработать не успеют, транзакция откатится частично.
    Ответ написан
    Комментировать
  • Защита от SQL инъекций

    @resurection
    Если заменить запись
    $var2 = sql_guard('POST', 'input2', 'int');
    на
    $var2 = (int) sql_guard('POST', 'input2'); // эта конструкция короче на одну запятую

    то вашу ф-цию можно будет сократить в 2 раза выкинув все тернарные условия.

    А ещё можно заменить:
    $var1 = sql_guard('POST', 'input1');
    на
    $var1 = sql_guard($POST['input1']);

    Тогда ваша ф-ция превратится в алиас и будет содержать всего один вызов addSlashes или mysql_real_escape_string
    Ответ написан
    Комментировать
  • Обмен данными между двумя PHP скриптами

    @resurection
    Если взломщик имеет ПОЛНЫЙ доступ то он ведь сможет заглянуть куда угодно где бы Вы не спасались. Да и зачем ему перехватывать данные, если он сможет забрать готовый результат работы скрипта? Даже шифрование данных не защитит, ведь он сможет просмотреть исходники и узнать алгоритм и ключ.
    Ответ написан
    1 комментарий
  • Структура базы данных

    @resurection
    Не надо так разделять. 80к — это копейки. Но:
    1. обязательно настройте индексы.
    2. если в 90% случаев нужно только название + режисёр, то не надо писать SELECT *… Перечислите все нужные поля.

    На крайний случай, можете разделить одну таблицу на две со связью один-к-одному. В первой должны быть те поля которые используются всегда (id, название, режисёр), во второй все остальные. Это позволит писать SELECT * FROM `t1`.
    Ответ написан
    Комментировать
  • Генерация автоинкрементного значения в составном первичном ключе не на первом поле в innoDB таблице

    @resurection
    Я бы сказал, что так делать не надо. message_id должно быть уникальным автоинкрементом.
    А если Вы хотите выводить красивую нумерацию индивидуальную для каждого юзера, то сделайте отдельное поле `number` SAMLLINT — его и вычисляйте триггером.
    Ответ написан
    Комментировать
  • PHP - не считывается полный файл. Памяти и времени хватает?

    @resurection
    Может это не то, но хоть идею подкину.

    Было у меня что-то похожее при скачивании видео флешем. У меня тоже плесало вокруг 40кб. Выяснил, что если файл короче, то сервер посылает HTTP-заговловок Content-Length. А если длинее, то заголовка нет. Виновником был mod_deflate который жал отдаваемые файлы на лету. Если файл был меньше чем, кеш, то сервер сперва сжимал и мог показать правильный размер.
    Попробуйте откатить Apache. Если поможет, то фаербагом досканально сравнивайте ответ.
    Ответ написан
    Комментировать
  • Чат на PHP: узкое место БД - как решить?

    @resurection
    Я помню лет 10-15 назад чаты были очень популярными. Кроме чатов и форумов ничего ещё изобретено не было. Ни блогов, ни социалок, ни твиттеров ни, даже, ajax. И тусили в этих чатах тысячи человек (можно было открыть несколько каналов). Или сотка людей в чате без каналов.
    Чаты были на фреймах и каждые 5 сек. фрейм со списком сообщений обновлялся ПОЛНОСТЬЮ (весь HTML со всей пачкой сообщений).
    Железо в те времена было что-то вроде 300-400 МГц. Ваш ВДС, я уверен, порвал бы те сервера.
    Как-то странно сейчас в 2010 году слышать, что чат не выдерживает больше 30 одновременных юзеров.

    Вы пробовали на другом сервере? Хотя бы на локале сколько держит?
    Ответ написан
    3 комментария
  • ввв в домен.рф

    @resurection
    Это не нужно. WWW — это субдомен который «иногда» указывал на тот комп на котором стоял веб-сервер (иногда внутри домена много компов). И браузеры были обучены поиску именно в этом поддомене. Если набрать в не хромо-подобном браузере «doman» + enter, то браузер будет пробовать перебирать пока не найдёт сайт: «domain.com», 'www.domain.com', 'domain.org' и т.д… Иногда если Вы укажите существующий «domain.com» а там нет веб-сервера, браузер автоматически может начать щупать на www.domain.com.

    Сейчас же браузеры лезут в поисковики и WWW не актуально. В любом случае, если вы и будете делать, то Вам надо делать «www.домен.рф», а не «ввв.» и не «вп.».
    Ответ написан
    1 комментарий