Смотрите, у меня на сервере есть php файл, код который в нем написан посторонний человек не может посмотреть, т.е. если он перейдет допустим по ссылке site.ru/script.php он увидит НЕ код скрипта, а результат его выполнения, если же на сервере будет текстовый документа (site.ru/doc.txt), то он увидит содержимое этого документа, вопрос, как скрыть текстовые документы, может какой то формат специальный. Что я хочу, хочу хранить некоторые настройки в этом текстовом документе, при их изменении будет меняться и этот документ (изменяться значения в нем), в каком формате будет хранение, XML или сюреализация пока не определился, да и не имеет это особого значения. Закрывать при помощи .htaccess не вариант, в смысле хотелось бы сначала рассмотреть другие варианты. PS я ищу простой вариант, если его нет, тогда будут от чего то другого отталкиваться.
Я рассчитывал что есть какой то формат в котором можно хранить, просто об этом не было рассказано в той литературе, по которой я учился.
быстрее всего для пхп-скрипта хранить настройки в .php как ни странно. опкод можно кэшировать. парсер свой не надо писать. записать налету можно.
База данных? Нафига тебе файлы? Какие данные хранить собираешься? Добавлено спустя 59 секунд: htaccess - самый простой и быстрый способ закрыть доступ.
А вот такой вопрос, в данных файлах предполагается хранить относительно много данных, ну допустим 10 - 100кб, в принципе для меня на много удобнее хранить данные как раз в таблице, но если мы каждый раз (при путешествии по страницам) будет получить из БД эти 10 - 100кб это скажется на скорости и вообще как лучше быть? Если использовать хранение в БД, то там под это будет отдельная таблица и по запросу будет скорее всего сразу будет получаться вся таблица (все данные). Что за данные? HTML, CSS ну и текст, настройки темы (шаблона) соответственно пользователь может их менять и по этому удобно как раз хранить в БД.
можно и на файлах. если грамотно организуете работу с ними. профит субд в том что многие вещи про которые вы не догадываетесь уже реализованы её авторами.
Код (PHP): <?php> /* PROFIT!!! Это если просто текст нужно. А если какие-то данные, которые в переменные пишутся, то так и храни, сразу в виде массива инициализированного, вайнот?
Fell-x27, вроде как работает, а что это за конструкция такая: Код (Text): <?php> и везде ли она работает?
прдоньте, не <?php>, а <?php На автомате двойную угловую фигакнул. Код (PHP): <?php /* PROFIT Ну и читать содержимое нужно с третьей строки, еств. Это если просто текст. Если какие-то массивы, то пых же позволяет данные сериализовывать, к примеру. Или JSONить. Или var_export'ить. Для хранения структурированных данных вне БД есть более грамотные варианты, нежели просто текст.
работают оба варианта, но в IDE, такое выдает ошибку: Код (PHP): <?php /* PROFIT А вот это как раз без ошибок: Код (PHP): <?php> /* PROFIT!!! Добавлено спустя 56 секунд: ну тут или сериализовывать или XML
Значит у тебя IDE не правильная. Ты вызови оба скрипта и посмотри разницу. Если оставить тег пхп открытым, то все, что ниже него и ниже /* будет восприниматься как комментарий и не будет выведено. В противном случае результат будет печальный. Ты скажи, что вообще хранить надо? Ну или почитай про var_export() до кучи.
Если сталкивались с Wordpress, там есть такая таблица как wp_option, где хранятся настройки сайта, вот в файле будет аналог этой таблицы или в виде XML или в виде сериализации. Желательно что бы посторонние не видели что за данные там.
В памяти скрипта она как хранится? как массив? Делай вар экспорт и оборачивай в пхп-скрипт, который потом будешь инклудить. Извне нихрена не увидят, инфа 100%.
погодь Мне по мимо того что там надо хранить эти настройки, должна быть еще возможность изменять их не редактируя в ручную сам скрипт, т.е. я где то там на сайте выбираю что e-mail админа теперь не xxx@mail.ru, а xxxxx@mail.ru, нажимаю сохранить и данный скрипт вносятся изменения, как сюда впишется var_export? допустим если использовать serialize, у меня в скрипте данные будут хранится в виде сериализованных данных, данный файл открывается начинается считываться с какой-нибудь строки (или позиции) что бы попал текст имееющий отношение только к сериализации, после чего данные пропускаются через unserialize и все у меня готов массив настроек. Если же надо изменить что то, я вношу изменения в массив с настройками, который у меня уже загружен, открываю файл для для записи ('w' если не ошибаюсь), прогоняю массив с измененными настройками через serialize после чего записываю в файл и закрываю, все настройки сохранены. Как то так. Кстати, как описано выше, получается я меняю одну из 100 настроек, а перезаписываются все настройки (весь файл), возможно ли как-нибудь сделать так что бы менялось в файле конкретная запись, например если допустим настройки будут хранится в XML.
var_export не вписывается? а сериализация значит вписывается а варэкспорт нет... уровень знаний сразу налицо. открываем файл конфига, пишем в него варэкспорт, закрываем. получаем обновленную конфу. профит. кстати про позицию в сериализации - посмотрел бы я на это гениальное решение =)
Можете показать в коде, 3 файла, первый в котором хранится, второй в нем вытаскиваются данные из первого файла и преобразуются в массив, третий файл который сохраняет массив с настройками в в первый файл (так, что бы потом второй файл смог их вытащить). Добавлено спустя 2 минуты 28 секунд: А то я что то не могу понять технологию, с serialize все ясно, serialize превращает массив / объект в строку, а unserialize, превращает эту строку обратно в массив / объект. Как тоже самое сделать при помощи всего одной var_export. Добавлено спустя 28 минут 1 секунду: Если через serialize, то я вижу это так: содержимое файла в котором будут хранится настройки (hidden.php): Код (PHP): <?php/*a:2:{s:5:"first";s:3:"one";s:6:"second";s:3:"two";} получаем эти данные для работы: Код (PHP): $text = file_get_contents('hidden.php', false, NULL, 7); $array = unserialize($text); echo '<div>'. $array['first'] .'</div>'; echo '<div>'. $array['second'] .'</div>'; Если надо изменить какие то значения: Код (PHP): $array = array( 'first' => '1', 'second' => '2' ); $str = '<?php/*' . serialize($array); $file = fopen('hidden.php', "w"); fwrite($file, $str); fclose($file); как подобное реализовать при помощи var_export?
я вообще офигиваю от того насколько ты не курил ман и от того что у тебя тестикул не хватает взять да проверить что какая функция возвращает... как можно делать с сериализацией: Код (PHP): <?php // config.ser.php return 'a:1:{s:5:"first";s:3:"one";}'; Код (PHP): <?php // edit.ser.php $config = unserialize(include('config.ser.php')); $config['first'] = 'uno'; $f = fopen('_config.ser.php', 'wb'); fwrite($f, sprintf("<?php return '%s';", serialize($config))); _config.ser.php: Код (PHP): <?php return 'a:1:{s:5:"first";s:3:"uno";}'; та же хрень но с варэкспортом: Код (PHP): <?php // config.var.php return array( 'first' => 'one' ); Код (PHP): <?php // edit.var.php $config = include('config.var.php'); $config['first'] = 'uno'; $f = fopen('_config.var.php', 'wb'); fwrite($f, sprintf("<?php return %s;", var_export($config, true))); _config.var.php Код (PHP): <?php return array ( 'first' => 'uno', ); как видишь во втором случае использовать массив значительно удобнее - его руками можно поправить чего ты не сделаешь в сериализованном виде ибо там ты можешь брикнуть всё к чертям. еще о чем за тебя подумать?
Книга по которой я учился, там было написано что include возвращает true или false, а о таких фокусах там не было ни слова, тогда это в корне меняет дело. еще и экранирует кавычки этот var_export, ваще крутяк.
само название функции как бы намекает, что она генерирует код, являющийся нативным представлением переменной, которая в нее была передана. Вообще, возьми за правило - наткнулся на незнакомую функцию, сразу же гугли ее в доках. Документация для пыха на русском языке есть. Официальная. Бояться ее не надо. Офигенная штука. Еще плюс варэкспорта в том, что такие конфиги можно кэшировать, если есть аккселератор. А сериализованный файлик ты в опкод не закешируешь - один фиг надо будет его читать, потом десериализовывать. З.Ы. Сам же я люблю писать парсеры, даже для пыхоконфигов. Которые со строками работают. Это делается довольно просто, если есть голова на плечах и опыт. И не ломает такие вещи, как комментарии, например. Но, опять же, сугубо дело вкуса и прямоты рук.