|
|
|
| Добрый день.
Только начинаю изучать пхп по самоучителям , книгам с softtime.ru , пока мало знаю , так , что не пинать.
Подскажите , как мне написать парсер для конфига т.е есть тхт файл такого вида:
<VirtualHost 80.87.128.33:80>
# RlimitCPU is amount of actual CPU time allowed per process max.
RLimitCPU 100 100
#Limit of 64Mb memory per process
RLimitMEM 65216000
User procedis
Group procedis
SetEnv QMAILUSER postmaster
SetEnv QMAILHOST errvin.info
ServerAdmin webmaster@errvin.info
DocumentRoot /home/procedis/public_html
ServerName www.errvin.info
ServerAlias errvin.info procedis.boson.posiweb.net procedis.com www.procedis.com
CustomLog /home/procedis/logs/access_log combined
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
</VirtualHost>
|
Мне нужно выбрать все домена т.е все , что идет после ServerName и сохранить в пхп , кода там на 10 строчек , не совсем понимаю еще как это делается , помогите примерчиком , заранее спасибо! | |
|
|
|
|
|
|
|
для: adminn
(20.11.2009 в 04:27)
| | Можно воспользоваться регулярными выражениями
<?php
$text = "<VirtualHost 80.87.128.33:80>
# RlimitCPU is amount of actual CPU time allowed per process max.
RLimitCPU 100 100
#Limit of 64Mb memory per process
RLimitMEM 65216000
User procedis
Group procedis
SetEnv QMAILUSER postmaster
SetEnv QMAILHOST errvin.info
ServerAdmin webmaster@errvin.info
DocumentRoot /home/procedis/public_html
ServerName www.errvin.info
ServerAlias errvin.info procedis.boson.posiweb.net procedis.com www.procedis.com
CustomLog /home/procedis/logs/access_log combined
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
</VirtualHost>";
preg_match_all('/ServerName[\s]([^\s]+)\b/', $text, $out);
echo "<pre>";
print_r($out[1]);
echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(20.11.2009 в 13:30)
| | загнал в переменную весь конфиг , выводит пустую страницу( подскажите? | |
|
|
|
|
|
|
|
для: adminn
(21.11.2009 в 02:00)
| | Вообще такие конфиги сделаны так что их приложения разбирают построчно
, похоже на чтение файлов fgets();
<?php
$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
fclose($handle);
}
?>
| только в цикле будет что-то типа switch с проверкой и разделением строки
, что-то не соображу возможно-ли как-нибудь применить sscanf()
А так выражениями и правда наверное попросще.
, похоже лучше сделать ещё проверку на начало строки, чтобы не зацепить чего из комментариев
, и наверное просто пробелов после ключевого слова было больше
'/^\s*ServerName\s+(\S+)/m' | |
|
|
|
|
|
|
|
для: heed
(21.11.2009 в 02:45)
| | не совсем понятно , можно пример? пытаюсь , то ерроры , то пустой вывод( | |
|
|
|
|
|
|
|
для: adminn
(21.11.2009 в 02:00)
| | А если переменную вывести/или размер переменной - в ней точно имеется конфигурационный файл? | |
|
|
|
|
|
|
|
для: cheops
(21.11.2009 в 12:19)
| | Спасибо тебе за помощь!
Вопрос твой не свовсем понял , у меня такой вид получился , выводит пустую страницу , может из за проблелов?
<?php
$text = "<VirtualHost 80.87.128.33:80>
# RlimitCPU is amount of actual CPU time allowed per process max.
RLimitCPU 100 100
#Limit of 64Mb memory per process
RLimitMEM 65216000
User procedis
Group procedis
SetEnv QMAILUSER postmaster
SetEnv QMAILHOST errvin.info
ServerAdmin webmaster@errvin.info
DocumentRoot /home/procedis/public_html
ServerName www.errvin.info
ServerAlias errvin.info procedis.boson.posiweb.net procedis.com www.procedis.com
CustomLog /home/procedis/logs/access_log combined
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
</VirtualHost>
<VirtualHost 80.87.128.33:80>
# RlimitCPU is amount of actual CPU time allowed per process max.
RLimitCPU 100 100
#Limit of 64Mb memory per process
RLimitMEM 65216000
User procedis
Group procedis
SetEnv QMAILUSER postmaster
SetEnv QMAILHOST errvin.info
ServerAdmin webmaster@errvin.info
DocumentRoot /home/procedis/public_html
ServerName www.errvin.info
ServerAlias errvin.info procedis.boson.posiweb.net procedis.com www.procedis.com
CustomLog /home/procedis/logs/access_log combined
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
</VirtualHost>
<VirtualHost 80.87.128.33:80>
# RlimitCPU is amount of actual CPU time allowed per process max.
RLimitCPU 100 100
#Limit of 64Mb memory per process
RLimitMEM 65216000
User procedis
Group procedis
SetEnv QMAILUSER postmaster
SetEnv QMAILHOST errvin.info
ServerAdmin webmaster@errvin.info
DocumentRoot /home/procedis/public_html
ServerName www.errvin.info
ServerAlias errvin.info procedis.boson.posiweb.net procedis.com www.procedis.com
CustomLog /home/procedis/logs/access_log combined
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
</VirtualHost>";
preg_match_all('/ServerName[\s]([^\s]+)\b/', $text, $out);
echo "<pre>";
print_r($out[1]);
echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: adminn
(21.11.2009 в 16:20)
| | Странно... у меня этот скрипт работает (выдает три позиции)... попробуйте изменить регулярное выражение на следующее
'/ServerName[\s]+([^\s]+)\b/'
|
| |
|
|
|
|
|
|
|
для: cheops
(21.11.2009 в 18:45)
| | Огромное спасибо! разобрался работает!
Только вот выводит в масиве такого вида:
(
[0] => www.errvin.info
[1] => www.errvin.info
[2] => www.errvin.info
)
|
а мне нужно привести список к виду:
www.errvin.info
www.errvin.info
www.errvin.info
Подскажите , а то не могу начать работать( | |
|
|
|
|
|
|
|
для: adminn
(22.11.2009 в 20:48)
| | а в чем разница? | |
|
|
|
|
|
|
|
для: Trianon
(22.11.2009 в 21:05)
| | там конфиг около 1000 сайтов , мне нужно привести его в рабочий вид , я же не могу сидеть и удалять [0] => и т.п подскажите как вывести только результат? | |
|
|
|
|
|
|
|
для: adminn
(22.11.2009 в 21:52)
| | а кто Вас заставляет в рабочем коде использовать print_r ?
print_r нужна для отладки и демонстрации - но никак не для работы.
выводите элемнты массива по одному в цикле. | |
|
|
|
|
|
|
|
для: Trianon
(22.11.2009 в 23:12)
| | почитал еще у вас в доках , написал все как хотел , проверил, работает! только вот если я загоняю весь конфиг , он большо, то получаю пустой результат , подскажите? | |
|
|
|
|
|
|
|
для: adminn
(23.11.2009 в 02:02)
| | del | |
|
|
|
|
|
|
|
для: Trianon
(22.11.2009 в 23:12)
| | Что не так делаю, результат получаю весь файл(
set_time_limit(300);
$file = fopen("config.txt","r");
if(!file)
{
echo("Ошибка открытия файла");
}
else {
$text == fpassthru($file);
preg_match_all('/ServerName[\s]([^\s]+)\b/', $text, $out);
for ($i=0; $i< count($out[0]); $i++) {
echo "<pre>";
echo $out[1][$i] . "\n";
echo "<pre>";
}
}
|
| |
|
|
|
|
|
|
|
для: adminn
(23.11.2009 в 03:10)
| | fpassthru() выводит содержимое файла в окно браузера, лучше воспользоваться функцией file_get_contents()
<?php
$text = file_get_contents($file);
preg_match_all('/ServerName[\s]([^\s]+)\b/', $text, $out);
for ($i=0; $i< count($out[0]); $i++) {
echo $out[1][$i] . "<br>";
}
?>
|
| |
|
|
|
|
|
|
|
для: adminn
(23.11.2009 в 03:10)
| | что делаете не так?
достаете функции случайным тыком и применяете их вслепую, вместо того чтоб выяснить, что делает каждая из них. | |
|
|
|