Файл и строки

Тема в разделе "PHP", создана пользователем Sachek, 31 июл 2011.

Модераторы: latteo
  1. Sachek

    Sachek Умелый

    Регистр.:
    23 мар 2009
    Сообщения:
    383
    Симпатии:
    103
    Подскажите пожалуйста, как реализовать следующее...
    Имеется файл с множеством строк...
    Необходимо, что бы при определенном запросе - копировалось определенное количество строк (и скажем отправлялось на мыло), а после отправки (скажем на мыло) - эти строки удалялись...
    Поясню зачем мне это...
    Необходимо создать простенькую страничку, по продаже пин-кодов, каждая строка в файле - это отдельный пинкод, вот мне и надо, что бы какая либо функция сначала вытащила строчку, а после этого удалила...
    Вроде ни чего сложного, а как реализовать - не могу сообразить...
    Заранее спасибо...
     
  2. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    заносишь в массив потом вытаскиваешь из массива сколько тебе надо строк при этом делаешь удаление этого элемента из массива и потом опять все скидываешь в файл
    попробуй так
    PHP:
    <?php
    $array 
    file('pincodes.txt');
    for(
    $i=0;$i<$c;$i++){        // где $c число строк(пинкодов) которые надо вытащить
    $pincode $array[$i];
    echo 
    $pincode."<br>";flush();flush();
    unset (
    $array[$i]);}
    $handler fopen("pincodes.txt""w");
    foreach(
    $array as $value){
    fwrite($handler,trim($value)."\n");
    }
    fclose($handler);
     
    Sachok321 нравится это.
  3. Sachek

    Sachek Умелый

    Регистр.:
    23 мар 2009
    Сообщения:
    383
    Симпатии:
    103
    Я как понял, то необходимо сделать некоторый запрос (к примеру пост) с параметром $c, который и будет доставаться из файла?
    Только не понял, где часть кода, который удаляет строку из файла?
    Сорри за тупость, в пхп не оч силен :)
     
  4. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    строку из массива удаляет
    PHP:
    unset ($array[$i]);
    а потом содержимое массива опять сохраняется в файл
     
    Sachok321 нравится это.
  5. maniche

    maniche Писатель

    Регистр.:
    7 авг 2011
    Сообщения:
    6
    Симпатии:
    1
    Ой, файлы, массивы, unset, присмотритесь пож-ста в сторону любой БД, так вы сэкономите своё время и нервы.
    ПС:
    представьте что ваш скрипт обрабатывает за 0.1 секунды.
    а теперь представьте что 2 пользователя одновременно (менее 0.1 сек) нажали - "купить" пин-код.
    1. первый скрипт прочитает весь файл в массив.
    в это время
    2. скрипт второго пользователя прочитает весь файл в массив.
    3. первый удалит одну строку из файла и запишет его обратно/
    4. потом второй скрипт удалит одну строку в заранее считаном файле и запишет файл обратно.

    На выходе имеем +1 уже проданый пинкод в списке новых.
     
  6. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    Sachok321 нравится это.
  7. Sachek

    Sachek Умелый

    Регистр.:
    23 мар 2009
    Сообщения:
    383
    Симпатии:
    103
    Орет вот на эту строчку
    $pinCodes = preg_grep('#^\S#', file(PIN_FILE));

    Ошибка
    Warning: file(pincodes.txt) [function.file]: failed to open stream: No such file or directory in /home/xxxxx/domains/xxxxxx/public_html/pin.php on line 102

    Warning: preg_grep() expects parameter 2 to be array, boolean given in /home/xxxxx/domains/xxxxxxx/public_html/pin.php on line 102
    invalid_pin_num
     
  8. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    файл pincodes.txt не найден проверь все ли там находится где должно быть
     
    Sachok321 нравится это.
  9. Sachek

    Sachek Умелый

    Регистр.:
    23 мар 2009
    Сообщения:
    383
    Симпатии:
    103
    Вроде сработало. Вопросик еще...
    Что означает invalid_pin_num
    И еще... Где переменная, отвечающая за количество пинов?
     
  10. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    здесь 5 пинкодов
    PHP:
    /**
     * Количество "вынимаемых" пинкодов
     */
    define('NUM_PINS'5);
    если количество пинкодов в файле меньше чем заказано в переменной выдаст эту ошибку
    PHP:
    /* Проверяем кол-во пинкодов */
    if (count($pinCodes) < NUM_PINS) {
        
    sendOutput('invalid_pin_num');
    }
     
    Sachok321 нравится это.