1. Вы находитесь в архивной версии форума xaker.name. Здесь собраны темы с 2007 по 2012 год, большинство инструкций и мануалов уже неактуальны.
    Скрыть объявление

Задаем вопросы по РНР

Тема в разделе "PHP, Perl, web-программирование", создана пользователем b3, 26 ноя 2008.

  1. b3

    b3 Продвинутый

    Регистрация:
    8 окт 2007
    Сообщения:
    142
    Симпатии:
    104
    Баллы:
    0
    Задаем свои вопросы, получаем ответы. Вопросы связаные только с РНР кодингом, оффтоп и все что не по теме будет мгновенно удаляться.
    Правила темы:
    1. Не обсуждаються редакторы, хостинги, литература.
    2. РНР код размещать в ББ коде [РНР]тут код[/РНР]
     
    2 пользователям это понравилось.
  2. Robo

    Robo ░░▒▓█▓▒░░ Модератор

    Регистрация:
    10 авг 2007
    Сообщения:
    301
    Симпатии:
    169
    Баллы:
    0
    Интересное поведение функции readdir() на файловых системах фат32! Есть код:

    PHP:
    <?php
    $file 
    fopen ("config.ini","r");
    $path fgets ($file);
    fclose ($file);

    if (
    strlen($path) == 0)
        {

                       exit(
    "Enter path in config.ini");        
                       
    sleep (3);
            
        }
    else
        {

    chdir($path);

    $dir opendir($path);
    while (
    false != ($file readdir($dir)))
        {
           if ( (
    $file !=".") && ($file != "..") )
            {
              
            
    clearstatcache();
            echo 
    "Now processing file -> ".$file."\n";   
            
    rename ($file,date("j.n.Y  H.i.s",fileatime($file))." ".$file);
            
            }
        }
    closedir($dir);
    clearstatcache();
    echo 
    "All operations done! -> OK";
    sleep (10);
        }
        
    ?>
    По идее каждый вызов readdir() должен возвращать следующий элемент папки (файл или директорий), но на фат32 системах замечается весьма неочевидный факт. Дело в том что после некоторого порога функция начинает возвращать файлы, которая она возвращала некоторое время назад. То есть некоторые элементы возвращаются по нескольку раз, что конечно меня не устраивает! На NTFS системе всё работает отлично.

    Вопросы:

    • Почему так происходит?
    • Как этого избежать?
    • (Опционально) Можно добавить свой кусок кода, который бы переименовывал каждый файл, в дату его создания (мой кусок сверху).


    Спасибо.
     
  3. Robo

    Robo ░░▒▓█▓▒░░ Модератор

    Регистрация:
    10 авг 2007
    Сообщения:
    301
    Симпатии:
    169
    Баллы:
    0
    Вариант рабочий, через функцию scandir. Функции scandir до PHP5 небыло, так что вот она:

    PHP:
    function scandir_r($directory$sorting_order 0)
        {
            if (!
    is_string($directory)) {
                
    trigger_error('scandir() expects parameter 1 to be string, ' gettype($directory) . ' given'E_USER_WARNING);
                return;
            }

            if (!
    is_int($sorting_order) && !is_bool($sorting_order)) {
                
    trigger_error('scandir() expects parameter 2 to be long, ' gettype($sorting_order) . ' given'E_USER_WARNING);
                return;
            }

            if (!
    is_dir($directory) || (false === $fh = @opendir($directory))) {
                
    trigger_error('scandir() failed to open dir: Invalid argument'E_USER_WARNING);
                return 
    false;
            }

            
    $files = array ();
            while (
    false !== ($filename readdir($fh))) {
                
    $files[] = $filename;
            }

            
    closedir($fh);

            if (
    $sorting_order == 1) {
                
    rsort($files);
            } else {
                
    sort($files);
            }

            return 
    $files;
        }
    Теперь код:

    PHP:

    function rename_files (&$item$key)
        {
            if ((
    $item != ".") && ($item != ".."))
                {
                    
                     echo (
    "Processing file  ->  "."$item  ->  OK\n");
                     
    rename ($item,date("j.n.Y - H.i.s",filemtime($item))." I ".$item);
                     
                
                }

        }


    $file fopen ("config.ini","r");
    $path fgets ($file);
    fclose ($file);

    $fil scandir_r ("$path",0);
    chdir("$path");
    array_walk ($fil,'rename_files');
    sleep(10);
    ?>
     
  4. b3

    b3 Продвинутый

    Регистрация:
    8 окт 2007
    Сообщения:
    142
    Симпатии:
    104
    Баллы:
    0
    Зачем ты поставил sleep в самом конце файла
     
  5. Robo

    Robo ░░▒▓█▓▒░░ Модератор

    Регистрация:
    10 авг 2007
    Сообщения:
    301
    Симпатии:
    169
    Баллы:
    0
    =\ Угадай?! Наверное чтобы у меня консоль не закрывалась 10 сек ))))
     
  6. b3

    b3 Продвинутый

    Регистрация:
    8 окт 2007
    Сообщения:
    142
    Симпатии:
    104
    Баллы:
    0
    Понимаю когда в цикле выполняеться определенное действие, к примеру брут, делают "шаг" после каждых 10 попыток идет слип 2-3 секунды, дабы сервер не выдал 502, но у тебя же в самом конце слип, я немогу понять смысл его, консоль не закрываеться, но и действия никакие не происходят. Возможно я неправ, недопонял тебя)
     
  7. Web-Evt

    Web-Evt Иллюзор ..::V.I.P::..

    Регистрация:
    31 май 2007
    Сообщения:
    13
    Симпатии:
    86
    Баллы:
    0
    b3,
    он запускает скрипт php не через апач, а через консоль. Он просто хочет увидеть результаты работы скрипта перед тем, как консоль закроется(однако, не понимаю почему она у тебя закрывается :) Имхо можно как-то это предотвратить и не извращаться со слиипом).
     
  8. wriwel

    wriwel «ёлки!» Продвинутый

    Регистрация:
    21 фев 2007
    Сообщения:
    180
    Симпатии:
    149
    Баллы:
    0
    Web-Evt,
    ностальгия... ms-dos.. я тоже любитель паузу вписать
     
  9. b3

    b3 Продвинутый

    Регистрация:
    8 окт 2007
    Сообщения:
    142
    Симпатии:
    104
    Баллы:
    0
    Извращенцы))) Пишите результат в .тхт)) дайте интерпретатору отдохнуть)
     
    1 человеку нравится это.
  10. Gyurza

    Gyurza Новичок

    Регистрация:
    3 дек 2008
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    0
    как из memcached получить пхп код?
     
  11. ~|~евто|-|

    ~|~евто|-| Silentium ..::V.I.P::..

    Регистрация:
    26 май 2007
    Сообщения:
    30
    Симпатии:
    377
    Баллы:
    0
    Все оч. просто)
    Скрипт запускается на выполнение не из cmd, а вписыванием в run(выполнить) необходимых параметров)
     
  12. Web-Evt

    Web-Evt Иллюзор ..::V.I.P::..

    Регистрация:
    31 май 2007
    Сообщения:
    13
    Симпатии:
    86
    Баллы:
    0
    Gyurza,
     
  13. xeran

    xeran Продвинутый

    Регистрация:
    28 июл 2008
    Сообщения:
    109
    Симпатии:
    45
    Баллы:
    0
    приведу упрощенный пример моего кода.
    index.php
    PHP:
    {хеадер}
    <?
    include ('inc.php');
    ?>
    {футер}
    inc.php
    PHP:
    <?
    die(
    "хз");
    ?>
    после инклюда как понятно футер не грузится.
    не ужели надо нагромождать код if else ?
     
    Последнее редактирование: 2 авг 2009
  14. b3

    b3 Продвинутый

    Регистрация:
    8 окт 2007
    Сообщения:
    142
    Симпатии:
    104
    Баллы:
    0
    Тоже сталкивался с такой проблеммой, но я решил её таким способом:
    PHP:
    <?php include('header.php');?>
    <?php 
    include('function.php');?>
    <?php
    if_auth
    ();
    if(empty(
    $_POST['login']) || empty($_POST['password']))
        {
                
    form_aut();
                include_once(
    'footer.php');
                exit;
        }
    include_once(
    'db_connect.php');    
    $sql "SELECT id FROM users WHERE login='".addslashes($_POST['login'])."' AND pass='".addslashes($_POST['password'])."';";
    $result mysql_query($sql);    
        if (!
    $result) {
            echo 
    "Could not successfully run query ($sql) from DB: " mysql_error();
            include_once(
    'footer.php');
            exit;
        }
        
        if (
    mysql_num_rows($result) == 0) {
            echo 
    '<p class="warning">Неверный логин или пароль</p>';
            
    form_aut();
            include_once(
    'footer.php');
            exit;
        } else {
        
    $result mysql_query("SELECT * FROM users WHERE login='$_POST[login]' AND pass='$_POST[password]';");    
            while (
    $row mysql_fetch_assoc($result)) {
            
    $_SESSION['id'] = $row["id"];
            
    $_SESSION['login'] = $row["login"];
            
    $_SESSION['pass'] = $row["pass"];
            
    $_SESSION['name'] = $row["name"];
            
    $_SESSION['email'] = $row["email"];
        }
            
        
    mysql_free_result($result);
        
    header("location: index.php");
        exit;
        }
        
    ?>
    <?php 
    include_once('footer.php');?>
     
  15. xeran

    xeran Продвинутый

    Регистрация:
    28 июл 2008
    Сообщения:
    109
    Симпатии:
    45
    Баллы:
    0
    b3,
    Блин как всегда все просто, надо маленько смекалки только.
    Как смогу плюсану.
     
  16. xeran

    xeran Продвинутый

    Регистрация:
    28 июл 2008
    Сообщения:
    109
    Симпатии:
    45
    Баллы:
    0
    Опять вопрос по инклуду
    вот упрощнный код:
    index.php
    PHP:
    <?
    echo 
    '<table width=1000 border=0 CELLPADDING=0 CELLSPACING=0><tr><td width=50></td><td>';
    include 
    'inc.php';
    ?>
    inc.php
    PHP:
    <?
    $pass="pass"
    setcookie("moder"$pass);
    ?>
    Будет выдаватся ошибка
    почитал про это говорят что это изза пробелов перед <? но их нет.
    Как решить проблемку?
     
  17. b3

    b3 Продвинутый

    Регистрация:
    8 окт 2007
    Сообщения:
    142
    Симпатии:
    104
    Баллы:
    0
    Поменять местами инклуд и Ехо, почитай насчет Заголовков (куки, хедеры) их нужно выводить в первую очередь.
     
  18. xeran

    xeran Продвинутый

    Регистрация:
    28 июл 2008
    Сообщения:
    109
    Симпатии:
    45
    Баллы:
    0
    b3,
    ну так а если в ехо допустим у нас шапка,
    а в инклуде форма с авторизацией как тогда быть?
     
  19. b3

    b3 Продвинутый

    Регистрация:
    8 окт 2007
    Сообщения:
    142
    Симпатии:
    104
    Баллы:
    0
    Подумай логически, на крайний случай в форме обработчик на новый файл и в нем уже устанавливай куки
     
  20. Jack Vorobey

    Jack Vorobey Guest

    Подскажите, как сделать проверку введенных данных в фейк? Нужно чтоб проверяло логин и пароль и если они невенрны кидало обратно на эту же страницу. В какую сторону копать, я только начал php учить
     

Поделиться этой страницей