Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Запись в файл [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Запись в файл из db
tarweb
Отправлено: 17 Марта, 2012 - 19:11:41
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Самогонщик пишет:
У тебя есть внутренний цикл for ( $i=1; $i<=$count_lang; $i++ ). Вопрос, почему он ограничен $count_lang ?


Если есть, допустим 3 языка(3 папки) - то в внутреннем цикле for 3 раза идет выборка переменных значений из таблиц, соответствующих названиям таблиц и папок.
 
 Top
Самогонщик
Отправлено: 17 Марта, 2012 - 19:44:48
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




tarweb пишет:
for 3 раза идет выборка переменных значений из таблиц
Вот этого я понять и не могу: почему количество записей в таблицах равно количеству таблиц (языков)
 
 Top
DeepVarvar Супермодератор
Отправлено: 17 Марта, 2012 - 19:46:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




А я бы вообще отказался от гемора с файлами..
Просто брал бы все языковые константы из базы и либо в массив либо в объект их пихал на момент работы скрипта.
Это всего лишь +1 запрос в БД.
Не заостряясь на структуре таблиц, только для примера:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM langs WHERE lang = 'ru';

а в лайоуте так (для объекта языка):
CODE (html):
скопировать код в буфер обмена
  1. <div><?=$lang->welcome?></div>

или для массива языка:
CODE (html):
скопировать код в буфер обмена
  1. <div><?=$lang['welcome']?></div>

Нахрена эти пляски с файлами?
Ну или вообще без базы, описать в файле массив языков:
PHP:
скопировать код в буфер обмена
  1. $lang = array(
  2.   "welcome" => "Добро пожаловать",
  3.   "login" => "Войти",
  4.   "nextkey" => "и т.д..."
  5. );

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

(Отредактировано автором: 17 Марта, 2012 - 19:47:10)

 
 Top
Самогонщик
Отправлено: 17 Марта, 2012 - 19:51:06
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




DeepVarvar, передаю tarweb тебе на попечение, что-то мы друг друга с ним так и не поняли Улыбка

(Отредактировано автором: 17 Марта, 2012 - 19:55:31)

 
 Top
tarweb
Отправлено: 17 Марта, 2012 - 19:54:22
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




А принцип у меня такой - доставать lang из файла.
(Зачем дергать базу лишних 1000 раз за сек. )

(Отредактировано автором: 17 Марта, 2012 - 20:15:27)

 
 Top
DeepVarvar Супермодератор
Отправлено: 17 Марта, 2012 - 20:02:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Ну так я описал как сделать сразу на файлах..
 
 Top
tarweb
Отправлено: 17 Марта, 2012 - 20:06:13
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




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


Я хочу автоматизировать - а Вы предлагаете ручками.

Вы не хотите отвечать на самый первый вопрос.
tarweb пишет:
Как выбрать из полей таблицы значения и записать их в файл, чтобы эти значения обновлялись в файле но не добавлялись.
Например:
из поля "en" в файл "en.php"
из поля "ru" в файл "ru.php"

(Отредактировано автором: 17 Марта, 2012 - 20:09:59)

 
 Top
DeepVarvar Супермодератор
Отправлено: 17 Марта, 2012 - 20:14:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




tarweb пишет:
Я хочу автоматизировать - а Вы предлагаете ручками.
Что вы хотите автоматизировать?
В базу то всеравно ручками писать..
Что так, что так..
А вы себе лишний гемор придумали.
 
 Top
Самогонщик
Отправлено: 17 Марта, 2012 - 20:16:10
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




tarweb пишет:
Вы не хотите отвечать на самый первый вопрос.

Самогонщик пишет:
Был конкретный совет: подыми открытие файла выше цикла for ( $i=1; $i<=$count_lang; $i++ ) и открывай на перезапись.


Такие вот мы партизаны Ниндзя
 
 Top
tarweb
Отправлено: 17 Марта, 2012 - 20:29:48
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




[quote=DeepVarvar]Что вы хотите автоматизировать?
В базу то всеравно ручками писать..
Что так, что так..
А вы себе лишний гемор придумали.[/quote]

Хорошо, у меня есть страницы:
"Ничего не найдено"
"Главная"
"Недвижимость"

которые, при добавлении в меню через форму выбора добавляются в таблицы, соответствующих языков в отдельной базе админ-панели с автоматическим переводом.
(Добавление)
[quote=Самогонщик]Такие вот мы партизаны[/quote]

[quote=tarweb]Был конкретный совет: подыми открытие файла выше цикла for ( $i=1; $i<=$count_lang; $i++ ) и открывай на перезапись.

Пробовал - выше/ниже не поможет
(Добавление)
DeepVarvar пишет:
А вы себе лишний гемор придумали


Ухожу на следующий форум.
Этому форуму за ответы можно поставить 3 с минусом.
 
 Top
Самогонщик
Отправлено: 17 Марта, 2012 - 21:01:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




tarweb пишет:
Этому форуму за ответы можно поставить 3 с минусом.
Я не зря решил проверить тред, позитивчег на ночь грядущую оказался обеспечен Ха-ха Радость
 
 Top
DeepVarvar Супермодератор
Отправлено: 17 Марта, 2012 - 21:15:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




tarweb, если найдете ответ на другом форуме - ссылочку оставьте, пожалуйста.
Мы посмотрим что вам там ответят.
 
 Top
tarweb
Отправлено: 18 Марта, 2012 - 14:53:36
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Спасибо всем !
Решил проблему сам, добавлением двух строчек
$fp = file_get_contents("$path_lang/$dirs/$dirs.php");
if (!strstr($fp, $fo[name_top]))

Теперь при любом несоответствии записей таблиц и файлов - включается перезапись конкретного файла

Окончательный код:
PHP:
скопировать код в буфер обмена
  1.  
  2. $path_lang = "./../lang/";
  3. $lang = glob($path_lang."*", GLOB_ONLYDIR);
  4. $count_lang = count($lang);
  5.  
  6. foreach ($lang as $dir)
  7. {              
  8. if ((is_dir($path_lang)==TRUE)&&($path_lang!='.' &&
  9.  
  10. $path_lang!='..' ))
  11. {          
  12. $dirs = basename($dir);
  13. }                  
  14.  
  15. for ( $i=1; $i<=$count_lang; $i++ )
  16. {
  17. $r = $db->query ( "SELECT * from lang_$dirs WHERE
  18.  
  19. id='$i' order by id" ) or die (mysql_error());        
  20. $fo = $db->fetcharray($r);
  21.  
  22. $menu_lang = '$lang_'.$fo[link].' = "'.$fo[name_top].'";';
  23.  
  24. $temp_lang    = file_get_contents("lang/temp_$dirs.php");
  25.  
  26. $fp = file_get_contents("$path_lang/$dirs/$dirs.php");
  27. if (!strstr($fp, $fo[name_top]))
  28. {    
  29. $fp1 = fopen ("$path_lang/$dirs/$dirs.php", "a");
  30. flock($fp1,LOCK_EX);
  31. fwrite($fp1,$menu_lang."\n");
  32. fwrite($fp1,$temp_lang);
  33. fflush($fp1);
  34. flock($fp1,LOCK_UN);
  35. fclose($fp1);
  36. }
  37.  
  38. }
  39.  
  40. }


DeepVarvar пишет:
tarweb, если найдете ответ на другом форуме - ссылочку оставьте, пожалуйста.
Мы посмотрим что вам там ответят.


[url]http://phpclub[dot]ru/talk/threads/%D0%97%D0%B0%D0

%BF%D0%B8%D1%81%D1%8C-%D0%B2-%D1%84%

D0%B0%D0%B9%D0%BB%D1%8B-%D0%B8%D0%B7

-%D0%B1%D0%B0%D0%B7%D1%8B.71439/#post-63

7744[/url]

[url]http://forum[dot]codenet[dot]ru/q70394/%D0%97%D0%B0%D

0%BF%D0%B8%D1%81%D1%8C+%D0%B2+%D1%8

4%D0%B0%D0%B9%D0%BB%D1%8B+%D0%B8%D0

%B7+%D0%BC%D0%B0%D1%81%D1%81%D0%B8%

D0%B2%D0%B0[/url]

[url]http://forum.php.su/topic.php?fo...topic=4601&p

=1[/url]

(Отредактировано автором: 18 Марта, 2012 - 15:01:38)

 
 Top
Самогонщик
Отправлено: 18 Марта, 2012 - 15:52:00
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




Костыль

http://phpclub[dot]ru/talk/threads/З[dot][dot][dot]ы-из-базы[dot]71439/
Предложили то же самое, открывать файл до внутреннего цикла.

(Отредактировано автором: 18 Марта, 2012 - 15:57:28)

 
 Top
tarweb
Отправлено: 18 Марта, 2012 - 17:04:24
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Да костыль

Нашел лучше вариант:
Очистить файлы до внутреннего цикла

Еще ошибся с $count_lang - надо считать количество записей в базе.
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB