Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция сохранения в файл массива 
:(
    Опции темы
Elfet
Дата 24.2.2008, 18:31 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Код

    function savearray($name, $arr, $file)
    {
        function formarray($from)
        {
            $r = "array (";
            foreach($from as $key=>$value)
            {
                $r .= " '".$key."' => ";
                if(is_array($value))
                {
                    $r .= formarray($value);
                }
                else if(is_bool($value))
                {
                    $r .= $value?'true':'false';
                }
                else if(is_int($value))
                {
                    $r .= intval($value);
                }                
                else 
                {
                    $r .= "'".addslashes($value)."'";
                }
                $r .= ",";
            }
            $r .= ")";
            return $r;
        }

        $content = "<?php ";
        $content .= "$".$name." = ";
        $content .= formarray($arr); 
        $content .= "; ?>";
        
    if(!function_exists('file_put_contents')) {
        function file_put_contents($filename, $content)
        {
            if($fp = @fopen($filename, 'w')) {
                $result = fwrite($fp, $content);
                fclose($fp);
                return $result;
            } else {
                return false;
            }
        }
    }
    file_put_contents($file,$content);        
    }



--------------------
PM MAIL WWW Skype   Вверх
GeneralElectric
Дата 24.2.2008, 18:56 (ссылка) |   (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



Ужасно. 
Ужасны и предпосылки, которые привели к такому решению, и реализация, и полное игнорирование встроенных средств PHP.
PM MAIL   Вверх
flashaa
Дата 24.2.2008, 19:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



эээ.

Код

$arr = array();
file_put_contents('array.txt', serialize($arr));

PM MAIL   Вверх
CyClon
Дата 24.2.2008, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: 3
Всего: 4



Депрессия? xD

Во-первых не вижу пользы от этой функции, во-вторых реализуется в 3 строчки тоже самое, в принципе.


--------------------
user posted image
PM   Вверх
smartov
Дата 24.2.2008, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Цитата(CyClon @  24.2.2008,  18:29 Найти цитируемый пост)
Депрессия? xD

Точно =)
PM MAIL   Вверх
CyClon
Дата 24.2.2008, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: 3
Всего: 4



Немного подумав нашел ей применение: в недо-CMS так с конфигами мона работать, подставил значения с массива, нажал сохранить и он весь массив в файл записал %)


--------------------
user posted image
PM   Вверх
awers
Дата 24.2.2008, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: 21
Всего: 31



OMG. Автор, настоятельный совет открыть учебник по PHP, расположенный по адресу php.net для ознакомления с функциями, предоставляемыми по умолчанию в PHP. 
flashaa, ответил на твой вопрос ...
PM MAIL WWW ICQ Skype   Вверх
Elfet
Дата 24.2.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Конечно извращенство. 
Хочу проще сохранять настройки. Записать в php файл и подключать его где нужно. Что тут можно сделать? smile

Это сообщение отредактировал(а) Elfet - 24.2.2008, 22:10


--------------------
PM MAIL WWW Skype   Вверх
awers
Дата 24.2.2008, 22:26 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: 21
Всего: 31



после минусов посу нехочу чем либо помогать...
PM MAIL WWW ICQ Skype   Вверх
smartov
Дата 25.2.2008, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Elfet, зачем? Лучше или записать в базу и с ней работать, или в xml, натравив на него SimpleXML для считывания/записи.

Добавлено через 2 минуты и 2 секунды
Elfet, а то получается за один файл ты два раза велосипед изобрел. Сначала serialize переписал, а потом file_put_contents. 
Да и некошерно в 21 веке настроки по plain-text файлам пихать  smile сейчас рулят хранилища данных.
PM MAIL   Вверх
Elfet
Дата 25.2.2008, 14:39 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



smartov, это я всё конечно понимаю, но когда я пишу скрипт такого небольшого размера, то мне кажется излишним его усложнение всякими настройками в бд. Тут сделал include "settings.php" и всего делов.
Чем плох такой метод?


--------------------
PM MAIL WWW Skype   Вверх
smartov
Дата 25.2.2008, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Elfet
Цитата(Elfet @  25.2.2008,  13:39 Найти цитируемый пост)
Чем плох такой метод?

Если скрипт небольшого размера то можно и include, а вот когда настроек около сотни или просто больше 20 то встает вопрос об их структурировании.

Только хотелось бы узнать как к include относится тот код, что у тебя в первом посте, и что ты вообще хотел им сказать smile
PM MAIL   Вверх
gta4kv
Дата 25.2.2008, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Elfet
Ты лучше перезаписывай только нужные строки, т.е ты делаешь редактор конфигурации, сравнивай строки после сохранения, нужные - меняй.
Так, имхо, будет лучше.

Код

$file = ( 'settings.php' );
$txt = ( file_get_contents( $file ) );
file_put_contents( $file, str_replace( $oldValue, $newValue, $txt ) );


Добавлено через 1 минуту и 59 секунд
А код из первого поста - фтопку.

Это сообщение отредактировал(а) gta4kv - 25.2.2008, 15:08
PM MAIL   Вверх
Elfet
Дата 25.2.2008, 15:16 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



smartov, да, настроек-то всего-то 10-11 smile Первый листинг сохраняет массив настроек в файл которые потом я инклудю smile


gta4kv, чем лучше-то? smile


--------------------
PM MAIL WWW Skype   Вверх
gta4kv
Дата 25.2.2008, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Elfet, удобнее, да и код в первом посте определенно не лучше, и массивнее. тут можно будет обойтись десятью строчками.
PM MAIL   Вверх
Elfet
Дата 25.2.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Цитата(gta4kv @  25.2.2008,  16:07 Найти цитируемый пост)
str_replace( $oldValue, $newValue, $txt )

Было у меня в настройках три "1", а теперь там все "3" - кажется мне что этот код работать не будет smile


--------------------
PM MAIL WWW Skype   Вверх
gta4kv
Дата 25.2.2008, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Цитата(Elfet @ 25.2.2008,  15:22)
Цитата(gta4kv @  25.2.2008,  16:07 Найти цитируемый пост)
str_replace( $oldValue, $newValue, $txt )

Было у меня в настройках три "1", а теперь там все "3" - кажется мне что этот код работать не будет smile

Ой, не подумал. и вправду. smile

Добавлено через 45 секунд
Хотя нет, подумал, щас напишу пример
PM MAIL   Вверх
gta4kv
Дата 25.2.2008, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Получилось не легче, но работает, ( записать правильно так и не удалось smile  все ок) 
Код

<fieldset>
    <form action="?me" method="post">
        lol: <input type="text" name="lol" /> <br />
        rofl: <input type="text" name="rofl" /> <br />
        elfet: <input type="text" name="elfet" /> <br />
        <input type="submit" value="test" />
    </form>
</fieldset>

<?php

$config = array(
    'lol' => 'loleng',
    'rofl' => 'rofoleng',
    'elfet' => 'elfeteng',
);

if( isset( $_GET['me'] ) )
{
    $key = array_keys( $_POST );
    $keys = array_keys( $config );

    $i = 0;
    $newconfig = $config;
    
    
    while( $i < count( $key ) - 1 )
    {
        $newconfig = str_replace( "'" . $key[ $i ] . '\' => \'' . $config[ $keys [ $i ] ] . "'",
                                  "'" . $key[ $i ] . '\' => \'' . $_POST[ $keys [ $i ] ] . "'\n", $newconfig );
        $i++;
    }
    
    
    $key = array_keys( $newconfig );
    $content = "<?php\n";
    $i = 0;
    $content .= '$config = array( ' . "\n";
    while ( $i < count( $key ) )
    {
        $content .= "'" . $key[ $i ] . '\' => \'' . $_POST[ $keys [ $i ] ] . ",'\n";
        $i++;
    }
    $content .= ");\n";
    $content .= '?>';
    
    file_put_contents( 'test.txt', $content );
}

    
?>


Добавлено @ 15:49
тут расчет идет что name'ы у полей, равны названиям полей конфига. все равно лучше чем твой первый пост)

Добавлено @ 15:51
Получилось не легче тока из-за проблемы записи массива в файл. smile

Это сообщение отредактировал(а) gta4kv - 25.2.2008, 16:27
PM MAIL   Вверх
Elfet
Дата 25.2.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



gta4kv, нет, теперь мой лучше smile Что если в массиве ещё массивы? И теперь bool перейдет в 'bool' : true -> 'true' & 1 -> '1' ;)


--------------------
PM MAIL WWW Skype   Вверх
smartov
Дата 25.2.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Elfet, то есть для того, чтобы иметь возможность потом заинклудить файл ты изобрел велосипед два раза?
А нельзя было не изобретать ни разу но срхранять (просто для примера возьму) используя serialize, а там, где у тебя сейчас include делать unserialize?
PM MAIL   Вверх
Elfet
Дата 25.2.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Почему два раза? Один smile 
Я сначала подключал файл настроек просто инклудом. Теперь захотел сделать админку где эти настройки можно было бы испавить.

PS Меня ещё интересует насколько опасно таким кодом пользоваться? smile


--------------------
PM MAIL WWW Skype   Вверх
smartov
Дата 26.2.2008, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Цитата(Elfet @  25.2.2008,  17:49 Найти цитируемый пост)
Почему два раза? Один 

1) сериализация
2) file_put_contents
PM MAIL   Вверх
Vaulter
Дата 26.2.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22



а не проще все хранить в таблице... variables?


--------------------
PM MAIL WWW ICQ   Вверх
Elfet
Дата 26.2.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Цитата(smartov @  26.2.2008,  13:45 Найти цитируемый пост)
2) file_put_contents 

Это что бы в php4 работало. Разве не так? smile


--------------------
PM MAIL WWW Skype   Вверх
smartov
Дата 26.2.2008, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Elfet, а у тебя что php4? ;) 
PM MAIL   Вверх
Arhar
Дата 26.2.2008, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.2.2008

Репутация: нет
Всего: нет



где вы видите в этом коде сериализацию???
это запись в формате
Код

<?php
$name=array(
'key1'=>array(
'innerkey'=>'innervalue',
),
'key2'=>'true',
'key3'=>10,
'key4'=>'text',
);
?>

и потом делая
Код

include 'settings.php'

получаем в скрипте сразу
Код

$name['key1']['innerkey']=='innervalue'



вариант проще - 
записывать в формате
Код

<?php
$name = 'сериализованныймассив';
?>

тогда в скрипте после инклюда надо просто делать unserialize
PM MAIL   Вверх
gta4kv
Дата 26.2.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Цитата(smartov @ 26.2.2008,  18:58)
Elfet, а у тебя что php4? ;)

У него так что бы работало на всех версия. ;)
PM MAIL   Вверх
smartov
Дата 27.2.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Цитата(Arhar @  26.2.2008,  18:56 Найти цитируемый пост)
где вы видите в этом коде сериализацию???

Сериализация не есть "четко закрепленный алгоритм". 

Цитата(gta4kv @  26.2.2008,  19:04 Найти цитируемый пост)
У него так что бы работало на всех версия. ;)

В третей работать не будет. Ее тоже поддержать? smile
ИМХО не совсем верное решение поддерживать PHP4, если только на это нет каких-то острых причин. PHP5 уже много лет. PHP6 на носу. 
PM MAIL   Вверх
Arhar
Дата 28.2.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.2.2008

Репутация: нет
Всего: нет



Цитата

Сериализация не есть "четко закрепленный алгоритм". 

ммм...в контексте форума php?
раз в языке есть функция serialize, то говоря "сериализация" наверно подразумевается результат именно этой функции, разве нет?
PM MAIL   Вверх
smartov
Дата 28.2.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Arhar, говоря сериализация я подразумеваю сериализацию, а не функцию serialize которая является одной из реализаций сериализации.
(Блин сильно много окончаний "ция" получилось )
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1208 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.