С нами с 17.06.09
Сообщения: 3
|
Добавлено: 18/06/09 в 15:12 |
Пишу различные проекты любой сложности на php.
Что знаю из основного :
Php со всеми тонкостями и деталями
+ различные шаблонизаторы типа smarty , и все что связано с оптимизацией php memcache , использование nginx (x-accel-redirect например) и тд
Mysql 4-5 native,
PostgreSQL 8 native,
adodb
JavaScript + ajax (jquery или JsHttpRequest)
WSDL ( формат для передачи данных между php (и не только) и различными программами на C++ и тд)
при необходимости могу
Администрирование сервера: установка сервера с 0
Верстка дизайнов на div
С чем сталкивался :
русский adult наверное в любом проявлении (платники, подключение биллингов и тд)
знакомства dating pro правда не лицензионный переделывал под нужды заказчика
системы управления трафиком типа redtram, readme и им подобных
"софтверная тема" админки ботов ( база выдерживала около миллиона коннектов в сутки ) и все что касается "софта"
разработка безопасности сайта (различные методы защиты сайта против хакеров) естественно тех сайтов которые не изначально делал
и остальное по мелочи, типа тесты
Если есть предложение о долгосрочном сотрудничестве тоже можно рассмотреть.
Для особо не доверчивых могу выполнить тестовое задание естественно в пределах разумного
ICQ: 589888988
|
|
|
|
С нами с 01.03.07
Сообщения: 304
Рейтинг: 223
|
Добавлено: 19/06/09 в 21:23 |
заказал у человека скрипт вчера, спамить в свои блого - админки текста, качественно сделал , прогер адекватный
|
|
|
|
С нами с 17.06.09
Сообщения: 3
|
Добавлено: 20/06/09 в 13:09 |
пример wsdl , выдержки
Код: |
<message name="GetCatList">
<part name="uid" type="xsd:int"/>
</message>
<message name="GetCatListResponse">
<part name="GetCatListReturn" type="typens:ResultArray"/>
</message>
<message name="GetCatListResponse">
<part name="GetCatListReturn" type="typens:ResultArray"/>
</message>
<complexType name="ContentElement">
<all>
<element name="Cat" type="typens:ArrayOfInt"/>
<element name="ID" type="xsd:int"/>
<element name="Previews" type="typens:ArrayOfString"/>
<element name="Type" type="xsd:int"/>
<element name="Files" type="typens:ArrayOfString"/>
<element name="PRICE" type="typens:PriceClass"/>
<element name="PROPERTIES" type="typens:PropertiesElementArray"/>
</all>
</complexType>
<complexType name="ContentArray">
<sequence>
<element name="ContentElement" type="typens:ContentElement" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="ResultArray">
<sequence>
<element name="ResultElement" type="typens:ResultElement" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
|
небольшой пример php + postgres
Код: |
ini_set("soap.wsdl_cache_enabled", "1");
include($_SERVER['DOCUMENT_ROOT']."/common.php") ;
$cashe_time=0.5;
if(defined("IS_ADMIN_AREA"))
{
$cashe_time=0;
}
define("CASHE_TIME",$cashe_time);
define("DAYTOSEE", 5);
// время доступа к просмотру
define("TIMETOSEE", 86400 * DAYTOSEE);
class catalog {
private $memcache;
private $partner=0;
private $partner_site=1;
private $bay_type=1;
private $database ='';
private $util='';
private $skey='000er7392_09737yhdndn';
public $option=array();
function __construct(){
require_once(MAIN_PATH."includes/CUtil.class.php");
$this->util = new CUtil();
require_once(MAIN_PATH."includes/CDatabase.class.php");
$this->database= new CDatabase();
$this->InitMemcache();
}
/**
* внутренняя аутентификация
*
* @param unknown_type $uid
* @return unknown
*/
function _getInsideAuth ( $uid=1, $strong=0,$sh_strong='') {
$usArr = @unserialize($this->_getCashe("a_".$uid));
$auth=false;
if(is_array($usArr))
if(sizeof($usArr))
{
if($strong)
{
if( $usArr["CODEWORD"] != $sh_strong)
{
$auth=false;
}else
{
$auth=true;
}
}else
{
$auth=true;
}
}
return $auth;
}
/**
* выход юзера
*
* @param id юзера $uid
*/
function LogOut($uid=1)
{
$this->_setCashe("a_".$uid,serialize(array()),0);
$sql="SELECT extract('epoch' from ctime) as ctime,codeword FROM cl_usrnow WHERE uid=".$uid." LIMIT 1";
$rez = $this->database->query($sql);
$obj = @$this->database->getObject($rez);
if(isset($obj->ctime))
{
if ( time()-$obj->ctime > TIMETOSEE)
{
$sql="DELETE FROM cl_usrnow WHERE uid = ".$uid." ";
$this->database->query($sql);
}
}
}
/**
* GetCatList функция генерации меню каталога
*
* @param int $uid - ID user передается для локализации меню на различные языки
* @return массив параметров
*
* Категории уже идут в нужном порядке
* ID => id категори ,
* NAME => ИМЯ категории ,
* COUNT => количество элементов в категории,
* PARENT_ID => родительская категория
*
*/
function GetCatList ( $uid=1) {
$arCat=array();
if(!defined("IS_ADMIN_AREA"))
{
if(!$this->option =@unserialize($this->util->getCashe('Category',CASHE_TIME,'category')) )
{
$this->_getCategory($arCat,$uid);
$this->util->setCashe('Category',serialize($this->option),'category') ;
}
}else
{
$this->_getCategory($arCat,$uid);
}
return $this->option;
}
private function _getCategoryForContent ($id=1 ) {
$sql="SELECT * FROM cl_categ_fl_union WHERE cl_categ_fl_union.contentid=".$id." ";
$rezult = $this->database->query($sql);
$arrCat=array();
while ($obj = $this->database->getObject($rezult)) {
$arrCat[] =$obj->cat;
}
return $arrCat;
}
/**
* Функция логина
*
* @param unknown_type $login
* @param unknown_type $pass
* @param unknown_type $codeword
* @param unknown_type $MAC
* @return unknown
*/
function Login ( $login='', $pass='', $codeword='', $MAC='') {
$uid=0;
$arrError=array();
$arrIpError=array();
$login =$this->util->GetParam($login,'');
$codeword =$this->util->GetParam($codeword,'');
$pass =$this->util->GetParam($pass,'');
$usArr = @unserialize($this->_getCashe("access_".$login));
$ips =$this->GetIp();
$ipArr = @unserialize($this->_getCashe("aip_".$ips));
$block = false;
/**
* 10 попыток в течении пол дня с одного IP
*/
if(is_array($ipArr))
{
if(isset($ipArr["CNT"]))
$ipArr["CNT"]++;
else
$ipArr["CNT"]=1;
$arrIpError =$ipArr;
if($ipArr["CNT"] >10 )
$block =true;
}
/**
* блокировка на один логин может быть доступ только с 5 разных IP
*/
if(is_array($usArr))
{
$arrError=$usArr;
if(isset($arrError["cnt"]))
{
$arrError["cnt"]++;
}
else
{
$arrError["cnt"]=1;
}
if(isset($arrError["IP"][$ips]))
$arrError["IP"][$ips]++;
else
$arrError["IP"][$ips]=1;
if($arrError["cnt"] >10)
{
$block=true;
}else
{
if(isset($arrError["IP"][$ips]))
{
if(sizeof($arrError["IP"]) > 5)
{
$block=true;
}
}
}
}
if( !$block and strlen($pass) == 40 )
{
$sql="SELECT uid,first_login
FROM
cl_userlogin
WHERE
login='".$login."'
and UPPER(pass)='".$pass."'
LIMIT
1
";
$rezult = $this->database->query($sql);
$obj = @$this->database->getObject($rezult);
if(isset($obj->uid))
{
$uid=(int)$obj->uid;
}
if($uid)
{
$this->_setCashe("access_".$login,'',0);
$this->GetUserNow( $uid , $codeword );
if($obj->first_login)
{
$this->RefUsers($uid,$MAC);
}
$this->setMac($uid,$MAC,$ips);
}
}
if(!$uid)
{
$this->_setCashe("access_".$login,serialize($arrError),1);
}
$this->_setCashe("aip_".$ips,serialize($arrIpError),0.5);
return $uid;
}
|
|
|
|
|
С нами с 27.03.09
Сообщения: 155
Рейтинг: 320
|
Добавлено: 20/06/09 в 14:13 |
ооо. как круто
|
|
|
|
С нами с 16.04.05
Сообщения: 754
Рейтинг: 352
|
Добавлено: 20/06/09 в 23:33 |
Классы пишутся с большой буквы.
__construct используют в абстрактных и т.д., там где функция класса будет другой. Тут оно не при чём.
Код: | $cashe_time=0.5;
if(defined("IS_ADMIN_AREA"))
{
$cashe_time=0;
}
define("CASHE_TIME",$cashe_time); |
меняем на
Код: | define("CASHE_TIME", defined("IS_ADMIN_AREA") ? 0 : 0.5); |
константа MAIN_PATH не объявлена (не будет твой скрипт работать..)
После запятой следует пробел (правила русского языка).
у нас теперь есть дефолтные юзеры или юзеры которым не нужно представляться? (так - же относится к логину и паролю далее).
Код: |
if(is_array($usArr))
if(sizeof($usArr))
|
меняем на
Код: | if(is_array($usArr) && sizeof($usArr)) |
Код: | if(isset($obj->ctime))
{
if ( time()-$obj->ctime > TIMETOSEE)
{ |
как и все последующие двойные ифы переписывает аналогично, так как проверка одной истины, в два этапа, а не двух истин.
Код: | function Login ( $login='', $pass='', $codeword='', $MAC='') {
$uid=0;
$arrError=array();
$arrIpError=array();
$login =$this->util->GetParam($login,'');
$codeword =$this->util->GetParam($codeword,'');
$pass =$this->util->GetParam($pass,''); |
Это очистка параметров?
(дальше читать не стал)
|
|
|
|
С нами с 25.11.05
Сообщения: 25
Рейтинг: 7
|
Добавлено: 22/06/09 в 10:57 |
Цитата: | __construct используют в абстрактных и т.д., там где функция класса будет другой. Тут оно не при чём. |
Вообще-то __construct это пхп5 конструктор. Использовать classname() - deprecated с пхп5.
А резюмируя приведенный код - каменты на русском не пишут, ляпы в phpdoc, небрежное форматирование и работа с ооп в целом.
Непонятно что за класс с работой с базой, плейсхолдеров нет, экранирования нет (превед sql injection?).
Ну зато работа с WSDL и Memcache перевешивает все недостатки в коде
|
|
|
|
С нами с 17.06.09
Сообщения: 3
|
Добавлено: 22/06/09 в 13:28 |
nucleus писал: | Вообще-то __construct это пхп5 конструктор. Использовать classname() - deprecated с пхп5.
А резюмируя приведенный код - каменты на русском не пишут, ляпы в phpdoc, небрежное форматирование и работа с ооп в целом.
Непонятно что за класс с работой с базой, плейсхолдеров нет, экранирования нет (превед sql injection?).
Ну зато работа с WSDL и Memcache перевешивает все недостатки в коде |
Цитата: | экранирования нет (превед sql injection?). |
хочешь проверить насчет injection, можно написать тестовый скриптик если сможешь взломать удачи тебе. Пока никто не смог.
Можешь написать скрипт который потенциально уязвимый. А я просто обрабатываю все входящие переменные вот этой функцией. Если после этого скрипт останется уязвимым с меня 100$
Цитата: | каменты на русском не пишут |
Коментарии пишу на русском , потому что пишу в основном для русских. И далеко не все переводят на английском.
Цитата: | Непонятно что за класс с работой с базой |
. А я и не собирался тут весь проект выкладывать. Даже мысли не было.
Цитата: | Вообще-то __construct это пхп5 конструктор. Использовать classname() - deprecated с пхп5. |
это к чему ? можно конечно и classname() но для чего ? там куда я писал это стояло php5.
Цитата: | константа MAIN_PATH не объявлена (не будет твой скрипт работать..) |
еще раз повторяю я не собирался и не собираюсь выкладывать сюда ВЕСЬ проект. Там много чего не объявлено. В том что ты видишь.
|
|
|
|
С нами с 13.09.06
Сообщения: 13
Рейтинг: 5
|
Добавлено: 29/07/09 в 14:09 |
Заказывал у Sergey00 скрипт. Работу делал только в свободное время, постоянно проявлялась куча багов, которые он так не исправил до конца. Скрипт не доделал и уже 6 дней его в ICQ нет, на сообщения не отвечает. Сложилось ощущение похуистического отношения к работе.
|
|
|
|