За последние 24 часа нас посетили 18796 программистов и 1702 робота. Сейчас ищут 819 программистов ...

Скрыть содержимое файла

Тема в разделе "PHP для новичков", создана пользователем VLK, 1 ноя 2014.

  1. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Смотрите, у меня на сервере есть php файл, код который в нем написан посторонний человек не может посмотреть, т.е. если он перейдет допустим по ссылке site.ru/script.php он увидит НЕ код скрипта, а результат его выполнения, если же на сервере будет текстовый документа (site.ru/doc.txt), то он увидит содержимое этого документа, вопрос, как скрыть текстовые документы, может какой то формат специальный.

    Что я хочу, хочу хранить некоторые настройки в этом текстовом документе, при их изменении будет меняться и этот документ (изменяться значения в нем), в каком формате будет хранение, XML или сюреализация пока не определился, да и не имеет это особого значения.

    Закрывать при помощи .htaccess не вариант, в смысле хотелось бы сначала рассмотреть другие варианты.

    PS я ищу простой вариант, если его нет, тогда будут от чего то другого отталкиваться.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    самый логичный и простой вариант. Чем не устраивает?
     
  3. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Размести файлы выше папки DOCUMENT_ROOT веб-сервера
     
  4. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Я рассчитывал что есть какой то формат в котором можно хранить, просто об этом не было рассказано в той литературе, по которой я учился.
     
  5. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    При чём тут формат данных, смотря как настроить веб сервер.
    Ещё третий вариант htpasswd
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    быстрее всего для пхп-скрипта хранить настройки в .php как ни странно. опкод можно кэшировать. парсер свой не надо писать. записать налету можно.
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    о, да. как раз упор на это дело имеется в моём движке viewtopic.php?t=50591
     
  8. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    База данных? Нафига тебе файлы?
    Какие данные хранить собираешься?

    Добавлено спустя 59 секунд:
    htaccess - самый простой и быстрый способ закрыть доступ.
     
  9. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    А вот такой вопрос, в данных файлах предполагается хранить относительно много данных, ну допустим 10 - 100кб, в принципе для меня на много удобнее хранить данные как раз в таблице, но если мы каждый раз (при путешествии по страницам) будет получить из БД эти 10 - 100кб это скажется на скорости и вообще как лучше быть?
    Если использовать хранение в БД, то там под это будет отдельная таблица и по запросу будет скорее всего сразу будет получаться вся таблица (все данные).

    Что за данные? HTML, CSS ну и текст, настройки темы (шаблона) соответственно пользователь может их менять и по этому удобно как раз хранить в БД.
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    можно и на файлах. если грамотно организуете работу с ними. профит субд в том что многие вещи про которые вы не догадываетесь уже реализованы её авторами.
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Код (PHP):
    1. <?php>
    2. /*
    3.  
    4. PROFIT!!!
    Это если просто текст нужно. А если какие-то данные, которые в переменные пишутся, то так и храни, сразу в виде массива инициализированного, вайнот?
     
  12. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Fell-x27, вроде как работает, а что это за конструкция такая:
    Код (Text):
    1. <?php>
    и везде ли она работает?
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    прдоньте, не <?php>, а <?php :)
    На автомате двойную угловую фигакнул.


    Код (PHP):
    1. <?php
    2. /*
    3. PROFIT
    Ну и читать содержимое нужно с третьей строки, еств. Это если просто текст. Если какие-то массивы, то пых же позволяет данные сериализовывать, к примеру. Или JSONить. Или var_export'ить. Для хранения структурированных данных вне БД есть более грамотные варианты, нежели просто текст.
     
  14. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    работают оба варианта, но в IDE, такое выдает ошибку:
    Код (PHP):
    1. <?php
    2. /*
    3. PROFIT
    А вот это как раз без ошибок:
    Код (PHP):
    1. <?php>
    2. /*
    3.  
    4. PROFIT!!!
    Добавлено спустя 56 секунд:
    ну тут или сериализовывать или XML
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Значит у тебя IDE не правильная. Ты вызови оба скрипта и посмотри разницу. Если оставить тег пхп открытым, то все, что ниже него и ниже /* будет восприниматься как комментарий и не будет выведено. В противном случае результат будет печальный.

    Ты скажи, что вообще хранить надо? Ну или почитай про var_export() до кучи.
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    этого не может быть
     
  17. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Если сталкивались с Wordpress, там есть такая таблица как wp_option, где хранятся настройки сайта, вот в файле будет аналог этой таблицы или в виде XML или в виде сериализации.
    Желательно что бы посторонние не видели что за данные там.
     
  18. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    В памяти скрипта она как хранится? как массив? Делай вар экспорт и оборачивай в пхп-скрипт, который потом будешь инклудить. Извне нихрена не увидят, инфа 100%.
     
  19. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    погодь :)
    Мне по мимо того что там надо хранить эти настройки, должна быть еще возможность изменять их не редактируя в ручную сам скрипт, т.е. я где то там на сайте выбираю что e-mail админа теперь не xxx@mail.ru, а xxxxx@mail.ru, нажимаю сохранить и данный скрипт вносятся изменения, как сюда впишется var_export?

    допустим если использовать serialize, у меня в скрипте данные будут хранится в виде сериализованных данных, данный файл открывается начинается считываться с какой-нибудь строки (или позиции) что бы попал текст имееющий отношение только к сериализации, после чего данные пропускаются через unserialize и все у меня готов массив настроек.

    Если же надо изменить что то, я вношу изменения в массив с настройками, который у меня уже загружен, открываю файл для для записи ('w' если не ошибаюсь), прогоняю массив с измененными настройками через serialize после чего записываю в файл и закрываю, все настройки сохранены.

    Как то так.

    Кстати, как описано выше, получается я меняю одну из 100 настроек, а перезаписываются все настройки (весь файл), возможно ли как-нибудь сделать так что бы менялось в файле конкретная запись, например если допустим настройки будут хранится в XML.
     
  20. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    var_export не вписывается? а сериализация значит вписывается а варэкспорт нет... уровень знаний сразу налицо. открываем файл конфига, пишем в него варэкспорт, закрываем. получаем обновленную конфу. профит. кстати про позицию в сериализации - посмотрел бы я на это гениальное решение =)
     
  21. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Можете показать в коде, 3 файла, первый в котором хранится, второй в нем вытаскиваются данные из первого файла и преобразуются в массив, третий файл который сохраняет массив с настройками в в первый файл (так, что бы потом второй файл смог их вытащить).

    Добавлено спустя 2 минуты 28 секунд:
    А то я что то не могу понять технологию, с serialize все ясно, serialize превращает массив / объект в строку, а unserialize, превращает эту строку обратно в массив / объект.
    Как тоже самое сделать при помощи всего одной var_export.

    Добавлено спустя 28 минут 1 секунду:
    Если через serialize, то я вижу это так:
    содержимое файла в котором будут хранится настройки (hidden.php):
    Код (PHP):
    1. <?php/*a:2:{s:5:"first";s:3:"one";s:6:"second";s:3:"two";}
    получаем эти данные для работы:
    Код (PHP):
    1. $text = file_get_contents('hidden.php', false, NULL, 7);
    2. $array = unserialize($text);
    3.  
    4. echo '<div>'. $array['first'] .'</div>';
    5. echo '<div>'. $array['second'] .'</div>'; 
    Если надо изменить какие то значения:
    Код (PHP):
    1. $array = array( 'first' => '1', 'second' => '2' );
    2.  
    3. $str = '<?php/*' . serialize($array);
    4. $file = fopen('hidden.php', "w");
    5. fwrite($file, $str);
    6. fclose($file); 
    как подобное реализовать при помощи var_export?
     
  22. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    я вообще офигиваю от того насколько ты не курил ман и от того что у тебя тестикул не хватает взять да проверить что какая функция возвращает...

    как можно делать с сериализацией:
    Код (PHP):
    1. <?php // config.ser.php
    2. return 'a:1:{s:5:"first";s:3:"one";}';
    Код (PHP):
    1. <?php // edit.ser.php
    2. $config = unserialize(include('config.ser.php'));
    3. $config['first'] = 'uno';
    4. $f = fopen('_config.ser.php', 'wb');
    5. fwrite($f, sprintf("<?php return '%s';", serialize($config))); 
    _config.ser.php:
    Код (PHP):
    1. <?php return 'a:1:{s:5:"first";s:3:"uno";}'; 
    та же хрень но с варэкспортом:
    Код (PHP):
    1. <?php // config.var.php
    2. return array(
    3.     'first' => 'one'
    4. ); 
    Код (PHP):
    1. <?php // edit.var.php
    2.  
    3. $config = include('config.var.php');
    4. $config['first'] = 'uno';
    5. $f = fopen('_config.var.php', 'wb');
    6. fwrite($f, sprintf("<?php return %s;", var_export($config, true))); 
    _config.var.php
    Код (PHP):
    1. <?php return array (
    2.   'first' => 'uno',
    3. ); 
    как видишь во втором случае использовать массив значительно удобнее - его руками можно поправить чего ты не сделаешь в сериализованном виде ибо там ты можешь брикнуть всё к чертям.


    еще о чем за тебя подумать?
     
  23. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Книга по которой я учился, там было написано что include возвращает true или false, а о таких фокусах там не было ни слова, тогда это в корне меняет дело.
    еще и экранирует кавычки этот var_export, ваще крутяк.
     
  24. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    само название функции как бы намекает, что она генерирует код, являющийся нативным представлением переменной, которая в нее была передана. Вообще, возьми за правило - наткнулся на незнакомую функцию, сразу же гугли ее в доках. Документация для пыха на русском языке есть. Официальная. Бояться ее не надо. Офигенная штука.

    Еще плюс варэкспорта в том, что такие конфиги можно кэшировать, если есть аккселератор. А сериализованный файлик ты в опкод не закешируешь - один фиг надо будет его читать, потом десериализовывать.

    З.Ы. Сам же я люблю писать парсеры, даже для пыхоконфигов. Которые со строками работают. Это делается довольно просто, если есть голова на плечах и опыт. И не ломает такие вещи, как комментарии, например. Но, опять же, сугубо дело вкуса и прямоты рук.