1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286
|
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- EN-Revision: 1.24 Maintainer: giacomo Status: ready -->
<reference id="ref.exec">
<title>Funzioni per l'esecuzione di programmi</title>
<titleabbrev>Esecuzione di programmi</titleabbrev>
<partintro>
<simpara>
Queste funzioni permettono l'esecuzione di comandi sul sistema stesso,
e rendono sicuri tali comandi. Queste funzioni sono anche strettamente
correlate al
<link linkend="language.operators.execution">operatore backtick</link>.
</simpara>
</partintro>
<refentry id="function.escapeshellarg">
<refnamediv>
<refname>escapeshellarg</refname>
<refpurpose>estrae una stringa da usare come un argomento della shell</refpurpose>
</refnamediv>
<refsect1>
<title>Descrizione</title>
<methodsynopsis>
<type>string</type><methodname>escapeshellarg</methodname>
<methodparam><type>string</type><parameter>arg</parameter></methodparam>
</methodsynopsis>
<para>
<function>escapeshellarg</function> aggiunge le virgolette singole
attorno ad una stringa ed elude ogni virgoletta semplice per permetterti di
passare una stringa direttamente ad una funzione della shell a che questa
venga trattata come un singolo argomento.
Questa funzione dovrebbe essere usata per eludere argomenti individuali per funzioni
della shell che giungano dall'input del utente. Le funzioni della shell includono
<function>exec</function>, <function>system</function> e
<link linkend="language.operators.execution">l'operatore backtick</link>.
Un utilizzo standard sarebbe:</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
system("ls ".escapeshellarg($dir));
]]>
</programlisting>
</informalexample>
</para>
<para>
Vedi anche <function>exec</function>, <function>popen</function>,
<function>system</function> e <link
linkend="language.operators.execution">l'operatore backtick</link>.
</para>
</refsect1>
</refentry>
<refentry id="function.escapeshellcmd">
<refnamediv>
<refname>escapeshellcmd</refname>
<refpurpose>elude i metacaratteri della shell</refpurpose>
</refnamediv>
<refsect1>
<title>Descrizione</title>
<methodsynopsis>
<type>string</type><methodname>escapeshellcmd</methodname>
<methodparam><type>string</type><parameter>command</parameter></methodparam>
</methodsynopsis>
<para>
<function>escapeshellcmd</function> elude ogni carattere di una stringa che
potrebbe essere usata per indurre un comando shell ad eseguire comandi
arbitrari. Questa funzione dovrebbe essere usata per assicurarsi che ogni dato
che giunga dall'input dell utente venga nutralizzato prima prima di venir passato
a funzioni come <function>exec</function> o
<function>system</function>, o al <link
linkend="language.operators.execution">operatore backtick
</link>. Un modello d'utilizzo potrebbe essere:</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
$e = escapeshellcmd($userinput);
system("echo $e"); // qui non ci preoccupiamo se $e contenga spazi
$f = escapeshellcmd($filename);
system("touch \"/tmp/$f\"; ls -l \"/tmp/$f\""); // e qui invece lo facciamo, usando le virgolette
]]>
</programlisting>
</informalexample>
</para>
<para>
Vedi anche <function>escapeshellarg</function>, <function>exec</function>,
<function>popen</function>, <function>system</function> e <link
linkend="language.operators.execution">l'operatore backtick</link>.
</para>
</refsect1>
</refentry>
<refentry id="function.exec">
<refnamediv>
<refname>exec</refname>
<refpurpose>Esegue un programma esterno</refpurpose>
</refnamediv>
<refsect1>
<title>Descrizione</title>
<methodsynopsis>
<type>string</type><methodname>exec</methodname>
<methodparam><type>string</type><parameter>command</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>array
</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>return_var</parameter></methodparam>
</methodsynopsis>
<para>
<function>exec</function> esegue il comando passato da
<parameter>command</parameter>, sebbene esso non invii nulla in output
Restituisce semplicemente l'ultima linea dal risultato del comando.
Se hai bisogno di eseguire un comando ed avere tutti i dati dal comando passato
direttamente senza alcuna interferenza, usa la funzione <function>passthru</function>.
</para>
<para>
Se l'argomento <parameter>array</parameter> presente, allora tale vettore specificato
verr riempito con ogni linea del output del comando.
Nota che se il vettore contiene gi degli elementi,
<function>exec</function> li aggiunger in coda vettore.
Se non vuoi che la funzione aggiunga elementi, esegui un
<function>unset</function> sul vettore prima di passarlo ad
<function>exec</function>.
</para>
<para>
Se viene passato l'argomento <parameter>return_var</parameter>
assieme all'argomento <parameter>array</parameter>, allora lo stato
del comando eseguito verra scitto in questa variabile.
</para>
<para>
Osserva che se intendi allocare dati che giungano dal utente
per essere passate a questa funzione, dovresti usare
<function>escapeshellcmd</function> per assicurarti che l'utente
non possa forzare il sistema ad eseguire comandi arbitrari.
</para>
<para>
Nota anche che se inizi un programma usando questa funzione e lo vuoi lasciare
in esecuzione in sottofondo, devi assicurarti che l'output del programa venga rediretto
ad un file o a qualche altro flusso di output, altrimenti PHP attendera fino alla fine
fine dell'esecuzione del programma.
</para>
<para>
Vedi anche <function>system</function>,
<function>passthru</function>, <function>popen</function>,
<function>escapeshellcmd</function> e <link
linkend="language.operators.execution">l'operatore backtick</link>.
</para>
</refsect1>
</refentry>
<refentry id="function.passthru">
<refnamediv>
<refname>passthru</refname>
<refpurpose>
Esegue un programma esterno e mostra l'output non elaborato
</refpurpose>
</refnamediv>
<refsect1>
<title>Descrizione</title>
<methodsynopsis>
<type>void</type><methodname>passthru</methodname>
<methodparam><type>string</type><parameter>command</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>return_var</parameter></methodparam>
</methodsynopsis>
<para>
La funzione <function>passthru</function> simile alla funzione
<function>exec</function> inquanto esegue
<parameter>command</parameter>. Se il parametro
<parameter>return_var</parameter> specificato, lo stato ritornato dal comando
Unix verr posto l. Questa funzione deve essere usata al posto di <function>exec</function>
o di <function>system</function> quando l'output del comando Unix consiste
in dati binari da passare direttamente al browser.
Un suo uso frequente consiste nel eseguire, ad esempio, le utility
pbmplus che possono restituire un flusso diretto all'immagine.
Impostado il tipo di contenuto a <emphasis>image/gif</emphasis> e successivamente
chiamando un programma pbmplus per generare una gif puoi realizzare uno script
PHP che genera direttamente immagini.</para>
<para>
Nota che se avvii un programma usando questa funzione e intendi lasciarlo
girare in sottofondo, devi accertarti che l'output del programma sia rediretto
in un file o a qualche altro flusso di output o PHP attender fino alla
fine dell'esecuzione del programma.
</para>
<para>
Vedi anche <function>exec</function>, <function>system</function>,
<function>popen</function>, <function>escapeshellcmd</function>,
e <link linkend="language.operators.execution">l'operatore backtick</link>.
</para>
</refsect1>
</refentry>
<refentry id="function.system">
<refnamediv>
<refname>system</refname>
<refpurpose>Esegue un programma esterno e mostra l'output</refpurpose>
</refnamediv>
<refsect1>
<title>Descrizione</title>
<methodsynopsis>
<type>string</type><methodname>system</methodname>
<methodparam><type>string</type><parameter>command</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>return_var</parameter></methodparam>
</methodsynopsis>
<para>
<function>system</function> semplicemente come la versione C della funzione
che esegue il <parameter>command</parameter> dato e restituisce in uscita il risultato.
Se viene fornita una variabile come secondo argomento, allora il codice di stato
ritornato dal comando eseguito verr scritto in tale variabile.
</para>
<para>
Nota che se intendi permettere che i dati in ingresso dall'utente
vengano passati a questa funzione, dovresti utilizzare la funzione
<function>escapeshellcmd</function> per assicurarti che l'utente non possa
forzare il sistema ad eseguire comandi arbitrari.
</para>
<para>
Nota che se avvii un programma usando questa funzione e intendi lasciarlo
girare in sottofondo, devi accertarti che l'output del programma sia rediretto
in un file o a qualche altro flusso di output o PHP attender fino alla
fine dell'esecuzione del programma.
</para>
<para>
La chiamata a <function>system</function> tenta anche di ripulire automaticamente
il buffer di output del web server dopo ogni linea di output se PHP
gira come un modulo server.
</para>
<para>
Ritorna l'ultima linea del output del comando se ha successo e &false;
se fallisce.
</para>
<para>
Se devi eseguire un comando ottenendo tutti i dati restituiti dal comando
direttamente senza alcuna interferenza, usa la funzione
<function>passthru</function>.
</para>
<para>
Vedi anche <function>exec</function>,
<function>passthru</function>, <function>popen</function>,
<function>escapeshellcmd</function> e <link
linkend="language.operators.execution">l'operatore backtick</link>.
</para>
</refsect1>
</refentry>
<refentry id='function.shell-exec'>
<refnamediv>
<refname>shell_exec</refname>
<refpurpose>
Esegue un comando attraverso la shell e restituisce l'output come stringa
</refpurpose>
</refnamediv>
<refsect1>
<title>Descrizione</title>
<methodsynopsis>
<type>string</type><methodname>shell_exec</methodname>
<methodparam><type>string</type><parameter>cmd</parameter></methodparam>
</methodsynopsis>
<para>
&warn.undocumented.func;
</para>
</refsect1>
</refentry>
</reference>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
|