помогите воткнуть цикл, пожалуйста(

Тема в разделе "PHP", создана пользователем phillip, 17 сен 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    хыыы я вполтную взялся за пхп) путем редактирования чужого кода получил вот такой свой:
    PHP:
    <?php

    //файл шаблона
    $tpe file("wordpress\wp-config.php");
    $final_tpl"wordpress\wp-config2.php";

    $bdhost"5.5.comm";
    $bdname"BAZZAA";
    $bdpassword"pisss";
    $bduser"fedor";
        
    $page="";
        foreach (
    $tpe as $tp2)
        {
        
    $pagestr_replace("[bdhost]"$bdhost$tp2);
        
    $pagestr_replace("[bdname]"$bdname$tp2);
        
    $pagestr_replace("[bdpassword]"$bdpassword$tp2);
        
    $pagestr_replace("[bduser]"$bduser$tp2);
        
    $page_name "$final_tpl";
        
    $page_file fopen($final_tpl,"w");
        
    fwrite($page_file,$page);
        
    fclose($page_file);
        }
    ?>
    код по идее должен создавать копию файла wp-config.php с прописанными моими значениями. фишка в том что счас получается так что в файл-результат он записывает только последнюю строку, потому что перебирает ее последней) куда и какой цикл воткнуть чтобы в файл результата записались ВСЕ строки- понять не могу, мозг сломал
     
  2. sulacco

    sulacco Постоялец

    Регистр.:
    17 мар 2008
    Сообщения:
    90
    Симпатии:
    45
    похоже ошибка в строке
    PHP:
     $page_file fopen($final_tpl,"w");
    аргумент w - Создать новый пустой файл только для записи; если файл с таким именем уже есть вся информация в нем уничтожается

    вы каждый раз его создаете заново

    ------------------
    вынесите создание и закрытие файла за цикл foreach ($tpe as $tp2) т.е.:
    PHP:
    <?php 

    //файл шаблона 
    $tpe file("wordpress\wp-config.php"); 
    $final_tpl"wordpress\wp-config2.php"

    $bdhost"5.5.comm"
    $bdname"BAZZAA"
    $bdpassword"pisss"
    $bduser"fedor"
        
    $page=""

        
    $page_name "$final_tpl"
        
    $page_file fopen($final_tpl,"w"); 

        foreach (
    $tpe as $tp2
        { 
        
    $pagestr_replace("[bdhost]"$bdhost$tp2); 
        
    $pagestr_replace("[bdname]"$bdname$tp2); 
        
    $pagestr_replace("[bdpassword]"$bdpassword$tp2); 
        
    $pagestr_replace("[bduser]"$bduser$tp2); 
        
    fwrite($page_file,$page); 
        } 

     
    fclose($page_file); 
    ?>
     
    phillip нравится это.
  3. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    я w сменил на a+ и стало работать. спасибо)
     
  4. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    А смысл? Если ты будешь несколько раз запускать скрипт, то данные будут повторяться!!!
     
  5. MrScruff

    MrScruff

    Регистр.:
    9 сен 2008
    Сообщения:
    278
    Симпатии:
    66
    А теперь представь себе как ты нагрузишь сервер, если будешь 10000 раз за цикл создавать/удалять/перезаписывать файл.
    ПРавильное решение вопроса указал sulacco
     
  6. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Да какая разница, лишь бы работало :)

    К тому времени как эта хрень начнет грузить сервак, у ТС уже будет достаточно знаний в php, чтобы собрать всю записываемую инфу в строку, и в конце один раз открыть файл через fopen(file, 'w') и перезаписать за один присест.

    Но если кто думает, что это даст баснословный выигрыш по скорости, то хочу разочаровать: unix тоже не пальцем делан и великолепно у себя все кеширует, так что даже от сорока fwrite() физически винт перезаписывается все равно один раз.
     
  7. MrScruff

    MrScruff

    Регистр.:
    9 сен 2008
    Сообщения:
    278
    Симпатии:
    66
    С винтом понятно. А с памятью как? По идее за каждый проход на выделении и неосвобождении должны терять байтики
     
  8. Xel'[Naga]

    Xel'[Naga] Писатель

    Регистр.:
    23 мар 2007
    Сообщения:
    9
    Симпатии:
    0
    PHP:
    ### Вырезано 
        
    foreach ($tpe as $tp2)  
        {  
        
    $pagestr_replace("[bdhost]"$bdhost$tp2);  
        
    $pagestr_replace("[bdname]"$bdname$page);  
        
    $pagestr_replace("[bdpassword]"$bdpassword$page);  
        
    $pagestr_replace("[bduser]"$bduser$page);  
        
    fwrite($page_file$page);  
        }  

    ### Вырезано
    ?>
    Правильней будет вот так. Ведь нам же надо заменить все данные для мускля, а не только [bduser] :)

    Вообще-то ДОзаписывает(если не использовать открытие файла внутри цикла).
     
  9. ex3mer

    ex3mer Создатель

    Регистр.:
    19 ноя 2007
    Сообщения:
    21
    Симпатии:
    5
    А вот тут проблемы разве нету? Вы посмотрите! После первого реплейса результат в $page, а $tp2 НЕ ИЗМЕНИЛСЯ, и т.д....таки образом последний реплейс только будет в результирующей $page. Для того чтобы этого избежать надо заменить вот так:

    PHP:
    $pagestr_replace("[bdhost]"$bdhost$tp2); 
    $pagestr_replace("[bdname]"$bdname$page); 
    $pagestr_replace("[bdpassword]"$bdpassword$page); 
    $pagestr_replace("[bduser]"$bduser$page);
     
  10. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Ну коряво конечно, но ведь исходный файл считывается построчно и теоретически на каждое изменение $tp2 будет только одно совпадение...
     
Статус темы:
Закрыта.