рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдЙрдмрдВрдЯреВ рдПрдкрд╛рдЪреЗ 2 рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЪрд╛рд▓реВ / рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рджреЛрд╖ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдмреЗрд╢рдХ, рдЕрдкрд╛рдЪреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЙрдкрдбреЛрдореЗрди рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬреЛ рдЕрдкрд╛рдЪреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╣реЛрд╕реНрдЯ рдирд╛рдо рдХреЛ / etc / рдореЗрдЬрдмрд╛рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдореИрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рд░рд▓ рдХрд╛рдо рдХреЗ рд▓рд┐рдП PHP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдореИрдВ рднреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реВрдВред
рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рджреЛ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рдПрдХ рд╕рд╛рде рдХрд░реЗрдВрдЧреЗ: рд╣рдо рдЦреБрдж рдХреЛ PHP рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рд╣рдорд╛рд░реЗ рдЬреАрд╡рди рдХреЛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ред
рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг
, , PHP
#!/usr/bin/env php
Linux.
, , , , root . :
- $virtual_hosts_dir = "/etc/apache2/sites-available/";
- if (!is_dir($virtual_hosts_dir) || !is_writable($virtual_hosts_dir))
- {
- echo "You must run this script as root!\n";
- exit;
- }
, , . , , . PHP $argc $argv. , тАФ . - тАФ . , :
- if ($argc>1)
- {
- for ($i=1; $i<$argc; $i++)
- {
- $option = explode("=", $argv[$i]);
- switch ($option[0])
- {
- case "-h":
- case "--add-to-hosts":
- $add_to_hosts = true;
- break;
- case "-n":
- case "--no-add-to-hosts":
- $add_to_hosts = false;
- break;
- case "-a":
- case "--server-alias":
- if (isset($option[1]))
- {
- $server_alias = $option[1];
- }
- else
- {
- echo "Wrong option: {$argv[$i]}\n";
- }
- break;
- case "-d":
- case "--document-root":
- if (isset($option[1]))
- {
- if ($option[1] == "default")
- {
- $document_root = $default_doc_root
- }
- else if (is_dir(dirname($option[1])))
- {
- $document_root = $option[1];
- }
- }
- else
- {
- echo "Wrong option: {$argv[$i]}\n";
- }
- break;
- default:
- if (substr($argv[$i], 1, 1) == '-')
- {
- echo "Unknown option: {$argv[$i]}\n";
- }
- break;
- }
- }
- }
\
. , . \, . PHP \ STDIN, STDOUT, STDERR. , . , :
- $line = fgets(STDIN);
$line. , , .. PHP . , , . , \ :
- $stdin = fopen("php://stdin", "r");
- $line1 = gets($stdin);
- $line2 = gets($stdin);
- fclose($stdin);
, .
, echo.
. - , , - :
- while (!$server_alias)
- {
- echo "Enter your hostname: ";
- $server_alias = trim(fgets(STDIN));
- }
, , /etc/hosts, , . , /etc/hosts, , Enter :
- if ($add_to_hosts === null)
- {
- echo "Add $server_alias to your /etc/hosts ? (Y/N) [Y]: ";
- $line = trim(fgets(STDIN));
- if ($line == 'n' || $line == 'N')
- {
- $add_to_hosts = false;
- }
- else
- {
- $add_to_hosts = true;
- }
- }
:
- if (!$document_root)
- {
- $default_doc_root = $default_doc_root.'/'.$server_alias;
- echo "Enter your document root [$default_doc_root]: ";
- $line = trim(fgets(STDIN));
- if ($line && is_dir(dirname($line)))
- {
- $document_root = $line;
- }
- else
- {
- $document_root = $default_doc_root;
- }
- }
-
, , , . , , тАФ :
- if (!is_dir($document_root))
- {
- mkdir($document_root);
- }
/etc/hosts. , :
- if ($add_to_hosts)
- {
- $hosts = file_get_contents("/etc/hosts");
- $hosts .= "127.0.0.1\t$server_alias\n";
- file_put_contents("/etc/hosts", $hosts);
- }
:
- $host_template = <<<HOST
- <VirtualHost *:80>
- ServerAdmin i@bogus.in
- ServerAlias $server_alias
- DocumentRoot $document_root
- <Directory $document_root>
- Options Indexes FollowSymLinks MultiViews
- AllowOverride All
- Order allow,deny
- allow from all
- </Directory>
- ErrorLog ${APACHE_LOG_DIR}/$server_alias-error.log;
- LogLevel warn
- CustomLog ${APACHE_LOG_DIR}/$server_alias-access.log combined
- </VirtualHost>
- HOST;
, a2ensite:
- file_put_contents("/etc/apache2/sites-available/$server_alias", $host_template);
- echo "Apache config for this hostname created successfully! Don't forget to run a2ensite $server_alias\n";
. +x, :
chmod +x a2addsite
. :
% sudo ./a2addsite
Add test.local to your /etc/hosts? (Y/N) [Y]:
Enter your document root [/home/www/test.local]:
Apache config for this hostname created successfully! Don't forget to run a2ensite test.local
:
% sudo ./a2addsite --server-alias=test2.local --add-to-hosts --document-root=default
Apache config for this hostname created successfully! Don't forget to run a2ensite test2.local
PHP , . , , - .
, PHP PHP (.):
Command line usage
PHP input/output