|
|
PHP (angielski akronim rekurencyjny, którego rozwinięcie to PHP Hypertext Preprocessor), pierwotnie nazwany Personal
Home Page - skryptowy język programowania, służący przede wszystkim do tworzenia dynamicznych stron WWW i wykonywany w
tym przypadku po stronie serwera, z możliwością zagnieżdżania w HTML (bądź XHTML). PHP jest podobny w założeniach do
dużo starszego mechanizmu SSI (Server Side Includes), jednak jest w stosunku do SSI nieporównanie bardziej rozbudowany.
Udostępniany jest na zasadach licencji open-source. Jego składnia bazuje na językach C, Java i Perl.
SQL (ang. Structured Query Language) to strukturalny język zapytań używany do tworzenia, modyfikowania baz danych oraz
do umieszczania i pobierania danych z baz danych.
Język SQL jest językiem deklaratywnym. Decyzję o sposobie przechowywania i pobrania danych pozostawia się systemowi
zarządzania bazą danych DBMS.
Jest to język programowania opracowany w latach siedemdziesiątych w firmie IBM. Stał się on standardem w komunikacji z
serwerami relacyjnych baz danych. Wiele współczesnych systemów relacyjnych baz danych używa do komunikacji z
użytkownikiem SQL, dlatego mówi się, że korzystanie z relacyjnych baz danych, to korzystanie z SQL-a.
Apache jest otwartym serwerem HTTP dostępnym dla wielu systemów operacyjnych (m.in. UNIX, GNU/Linux, BSD,
Microsoft Windows). Po angielsku słowo Apache wymawia się epaczi, co brzmi tak samo jak a patchy (server), co było
określeniem tego serwera we wczesnym stadium jego rozwoju w 1995 roku, kiedy był on głównie zbiorem poprawek (patch)
nałożonych na serwer HTTP o nazwie NCSA.
Apache jest najszerzej stosowanym serwerem HTTP w Internecie. W maju 2003 jego udział wśród serwerów wynosił 62%. W
połączeniu z interpreterem języka skryptowego PHP i bazą danych MySQL, Apache stanowi jedno z najczęściej spotykanych
środowisk w firmach oferujących miejsce na serwerach sieciowych.
|
proc_open
(PHP 4 >= 4.3.0, PHP 5) proc_open -- Execute a
command and open file pointers for input/output
Opisresource proc_open (
string cmd, array descriptorspec, array &pipes [, string
cwd [, array env [, array other_options]]] )
proc_open() is similar to popen() but
provides a much greater degree of control over the program
execution.
PHP 5 introduces pty support for systems with Unix98 ptys.
This allows your script to interact with applications that
expect to be talking to a terminal. A pty works like a pipe,
but is bi-directional, so there is no need to specify a
read/write mode. The example below shows how to use a pty; note
that you don't have to have all descriptors talking to a pty.
Also note that only one pty is created, even though pty is
specified 3 times. In a future version of PHP, it might be
possible to do more than just read and write to the pty.
Parametry
- cmd
-
The command to execute
- descriptorspec
-
An indexed array where the key represents the
descriptor number and the value represents how PHP will
pass that descriptor to the child process. 0 is stdin, 1
is stdout, while 2 is stderr.
The currently supported pipe types are file, pipe and
pty.
The file descriptor numbers are not limited to 0, 1
and 2 - you may specify any valid file descriptor number
and it will be passed to the child process. This allows
your script to interoperate with other scripts that run
as "co-processes". In particular, this is useful for
passing passphrases to programs like PGP, GPG and openssl
in a more secure manner. It is also useful for reading
status information provided by those programs on
auxiliary file descriptors.
- pipes
-
Will be set to an indexed array of file pointers that
correspond to PHP's end of any pipes that are
created.
- cwd
-
The initial working dir for the command. This must be
an absolute directory path, or
NULL if you want to use
the default value (the working dir of the current PHP
process)
- env
-
An array with the environment variables for the
command that will be run, or NULL to use the same environment
as the current PHP process
- other_options
-
Allows you to specify additional options. Currently
only suppress_errors is
supported, which suppresses errors generated by this
function when it's set to TRUE
Zwracane wartości
Returns a resource representing the process, which should be
freed using proc_close() when you are finished with it.
On failure returns FALSE.
Przykłady
Przykład 1. A proc_open() example
<?php
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to
);
$cwd = '/tmp'; $env = array('some_option' => 'aeiou');
$process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);
if (is_resource($process)) {
// $pipes now looks like this:
// 0 => writeable handle connected to child stdin
// 1 => readable handle connected to child stdout
// Any error output will be appended to /tmp/error-output.txt
fwrite($pipes[0], '<?php print_r($_ENV); ?>');
fclose($pipes[0]);
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
// It is important that you close any pipes before calling
// proc_close in order to avoid a deadlock
$return_value = proc_close($process);
echo "command returned $return_value\n";
} ?> |
Powyższy przykład wyświetli coś podobnego do:
Array
(
[some_option] => aeiou
[PWD] => /tmp
[SHLVL] => 1
[_] => /usr/local/bin/php
)
command returned 0
|
|
Przykład 2. ptys usage
<?php // Create a pseudo terminal for the child process
$descriptorspec = array(
0 => array("pty"),
1 => array("pty"),
2 => array("pty")
); $process = proc_open("cvs -d:pserver:cvsread@cvs.php.net:/repository login", $descriptorspec, $pipes);
if (is_resource($process)) {
// work with it here }
?> |
|
Notatki
Notatka: Windows compatibility: Descriptors
beyond 2 (stderr) are made available to the child process
as inheritable handles, but since the Windows architecture
does not associate file descriptor numbers with low-level
handles, the child process does not (yet) have a means of
accessing those handles. Stdin, stdout and stderr work as
expected.
Notatka: If you only need a uni-directional
(one-way) process pipe, use popen()
instead, as it is much easier to use.
|