PHP тест
Сегодня прошёл php тест на mamba.ru
Результат хороший, но ещё много над чем нужно работать.
А какой результат у вас?
Сегодня прошёл php тест на mamba.ru
Результат хороший, но ещё много над чем нужно работать.
А какой результат у вас?
Нашёл на одном буржуйском сайте страничку с регулярно обновляемой информацией о производительности процессоров, винчестеров и т.д.
Допустим на нашем сервере нам требуется забанить весь траффик из России, но при этом нам нужно отставить незаблокированным наш собственный российский IP.
Для решения этой задачи устанавливаем модуль определения географического положения по IP - mod_GeoIP под Apache, если он у вас не установлен.
Добавляем в httpd.conf следующее:
SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
SetEnvIf Remote_Addr “216\.239\.51\.99″ !BlockCountryDeny from env=BlockCountry
Где 216.239.51.99 - ваш IP, который блокировать не нужно.
reboot
Всё
Всем привет. Сегодня я расскажу, как установить на ваш дедик или VPS анонимный прокси 3proxy.
3proxy включает в себя:
- HTTP прокси с поддержкой HTTPS и FTP (proxy/proxy.exe),
- SOCKSv4/SOCKSv4.5/SOCKSv5 прокси (socks/socks.exe),
- POP3 прокси (pop3p/pop3p.exe),
- FTP proxy, кэширующий DNS прокси,
- TCP и UDP портмапперы (tcppm, udppm),
- а так же комбинированный прокси-сервер с поддержкой дополнительных возможностей, таких как:
-> управление доступом,
-> ограничение ширины потребляемого канала,
-> ограничение трафика на день, неделю и месяц,
-> перенаправление соединений,
-> построение цепочек соединений (proxy chaining),
-> ротацию лог-файлов, ведение журналов через ODBC и syslog и т.д.
Немаловажно также то, что 3proxy абсолютно бесплатный, последнюю актуальную версию можно скачать на официальном сайте на странице загрузки http://3proxy.ru/download/
Важное преимущество 3proxy перед другими прокси-серверами (например кэширующем прокси-сервером Squid) заключается в том, что 3proxy маленький и простой, но в то же время функциональный. На момент написания статьи его работоспособность проверена на Windows 98/NT/2000/2003/XP, FreeBSD/i386, NetBSD/i386, OpenBSD/i386, Linux/i386, Linux/PPC, Linux/Alpha. Последняя анонсированная версия 0.6.1 (11/12/2009) Сейчас автор разрабатывает версию 0.7b-devel.
Приступим к установке:
1. Подключаемся к серверу по ssh. Сделать это можно через PuTTY
2. 2.Устанавливаем файловый менеджер mc:
yum install mc
3.Устанавливаем библиотеку gcc необходимую для компиляции
yum install gcc
4. Загружаем 3proxy
wget http://3proxy.ru/0.6.1/3proxy-0.6.1.tgz
5. Разархивируем скачанный архив командой
tar -xvzf 3proxy-0.6.1.tgz
6. Переходим в папку с распакованными файлами:
cd 3proxy-0.6.1
7.Компилируем:
make -f Makefile.Linux
Во время компиляции могут появляться следующие ошибки:
3proxy.c:1103: warning: pointer targets in passing argument 1 of …
Но они не критичны и их мы игнорируем
8.Создаем папки:
mkdir /usr/local/etc/3proxy
mkdir /usr/local/etc/3proxy/bin
mkdir /usr/local/etc/3proxy/logs
mkdir /usr/local/etc/3proxy/stat
9.Переносим исполняемый файл
cp src/3proxy /usr/local/etc/3proxy/bin
10.Переносим файл для автозапуска
cp ./scripts/rc.d/proxy.sh /etc/init.d/3proxy
11.Записываем информацию в файл автозагрузки
chkconfig 3proxy on
12.Создаем новый конфигурационный файл
touch /usr/local/etc/3proxy/3proxy.cfg
Или переносим из образца конфигурационный файл
cp cfg/3proxy.cfg.sample /usr/local/etc/3proxy/3proxy.cfg
13.Выставляем права
chown -R nobody:nogroup /usr/local/etc/3proxy
14.Переходим в папку
cd /usr/local/etc/3proxy
и настраиваем 3proxy.cfg запустив mc, выбрав файл и нажав F4.
В интернете можно найти множество разных версий конфигурации 3proxy, я приведу свой вариант 3proxy.cfg, максимально упрощённый, не ведущий никаких логов, с авторизацией по паролю, заточенный под работу со всеми IP вашего сервера или VPS. Т.е. после установки мы получаем не один прокси сервер, а сразу несколько - столько, сколько IP привязано к вашему серверу или VPS. Вот конфиг:
daemon
auth strong
users admin:CL:password
users sashawww:CL:password
proxy -n -a -p3128 -ixxx.xxx.xxx.xxx -exxx.xxx.xxx.xxx
proxy -n -a -p3128 -iyyy.yyy.yyy.yyy -eyyy.yyy.yyy.yyy
flush
allow admin,sashawww
Добавте столько строчек вида proxy -n -a -p3128 -ixxx.xxx.xxx.xxx -exxx.xxx.xxx.xxx, сколько IP вам выдал ваш хостер. Таким образом можно использовать все дополнительные IP, а не только главный! На выходе мы получим прокси
xxx.xxx.xxx.xxx:3128
yyy.yyy.yyy.yyy:3128
Порт 3128 стандартный, вы можете заменить его на нестандартный, например 43153.
Теперь важный момент, если вдруг после установки ваш прокси откажется работать, как у меня на моём сервере, попробуйте добавить правила для firewall для всех портов, которые вы упоминали в конфиге, например:
iptables -I INPUT -p tcp - -dport 3128 -j ACCEPT
iptables -I INPUT -p tcp - -dport 8082 -j ACCEPT
Правда после ребута сервера прокси опять отказались работать и эти команды пришлось выполнять повторно.
Добавить новых возможностей вашим прокси, создать возможные ограничения для юзеров вы можете добавив в конфиг дополнительные параметры:
# Установить размер кэша для запросов DNS, можно оставить значение по умолчанию:
nscache 65536
# Таймауты, можно оставить значение по умолчанию:
timeouts 1 5 30 60 180 1800 15 60
# путь к логам и формат лога, к имени лога будет добавляться дата создания
log /var/log/3proxy/3proxy.log D
logformat “- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T”
# сжимать логи при помощи gzip
archiver gz /usr/bin/gzip %F
# и хранить их 30 дней
rotate 30
# ограничить доступ по портам через http(s)-proxy
deny * * 127.0.0.1,192.168.1.1
allow * * * 80-88,8080-8088 HTTP
allow * * * 443,8443 HTTPS
allow * * * 21 FTP
# Установить ограничения на одновременные подключения, например на 32
maxconn 32
# запускаем socks
socks
# ограничиваем толшину канала для каждого
# пользователя dima и roman в 20000 bps
# а для egor 10000 bps
bandlimin 20000 dima,roman
bandlimin 10000 egor
# запускаем сервер от пользователя nobody
# (возможно в вашей ОС uid и gid пользователя nobody
# будут другими для их определения воспользуйтесь коммандой id nobody)
setgid 65534
setuid 65534
15.Запускаем для проверки
/usr/local/etc/3proxy/bin/3proxy /usr/local/etc/3proxy/3proxy.cfg
Перегружаем сервер командой reboot и проверяем работоспособность.
Засетапили мне на днях новый сервер с установленным на нём CentOS 5.2. Начав переносить на него сайты с другого сервера я столкнулся с проблемой: на сайтах, где присутствовал русский текст, вместо него отображались ромбики, квадратики и другие “кракозяблы”. Причём на сайтах между тегами head присутствовал meta http-equiv="Content-Type" content="text/html; charset=windows-1251". Но это не помогло. А ошибка исправилась просто: в файле /etc/httpd/conf/httpd.conf нужно закоментировать строку AddDefaultCharset UTF-8 После этого перезагружаем apache командой service httpd restart и любуемся на результат.
Вторая ошибка выскакивала при запуске/перезагрузке апача:
service httpd restart
Stopping httpd: [ OK ]
Starting httpd: httpd: apr_sockaddr_info_get() failed for 188-xxx-xxx-xxx.local
httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
Вначале узнаем наш hostname, для этого в шелле вводим:
hostname
У меня он имеет вид: ip-моего-сервера.local
Далее редактируем файл etc/hosts. Внизу файла добавим 192.168.0.111 188-xxx-xxx-xxx.local где вместо 188-xxx-xxx-xxx.local добавьте ваш hostname После этого перезагружаемся.
Notice: Undefined variable: [имя переменной] in …
Использование необъявленной переменной. Т.е. любой переменной перед использованием должно быть присвоено значение. Проверить существование переменной можно функцией isset.
Notice: Use of undefined constant [имя константы] - assumed ‘[имя константы]‘ …
Использование неизвестной константы. Возможно, какая-то строка не заключена в кавычки, из-за чего php интерпретировал её как константу.
Notice: Undefined index: [ключ элемента] in …
В массиве нет элемента с указанным ключом.
Notice: Undefined offset: [номер элемента] in …
В массиве нет элемента с указанным индексом (номером).
Notice: Only variable references should be returned by reference in …
“Начиная с PHP 4.4.0 и PHP 5.1.0, если код пытается вернуть по ссылке динамическое выражение или результат оператора new, будет выброжено предупреждение E_NOTICE” (c) php.net
Warning: [имя функции] [function.[имя функции]]: Too few arguments in …
Недостаточно аргументов для функции с переменным числом аргументов. Например, printf()
Warning: Cannot use a scalar value as an array in …
Возникает, когда переменной сначала было присвоено скалярное значение (число, строка), а потом к ней обратились как к массиву. Пример короче:$a = 1; $a[] = 1; Нужно сначала явно присвоить переменной массив: $a = array()
Warning: Invalid argument supplied for foreach() in …
Переданный для перебора аргумент не является ни массивом, ни объектом.
Fatal error: Call to undefined function [имя функции] in …
Вызов неизвестной функции. Возможно неподключена необходимая библиотека, возможно просто ошиблись в названии.
Fatal error: Unsupported operand types
Тип данных не поддерживает данной операции. Проверьте, не попытались ли вы поделить число на массив или сделать какую-нибудь другую глупость ![]()
Fatal error: Non-static method [класс]::[метод] cannot be called statically
Попытка вызвать не-статический метод как статический.
Fatal error: Non-abstract method [класс]::[метод] must contain body
Все методы кроме абстрактных должны иметь тело.
Fatal error: Call to private (protected) [класс]::[метод] from invalid context
Попытка вызвать private (protected) метод из области видимости, в которой он недоступен.
См. руководство: Область видимости
Fatal error: Cannot access protected property [класс]::$[атрибут]
см. выше
Fatal error: Constructor A::__construct() cannot be static
Конструктор не может быть статическим. Ну ни как ![]()
Fatal error: Cannot re-assign $this in …
Переменная $this зарезервирована для ссылки объекта на самого себя.
Fatal error: Using $this when not in object context in …
Использование $this вне объета невозможно
Fatal error: Call to a member function [имя функции] on a non-object in …
Переменная которая по идее должна содержать ссылку на объект, видимо содержит что-то другое, поэтому вызвать метод объекта невозможно.
Fatal error: Cannot access empty property in …
Невозможно получить доступ к пустому атрибуту объекта. Бывает, к примеру, если случайно обратиться к $object->$value вместо $object->value.
Fatal error: Access to undeclared static property: [класс]::[$атрибут] in …
Попытка обращения к необъявленному статическому свойству (атрибуту) класса
Fatal error: Undefined class constant [константа] in …
Попытка обращения к неизвестной константе класса
Fatal error: Cannot redeclare [имя функции] (previously declared in [/путь/к/файлу:№строки]) in …
Невозможно переопределить однажды объявленную функцию. Т.е. функция с таким именем уже существует. Если это пользовательская функция, указывается путь к файлу, где она была впервые описана. Такая ошибка может возникнуть при использовании include (но не include_once) - если файл с функцией случайно подключить дважды.
Fatal error: Uncaught exception ‘[имя класса-исключения]‘ with message ‘[текст сообщения]‘ in [источник исключения] Stack trace: [стек вызовов функций]
неперехваченное исключение.
СУБД MySQL
Warning: mysql_connect() [function.mysql-connect]: Access denied for user [пользователь]@[хост] (using password: [есть_ли_пароль]) in …
Не удалось подключиться к MySQL. Проверяйте параметры подключения.
Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in …
причина таже - отсутствие подключение к БД
Warning: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in …
Аргумент функции не является корректным результатом запроса. Видимо в запросе ошибка. Аналогично для mysql_fetch_assoc(), mysql_fetch_row(), mysql_num_rows() и др.
Warning: mysql_result(): Unable to jump to row [номер строки результата] …
Невозможно перейти к указанной строке в результах запроса.
Файловая система
Warning: fopen([имя_файла]) [function.fopen]: failed to open stream: No such file or directory in …
Не найден файл или директория. Аналогично для функций file(), file_get_contents(), readfile(), move_uploaded_file(), etc …
Warning: fopen([имя_файла]) [function.fopen]: failed to open stream: Permission denied in …
Нет прав доступа на требуемый файл.
Warning: fgets(): supplied argument is not a valid stream resource in …
Аргумент функции не является корректным потоком. Видило, при открытии файла произошла ошибка. Аналогично для функций fread(), feof(), fclose() и др.
Warning: [имя функции] [function.[имя функции]]: open_basedir restriction in effect. File([путь/к/файлу]) is not within the allowed path(s): ([разрешенные/директории]) in
Означает что указанный файл (директория) не входит в дерево директорий разрешенных опцией open_basedir (http://ru2.php.net/manual/ru/features.safe-mode.php).
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move ‘[откуда]‘ to ‘[куда]‘ in …
Невозможно переместить файл. Проверьте аргументы функции.
Fatal error: require_once() [function.require]: Failed opening required ['имя подключаемого файла'] …
require (require_once), в отличие от include (include_once) в случае неудачного подключения файла вызывает фатальную ошибку
Библиотека GD
Warning: imagecopyresized(): supplied argument is not a valid Image resource …
Первый аргумент функции не является корректным ресурсом изображения GD. Видимо произошла ошибка при создании изображения (imageCreate, imageCreateTrueColor) или при открытии изображения из файла (imageCreateFromJpeg, -Gif, -Png)
Warning: imagejpeg() [function.imagejpeg]: Unable to open ‘test.jpg’ for writing in …
Не удалось найти файл, указанный для сохранения изображения
Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in
Некорректно указаны размеры изображения
Заголовки
Warning: Cannot add header information - headers already sent by (output started at [/путь/к/файлу.php:№строки]) in …
скорее всего вызвали функцию header(), session_start() или setcookie() после echo…
[/путь/к/файлу.php:№строки] - место, где “начался” вывод (т.е. первый вызов функций print, echo, etc.)
Разбор кода
Parse error: syntax error, unexpected [токен] in …
Все ошибки, обнаруживаемые при разборе кода описать наверное невозможно, т.к. наворотить в коде можно что угодно… Всё же чаще всего - parse-ошибка означает что где-то забыта или поставлена лишняя скобка, кавычка, запятая, точка и т.п.
В сообщении парсер обозначает “токен” (token), с которым возможно связана ошибка - это те самые T_STRING, T_IF, T_VARIABLE и т.д. Со списком токенов можно ознакомится в официальном руководстве. Так же, вместо токена может стоять {, [ или другая языковая конструкция, из-за отсутсвия (или наличия) которой возможно возникла ошибка.
Несортированное
Warning: strpos() [function.strpos]: Offset not contained in string. in …
Отступ (третий аргумент функции) больше, чем длинна самой строки
Fatal error: Maximum execution time of 30 seconds exceeded in …
Превышено максимальное время выполнения php-сценария (max_execution_time)
Вы когда-нибудь задумывались над тем, как будет выглядеть ваш годовой доход в мировом масштабе? Т.е. в сравнении с доходами других людей. Много или мало мы получаем по сравнению с людьми из других стран? Недавно наткнулся на интересный сайт globalrichlist.com - измеритель вашего богатства. Вводите сумму, равную вашему годовому доходу, выбираете валюту (рубля нету, поэтому придётся в доллары пересчитать, курс к рублу уже 27,05 o_0) и кликаете “Show me the money!”. Не буду говорить на каком я оказался месте, скажу лишь, что место в топе меня разачаровало.
Я и не знал, что всё так плохо. Кстати, для того, что бы войти в топ хотябы 20млн. богатейших людей мира, по версии этого сайта, нужно зарабатывать ~ 150500 зелёных в год. Это ~ 412$ в день. Как же много в мире богатых…
Google намерен частично снять введенный им в 2004 году всемирный запрет на размещение рекламы интернет-казино и букмеркеров, пишет газета The Independent.
Новую рекламу смогут дать лишь европейские рекламодатели, имеющие соответствующую лицензию.
Сами рекламные объявления смогут в качестве эксперимента увидеть только британцы. Представители крупнейшего поисковика уже заручились соответствующим разрешением королевы Великобритании.
Англиканская церковь уже выступила с резкой критикой решения. Днем ранее были опубликованы данные, согласно которым число людей, обращающихся за помощь в преодолении зависимости от азартных игр, выросло на 25 процентов. Их средняя задолженность составляет 17500 фунтов стерлингов.
В Великобритании настороженно относятся к азартным играм через интернет. В мае 2008 года, например, регулирующие органы запретили рекламу онлайн-казино за пропаганду таких азартных игр и безответственного поведения игроков. В США интернет-казино с конца 2006 года вообще запрещены.
Компания Afilias, являющаяся администратором доменной зоны INFO, объявила об изменении политики управления. Речь идет об ужесточении правил относительно тех доменов, которые «замечены» в фишинге, рассылке спама, распространении вредоносного программного обеспечения, управлении бот-сетями и т. п.
Публичная доменная зона INFO предназначена для размещения информации о чем-либо: о частном лице, организации, товаре, услуге и т. п. Сегодня количество доменов второго уровня в ней превышает 5 миллионов штук. Зона INFO отличается очень низким уровнем безопасности. Согласно исследованиям специалистов 11,8% доменов в нем представляют собой угрозу посетителям. Особенно заметно их число выросло за последний год (с 7,5%).
Для того, чтобы исправить складывающуюся в зоне INFO ситуацию, ее администратор изменил политику управления. Теперь преследоваться будут все проявления мошенничества, включая фишинг, спам, распространение вредоносных программ, участие в создании бот-сетей и т. п. Сначала о проблеме будет сообщаться владельцу домена, после чего последний будет удален из DNS или информация о факте нарушения закона будет передана правоохранительным органам. Представители администратора заявляют, что «политика предполагает применение модернизированной системы обнаружения преступников и дальнейшее использование принудительных мер».
Google, празднующий в этом месяце 10 летний юбилей, объявил о старте проекта 10^100, на который потратитит 10 лямов на воплощение идей, способных изменить мир
Google предлагает всем желающим заявить о своих идеях на сайте проекта до 20 октября. Заявки принимаются на 25 языках. Из общего числа заявок Google выберет 100 наиболее достойных, по мнению компании, идей. Затем пользователям интернета будет предложено проголосовать за понравившиеся им идеи. По итогам голосования будет составлен шорт-лист из 20 претендентов. Специальная комиссия выберет из этого списка 5 финалистов, воплощение чьих идей будет профинансировано Google.
сайт проекта http://www.project10tothe100.com