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

Статус
В этой теме нельзя размещать новые ответы.

phillip

Полезный
Регистрация
4 Сен 2007
Сообщения
411
Реакции
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)
	{
	$page= str_replace("[bdhost]", $bdhost, $tp2);
	$page= str_replace("[bdname]", $bdname, $tp2);
	$page= str_replace("[bdpassword]", $bdpassword, $tp2);
	$page= str_replace("[bduser]", $bduser, $tp2);
	$page_name = "$final_tpl";
	$page_file = fopen($final_tpl,"w");
	fwrite($page_file,$page);
	fclose($page_file);
	}
?>
код по идее должен создавать копию файла wp-config.php с прописанными моими значениями. фишка в том что счас получается так что в файл-результат он записывает только последнюю строку, потому что перебирает ее последней) куда и какой цикл воткнуть чтобы в файл результата записались ВСЕ строки- понять не могу, мозг сломал
 
похоже ошибка в строке
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) 
    { 
    $page= str_replace("[bdhost]", $bdhost, $tp2); 
    $page= str_replace("[bdname]", $bdname, $tp2); 
    $page= str_replace("[bdpassword]", $bdpassword, $tp2); 
    $page= str_replace("[bduser]", $bduser, $tp2); 
    fwrite($page_file,$page); 
    } 

 fclose($page_file); 
?>
 
я w сменил на a+ и стало работать. спасибо)
 
я w сменил на a+ и стало работать. спасибо)
А теперь представь себе как ты нагрузишь сервер, если будешь 10000 раз за цикл создавать/удалять/перезаписывать файл.
ПРавильное решение вопроса указал sulacco
 
Да какая разница, лишь бы работало :)

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

Но если кто думает, что это даст баснословный выигрыш по скорости, то хочу разочаровать: unix тоже не пальцем делан и великолепно у себя все кеширует, так что даже от сорока fwrite() физически винт перезаписывается все равно один раз.
 
Но если кто думает, что это даст баснословный выигрыш по скорости, то хочу разочаровать: unix тоже не пальцем делан и великолепно у себя все кеширует, так что даже от сорока fwrite() физически винт перезаписывается все равно один раз.
С винтом понятно. А с памятью как? По идее за каждый проход на выделении и неосвобождении должны терять байтики
 
PHP:
### Вырезано 
    foreach ($tpe as $tp2)  
    {  
    $page= str_replace("[bdhost]", $bdhost, $tp2);  
    $page= str_replace("[bdname]", $bdname, $page);  
    $page= str_replace("[bdpassword]", $bdpassword, $page);  
    $page= str_replace("[bduser]", $bduser, $page);  
    fwrite($page_file, $page);  
    }  

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

так что даже от сорока fwrite() физически винт перезаписывается все равно один раз.
Вообще-то ДОзаписывает(если не использовать открытие файла внутри цикла).
 
PHP:
...
    $page= str_replace("[bdhost]", $bdhost, $tp2); 
    $page= str_replace("[bdname]", $bdname, $tp2); 
    $page= str_replace("[bdpassword]", $bdpassword, $tp2); 
    $page= str_replace("[bduser]", $bduser, $tp2); 
...

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

PHP:
$page= str_replace("[bdhost]", $bdhost, $tp2); 
$page= str_replace("[bdname]", $bdname, $page); 
$page= str_replace("[bdpassword]", $bdpassword, $page); 
$page= str_replace("[bduser]", $bduser, $page);
 
А вот тут проблемы разве нету? Вы посмотрите! После первого реплейса результат в $page, а $tp2 НЕ ИЗМЕНИЛСЯ, и т.д....таки образом последний реплейс только будет в результирующей $page. Для того чтобы этого избежать надо заменить вот так:
Ну коряво конечно, но ведь исходный файл считывается построчно и теоретически на каждое изменение $tp2 будет только одно совпадение...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху