Главная :: Форум :: Web ClipArt :: Поиск :: Статистика :: Топ 10 :: Публикация :: Рекомендовать
netadmin.ws
Панель управления Регистрция свободна! Календарь Список пользователей Часто задаваемые вопросы Поиск по форуму Архив скриптов Главная   
Форум сетевых администраторов
Форум сетевых администраторов Форум сетевых администраторов » Программирование » PHP » Оптимизация кода, и новые фичи
Страницы (3): [1] 2 3 »
Предыдущая тема     Следующая тема
Автор
Тема    Новая тема     Ответить на эту тему
zyablik
Участник
Средний рейтинг: 2.58 | Оценок: 12
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Mar 2003
Место проживания: Москва
Публикаций: 98
Статус: zyablik в оф-лайне
Оптимизация кода, и новые фичи [сообщение #58871]

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

ниже код скрипта:

Сообщение было отредактировано zyablik 30-01-2004 в 12:22

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 17-01-2004 09:29
Нажмите сюда для просмотра профайла zyablik Отправить Персональное сообщение zyablik Посетить домашнию страничку zyablik! Найти сообщения от zyablik Добавить zyablik в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
Nevermind
Участник+
Средний рейтинг: 4 | Оценок: 7
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Feb 2002
Место проживания: RU, VLadivostok
Публикаций: 145
Статус: Nevermind в оф-лайне
[сообщение #58896]

Скрипт будет глючить при отключенных register_globals - исправляй. Иначе об универсальности речи идти не может.

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 17-01-2004 15:04
Нажмите сюда для просмотра профайла Nevermind Отправить Персональное сообщение Nevermind Найти сообщения от Nevermind Добавить Nevermind в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
zyablik
Участник
Средний рейтинг: 2.58 | Оценок: 12
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Mar 2003
Место проживания: Москва
Публикаций: 98
Статус: zyablik в оф-лайне
[сообщение #58901]

а как бы это покрасивше сделать?
получилось что я так криво написал что испльзовал и метод GET & POST , а теперь туплю...

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 17-01-2004 16:05
Нажмите сюда для просмотра профайла zyablik Отправить Персональное сообщение zyablik Посетить домашнию страничку zyablik! Найти сообщения от zyablik Добавить zyablik в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
polo
Администратор
Средний рейтинг: 4.77 | Оценок: 106
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: May 2001
Место проживания:
Публикаций: 4642
Статус: polo в оф-лайне
[сообщение #58902]

Есть еще переменная $_REQUEST.

__________________
Всегда есть решение.

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 17-01-2004 16:14
Нажмите сюда для просмотра профайла polo Отправить Персональное сообщение polo Посетить домашнию страничку polo! Найти сообщения от polo Добавить polo в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
zyablik
Участник
Средний рейтинг: 2.58 | Оценок: 12
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Mar 2003
Место проживания: Москва
Публикаций: 98
Статус: zyablik в оф-лайне
[сообщение #58915]

polo спасибо. клевая переменная .. не знал о ней.


а еще предложения есть?

кстати почему то переносы строк плохо работают.. тоесть они постоянно увеличиваются..

__________________
http://www.best-pills-store.com

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 17-01-2004 18:57
Нажмите сюда для просмотра профайла zyablik Отправить Персональное сообщение zyablik Посетить домашнию страничку zyablik! Найти сообщения от zyablik Добавить zyablik в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
polo
Администратор
Средний рейтинг: 4.77 | Оценок: 106
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: May 2001
Место проживания:
Публикаций: 4642
Статус: polo в оф-лайне
[сообщение #58918]

quote:
кстати почему то переносы строк плохо работают.. тоесть они постоянно увеличиваются..

Ð_то ты про что?

__________________
Всегда есть решение.

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 17-01-2004 19:28
Нажмите сюда для просмотра профайла polo Отправить Персональное сообщение polo Посетить домашнию страничку polo! Найти сообщения от polo Добавить polo в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
SCHIZO
STFW
Средний рейтинг: 5 | Оценок: 8
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Jul 2002
Место проживания: Кольский п-ов
Публикаций: 305
Статус: SCHIZO в оф-лайне
[сообщение #58921]

вот несколько функций для работы с файлами, может пригодятся.

PHP:


/**
* @return bool
* @param $filename string
* @param $relative bool
* @desc Validate filename
*/

function is_filename($filename=' ',$relative=0)
{
    
$allowed = '[wd]'.preg_quote("./_");
    
    if (
eregi('^WIN(.*)',PHP_OS))
    
$allowed .= preg_quote(':');
    
    if (
$relative && preg_match('%(..)|(/./)*%i',$filename))
    return 
FALSE;
    
    if (!
eregi('[a-z]://(.*)',$filename))
    return(!
preg_match('%[^'.$allowed.'-]%i',$filename));
    
    return 
FALSE;
}

/**
 * @return 
 * @param $filename string
 * @desc Check file for read access
 */

function is_readable_file($filename=' ')
{
    if (
is_filename($filename))
        return(
is_readable($filename) && is_file($filename));
}

/**
 * @return bool
 * @param $filename string
 * @param $perms int
 * @desc Create dummy file with defined permissions
 */

function file_create($filename=' ',$perms=0640)
{
    if (
is_filename($filename))
    {
        if (!
file_exists($filename))
        {
            if (
touch($filename)) return chmod($filename,$perms);
        }
    }
    return 
false;
}

/**
 * @return mixed
 * @param $filename string
 * @param $mode char
 * @desc Return file descriptor if filename valid and file readable
 */

function file_open($filename=' ',$mode='r')
{
    if (
is_filename($filename) && is_readable($filename))
        return 
fopen($filename, $mode);
    return 
false;
    
}

/**
 * @return mixed
 * @param $filename string
 * @desc Return contens of a file if readable
 */

function file_read($filename=' ')
{
    if (
is_filename($filename) && is_readable($filename))
    {
        
$fd = file_open($filename,'r');
        if (
$fd)
        {
            
$file = fread($fd, filesize($filename));
            
fclose($fd);
            return 
$file;
        }
    }
    return 
false;
}

/**
 * @return bool
 * @param $filename string
 * @param $contens string
 * @desc Write $contens to $filename
 */

function file_write($filename=' ',$contens='')
{
    if (
is_filename($filename) && is_writeable($filename) && !empty($contens))
    {
        
$fd = file_open($filename,'w');
        if (
$fd)
        {
            if (
flock($fd,LOCK_EX,TRUE))
            {
                
set_file_buffer($fd,0);
                
fwrite($fd, $contens);
                
flock($fd,LOCK_UN);
                return 
fclose($fd);
            }
        }
    }
    return 
false;
}

/**
 * @return unknown
 * @param $filename unknown
 * @desc Delete file if valid name and permissions
 */

function file_delete($filename=' ')
{
    if (
is_filename($filename) && is_writeable($filename)) return unlink($filename);
}



SCHIZO добавил 17-01-2004 в 20:01:38:
еще парочка замечаний по коду
я как параноик относительно секурности и если знаю что какое то значение не должно менятся в процессе выполнения скрипта то пишу его в константу, например так:

PHP:

/ **************************************************
*************************
*
*   
Define most usabled constants from ENV
*
 **************************************************
*************************/

    
# Store software and protocol used both (client,server) sides
    
define('ENV_HTTP_CLIENT',   getenv('HTTP_USER_AGENT'));
    
define('ENV_HTTP_SERVER',   getenv('SERVER_SOFTWARE'));

    
# Store used protocol and method
     
define('ENV_HTTP_PROTOCOL',    strtolower(eregi_repla
ce
('/(.+)$','',getenv('SERVER_PROTOCOL'))));
     
define('ENV_HTTP_METHOD',    getenv('REQUEST_METHOD')
);

    
# Store server machine configuration
    
define('ENV_SERVER_ADDR',    getenv('SERVER_ADDR'));
    
define('ENV_SERVER_HOST',    getenv('HTTP_HOST'));
    
define('ENV_SERVER_PORT',    getenv('SERVER_PORT'));

    
# Store client machine configuration
    
define('ENV_CLIENT_ADDR',    getenv('REMOTE_ADDR'));
     
define('ENV_CLIENT_HOST',    gethostbyaddr(ENV_CLIENT
_ADDR
));
    
define('ENV_CLIENT_PORT',    getenv('REMOTE_PORT'));

    
# Store additional request related variables
     
define('ENV_REQUEST_URI',        getenv('REQUEST_URI'));

     
define('ENV_REQUEST_REFER',        getenv('HTTP_REFERER'
));
     
define('ENV_REQUEST_STRING',    getenv('QUERY_STRING'
));
     
define('ENV_REQUEST_COOKIES',    getenv('HTTP_COOKIE'
));

    
# Store script path and URL related variables
    
define('ENV_SCRIPT_FILE',    str_replace("",'/',getenv('SCRIPT_FILENAME')));
    
define('ENV_SCRIPT_NAME',    getenv('SCRIPT_NAME'));
    
define('ENV_SCRIPT_DIR',    dirname(ENV_SCRIPT_FILE));
    
define('ENV_SCRIPT_URI',    sprintf('%s://%s',ENV_HTTP_PROTOCOL,ENV_SERVER_HOST.ENV_REQUEST_URI));



переменная _REQUEST не позволяет определить откуда пришли значения, с формы на твоем сайте после проверки рефера или юзер просто в адресной строке накорябал чо хотел... фантазия и настойчивость некоторых просто поражает. Ð_то особенно критично при работе с БД или файловой системой.

пример обработки запроса

PHP:

// ... этот кусок не будет работать без
// определенных констант JK_*, ENV_* и VAR_*
//которые в нем используются
/ **************************************************
*************************
*
*   
Low level handling request - get GPC vars
*
 **************************************************
*************************/

    
# Initialize user request vars
    
switch (ENV_HTTP_METHOD)
    {
        case (
JK_ACTION_READ):
            
$JK_FILES = false;
            if (!empty(${
VAR_GET})) $JK_PARAMS =& ${VAR_GET};
            break;
        case (
JK_ACTION_EXEC):
            if (!empty(${
VAR_POST})) $JK_PARAMS =& ${VAR_POST};
            !empty(${
VAR_FILES})
                ?
$JK_FILES =& ${VAR_FILES}
                :
$JK_FILES = false;
            break;
        case (
JK_ACTION_INFO):
            
$date    = date('D, d F Y H:i:s').' GMT';
            
$header  = "200 Document Followsrn";
            
$header .= "Last-modifed: ".$date."rnrn";
            
header('HTTP/1.1 '.$header);
            exit();
        default:
            
$header  = "405 Method Not Allowedrn";
            
$header .= "Allow: GET,POST,HEAD,INFOrnrn";
            
header('HTTP/1.1 '.$header);
            exit();
    }

    
# initialise JK_PARAMS var if not initialize
    
if (empty($JK_PARAMS)) $JK_PARAMS = FALSE;

    
# initialize JK_COOKIES var
    
!empty(${VAR_COOKIE})
        ?
$JK_COOKIE =& ${VAR_COOKIE}
        :
$JK_COOKIE = false;



SCHIZO добавил 17-01-2004 в 20:17:17:
и еще по стилю...

при наличии функций для работы с фалами можно использовать switch вместо многократного if
код будет смотрется гораздо логичнее

..вместо

PHP:

if ($act == 'foo') echo 'bla-bla-bla';
if (
$act == 'bar') echo 'bla1-bla1-bla1';
if (
$act == 'com') echo '_bla-_bla-_bla';


вот так..

PHP:

switch ($act) // обрабаотываем переменную $act
    
{
        case (
'foo'):
            echo 
'bla-bla-bla';
            break;
        case (
'bar'):
            echo 
'bla1-bla1-bla1';
            break;
        case (
'com'):
            echo 
'_bla-_bla-_bla';
            break;
        default:
            return(
null);
     }



SCHIZO добавил 17-01-2004 в 20:20:37:
я от вас не отстану... =)
что мы здесь видим?

PHP:

if($act=='delete') {
   
unlink($root.$tpl);
   echo 
"FILE ".$tpl." DELETED ";
}


..а то что независимо от результата выполнения команды unlink все равно будет сообщено что файл удален..
..вот на такие штуки код надо проверить

SCHIZO добавил 17-01-2004 в 20:24:12:
весь HTML с переменными значениями лучше сразу запихать в переменные а потом когда надо выводить? делать это при помощи форматной строки

__________________
FAQ OFF

Сообщение было отредактировано SCHIZO 17-01-2004 в 20:09

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 17-01-2004 19:45
Нажмите сюда для просмотра профайла SCHIZO Отправить Персональное сообщение SCHIZO Посетить домашнию страничку SCHIZO! Найти сообщения от SCHIZO Добавить SCHIZO в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
zyablik
Участник
Средний рейтинг: 2.58 | Оценок: 12
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Mar 2003
Место проживания: Москва
Публикаций: 98
Статус: zyablik в оф-лайне
[сообщение #58942]

бррр... ошарашен количеством приведенной инфы.. буду разбираться....

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

zyablik добавил 17-01-2004 в 23:30:53:

quote:
Первоначальное сообщение от polo
Ð_то ты про что?



например был текст
quote:
йцуйцуйцу(перенос)
йцуйцуйц(перенос)
уйцуйцуйцу(перенос)
йцуйцуйцу


после сохранения становистя

quote:
йцуйцуйцу(перенос)(пере
нос)

йцуйцуйц(перенос)(перенос)

уйцуйцуйцу(перенос)(переноÑ
�)

йцуйцуйцу

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 17-01-2004 23:23
Нажмите сюда для просмотра профайла zyablik Отправить Персональное сообщение zyablik Посетить домашнию страничку zyablik! Найти сообщения от zyablik Добавить zyablik в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
SCHIZO
STFW
Средний рейтинг: 5 | Оценок: 8
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Jul 2002
Место проживания: Кольский п-ов
Публикаций: 305
Статус: SCHIZO в оф-лайне
[сообщение #58947]

перенос какой? win (rn) или uinx (n)?

SCHIZO добавил 18-01-2004 в 02:03:55:
всегда TRUE

PHP:


while($entry=$d->read())


по моему надо так...

PHP:

while($entry==$d->read())


это же условие а не выражение присваивания...


PHP:

if($act=='create') {
   
$fp = fopen($root.$new_file.".html", "a");


используется неинициализированная переменная $new_file, если REGISTER GLOBALS On можно через GET записать в нее что угодно, к тому же эта переменная используется в коде всего единожды. Она вообще нужна в таком случае?


PHP:

$root 
= $_SERVER["DOCUMENT_ROOT"]."/txt/";
$act = $_REQUEST["act"];
$tpl = $_REQUEST["tpl"];
$rename_file = $_REQUEST["rename_file"];
$status = $_REQUEST["status"];
$current = $_REQUEST["current"];



эти переменные всегда присутсвуют в запросе? если нет надо проверять на ненулевое значение !empty($var), тогда ПХП нотисы не будет выдавать (в отличии от isset($var))


PHP:

$d 
= dir($root);


ты уверен что $_SERVER["DOCUMENT_ROOT"]."/txt/" существует? Проверить на существование, и в случае отсутсвия по надобности создать. Только потом открывать.

__________________
FAQ OFF

Сообщение было отредактировано SCHIZO 18-01-2004 в 02:12

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 18-01-2004 01:11
Нажмите сюда для просмотра профайла SCHIZO Отправить Персональное сообщение SCHIZO Посетить домашнию страничку SCHIZO! Найти сообщения от SCHIZO Добавить SCHIZO в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
whisk
Участник
Средний рейтинг: 4 | Оценок: 1

Зарегистрирован: Oct 2003
Место проживания:
Публикаций: 31
Статус: whisk в оф-лайне
[сообщение #59554]

Нельзя забывать про то, что файл нужно блокировать перед записью.

PHP:


$fp 
= fopen($file);
flock($fp, 3);
....
flock($fp, 2);
fclose($fp);




PHP:

while($entry=$d->read())


- это верная запись. Операция присваивания возвращает результат присваивания. Хотя я в таких случаях обычно пишу что-то вроде

PHP:

while (($entry=$d->read()) !== false)

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 24-01-2004 14:50
Нажмите сюда для просмотра профайла whisk Отправить Персональное сообщение whisk Найти сообщения от whisk Добавить whisk в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
SCHIZO
STFW
Средний рейтинг: 5 | Оценок: 8
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Jul 2002
Место проживания: Кольский п-ов
Публикаций: 305
Статус: SCHIZO в оф-лайне
[сообщение #59652]

...насчет функций чтения файла в строку и записи строки в файл:
http://www.php.net/manual/en/function.file-get-contents.php
http://www.php.net/manual/en/function.file-put-contents.php

__________________
FAQ OFF

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 26-01-2004 01:52
Нажмите сюда для просмотра профайла SCHIZO Отправить Персональное сообщение SCHIZO Посетить домашнию страничку SCHIZO! Найти сообщения от SCHIZO Добавить SCHIZO в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
pll
Участник+

Зарегистрирован: Sep 2002
Место проживания:
Публикаций: 91
Статус: pll в оф-лайне
[сообщение #59702]

вроде нормально =)
покрайней мере как ни странно работает

Сообщение было отредактировано pll 28-01-2004 в 02:41

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 28-01-2004 02:30
Нажмите сюда для просмотра профайла pll Отправить Персональное сообщение pll Найти сообщения от pll Добавить pll в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
zyablik
Участник
Средний рейтинг: 2.58 | Оценок: 12
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Mar 2003
Место проживания: Москва
Публикаций: 98
Статус: zyablik в оф-лайне
[сообщение #59724]

А что, ни у кого нет предложений по поводу новых фич?

quote:
весь HTML с переменными значениями лучше сразу запихать в переменные а потом когда надо выводить? делать это при помощи форматной строки
приведи простенький пример как это делается?

__________________
http://www.best-pills-store.com

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 28-01-2004 11:56
Нажмите сюда для просмотра профайла zyablik Отправить Персональное сообщение zyablik Посетить домашнию страничку zyablik! Найти сообщения от zyablik Добавить zyablik в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
polo
Администратор
Средний рейтинг: 4.77 | Оценок: 106
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: May 2001
Место проживания:
Публикаций: 4642
Статус: polo в оф-лайне
[сообщение #59749]

?>
html код
<?php
php код
?>

__________________
Всегда есть решение.

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 28-01-2004 21:07
Нажмите сюда для просмотра профайла polo Отправить Персональное сообщение polo Посетить домашнию страничку polo! Найти сообщения от polo Добавить polo в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
zyablik
Участник
Средний рейтинг: 2.58 | Оценок: 12
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Mar 2003
Место проживания: Москва
Публикаций: 98
Статус: zyablik в оф-лайне
а скрипт то растет.... [сообщение #59886]

добавил красивостей, функций, перенес почти весь хтмл в переменные.

вроде все впорядке, но как то неудобно...


(если вдруг кто пользоваться будет - напишите здесь )

Файл: wildcat.txt
Был скачан 12 раз(а).

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 30-01-2004 12:28
Нажмите сюда для просмотра профайла zyablik Отправить Персональное сообщение zyablik Посетить домашнию страничку zyablik! Найти сообщения от zyablik Добавить zyablik в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя

Страницы (3): [1] 2 3 »


Формат времени GMT. Текущее время 13:35.
Новая тема   Ответить на эту тему [ Версия для печати Печать | Отправить эту страницу другу/знакомому! Отправить | Получать уведомления об обновлении этой темы Подписка ] Предыдущая тема     Следующая тема
Навигация по форуму:
Оценка темы:

Правила форума:
Вы не можете создавать новые темы.
Вы не можете отвечать на существующие темы.
Вы не можете прикреплять файлы.
Вы не можете редактировать свои сообщения.
HTML теги выкл.
Спец. код вкл.
Смайлики вкл.
[IMG] тег выкл.
 

Page generated in 2.34512901 seconds (99.74% PHP - 0.26% MySQL) with 26 queries.


  Главная :: Форум :: Web ClipArt :: Поиск :: Статистика :: Топ 10 :: Публикация :: Рекомендовать
©NetAdmin.ws, 2001-2026.
Powered by: vBulletin
Copyright ©2000, 2001, Jelsoft Enterprises Limited.