Jump to content

Find and store directives in http.conf


Asheeown

Recommended Posts

So I am making a linux migration script and my third step is to transfer all the VirtualHost directives and the NameVirtualHost to the new machine.

 

For the NameVirtualHost assignment I need to get any and all lines that look like this:

NameVirtualHost 192.168.1.170:80

And save them in an array so I can add them to the new server, there are usually only one of those entries but multiples can occur

 

For the VirtualHost directives I'll give an example below

<VirtualHost 192.168.1.170:80>

# Created on Aug 20, 2009

ServerAdmin [email protected]

DocumentRoot /home/Test/htdocs

ServerName www.test.com

ServerAlias test.com

AddHandler server-parsed htm html shtml

AccessFileName .htaccess

CustomLog /home/Test/Logs/access_log combined

<Directory />

AllowOverride All

</Directory>

<Directory /home/Test/htdocs>

Options Indexes

Options +Includes

</Directory>

ScriptAlias /cgi-bin/ /home/Test/cgi-bin/

</VirtualHost>

 

I figured since the VirtualHost directive is always the same, but the IP may be different it shouldn't be too hard.  However, I never got into regex and I can't figure out how to get these things and store them in variable for later use.

Link to comment
https://forums.phpfreaks.com/topic/171139-find-and-store-directives-in-httpconf/
Share on other sites

preg_match_all('#<NameVirtualHost (.*?)>#', $Contents, $vhost_matches);

 

Produces two empty arrays within $vhost_matches

 

If I take away the # symbols in the pattern I get three values $vhost_matches[0] $vhost_matches[1] $vhost_matches[2] but all they have in them is "NameVirtualHost"

Just so you know it doesn't match which regex delimiter you use. People have their own preference, I just seem to think I have to escape less using hash.

 

And.. well if it works, just wrap the part you want to match in brackets:

 

preg_match_all('/NameVirtualHost ([^\*].*:.*)\r/', $Contents, $vhost_matches);

That works great.  Now for my VirtualHosts one, I made one, and like I said, I'm horrible at this.

 

<?php
preg_match_all('/\<VirtualHost [^\*].*?\>.*\<\/VirtualHost\>/s', $Contents, $vhost_matches);
?>

 

Only problem is it takes away every directive, starting with <VirtualHost> they just don't show up in the output.  There are other directives inside <VirtualHost> such as:

<Directory>

<Location>

And things of that nature, any idea of why that is happening?

 

Still excludes all directives inside.

 

Output:

# Created on Aug 20, 2009

ServerAdmin [email protected]

DocumentRoot /home/Test/htdocs

ServerName www.test.com

ServerAlias test.com

AddHandler server-parsed htm html shtml

AccessFileName .htaccess

CustomLog /home/Test/Logs/access_log combined

 

AllowOverride All

 

 

Options Indexes

Options +Includes

 

ScriptAlias /cgi-bin/ /home/Test/cgi-bin/

 

Desired Output:

# Created on Aug 20, 2009

ServerAdmin [email protected]

DocumentRoot /home/Test/htdocs

ServerName www.test.com

ServerAlias test.com

AddHandler server-parsed htm html shtml

AccessFileName .htaccess

CustomLog /home/Test/Logs/access_log combined

<Directory />

AllowOverride All

</Directory>

<Directory /home/Test/htdocs>

Options Indexes

Options +Includes

</Directory>

ScriptAlias /cgi-bin/ /home/Test/cgi-bin/

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.