arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
251 lines (166 loc) • 10.5 kB
Markdown
[PHP](http://www.php.net/) è un linguaggio di scripting general-purpose ampiamente utilizzato. È specialmente indicato per lo sviluppo Web e può essere integrato nell'HTML.
## Contents
* [1 Installazione](#Installazione)
* [2 Setup](#Setup)
* [3 Configurazione](#Configurazione)
* [4 Estensioni](#Estensioni)
* [4.1 gd](#gd)
* [4.2 imagemagick](#imagemagick)
* [4.3 pthreads](#pthreads)
* [4.4 mcrypt](#mcrypt)
* [4.5 PCNTL](#PCNTL)
* [5 Zend Core + Apache](#Zend_Core_.2B_Apache)
* [6 Strumenti per lo sviluppo](#Strumenti_per_lo_sviluppo)
* [6.1 Komodo](#Komodo)
* [6.2 Netbeans](#Netbeans)
* [6.3 Eclipse PDT](#Eclipse_PDT)
* [6.4 Zend Studio](#Zend_Studio)
* [6.5 Aptana Studio](#Aptana_Studio)
* [6.6 Zend Code Analyzer](#Zend_Code_Analyzer)
* [6.6.1 Installazione](#Installazione_2)
* [6.6.2 Vim Integration](#Vim_Integration)
* [6.6.3 Eclipse Integration](#Eclipse_Integration)
* [6.6.4 Komodo Integration](#Komodo_Integration)
* [7 Risoluzione problemi](#Risoluzione_problemi)
* [7.1 PHP Fatal error: Class 'ZipArchive' not found](#PHP_Fatal_error:_Class_.27ZipArchive.27_not_found)
* [7.2 /etc/php/php.ini not parsed](#.2Fetc.2Fphp.2Fphp.ini_not_parsed)
* [8 Altre risorse](#Altre_risorse)
## Installazione
[Installare](/index.php/Pacman "Pacman") il pacchetto [php](https://www.archlinux.org/packages/?name=php) dagli [official repositories](/index.php/Official_repositories "Official repositories").
Si noti che per eseguire script PHP come CGI, è necessario il pacchetto [php-cgi](https://www.archlinux.org/packages/?name=php-cgi).
## Setup
PHP può essere eseguito in modalità standalone, tuttavia in genere viene utilizzato con server HTTP come Apache, nginx e lighttpd.
* **standalone**: `php -S localhost:8000 -t public_html/`. Leggi la [documentazione](http://docs.php.net/manual/en/features.commandline.webserver.php)
* **Apache**: vedi [Apache HTTP Server](/index.php/Apache_HTTP_Server "Apache HTTP Server")
* **lighttpd**: vedi [lighttpd](/index.php/Lighttpd "Lighttpd")
* **nginx**: vedi [nginx](/index.php/Nginx "Nginx")
## Configurazione
Il file di configurazione principale di PHP è ben documentato e si trova a `/etc/php/php.ini`.
* Si consiglia di impostare la propria timezone ([lista delle timezones](http://www.php.net/manual/en/timezones.php)) in `/etc/php/php.ini` per esempio:
```
date.timezone = Europe/Rome
```
* Se si desidera visualizzare gli errori per il debug del priorio codice PHP, impostare `display_errors` su `On` in `/etc/php/php.ini`:
```
display_errors=On
```
* Ricordarsi di aggiungere un gestore di file per `.phtml`, nel caso se ne abbia bisogno, in `/etc/httpd/conf/extra/php5_module.conf`:
```
DirectoryIndex index.php index.phtml index.html
```
## Estensioni
Nei repository ufficiali si possono trovare anche diverse estensioni per PHP comunemente usate:
```
# pacman -Ss php-
```
### gd
Per [php-gd](https://www.archlinux.org/packages/?name=php-gd) decommentare questa riga in `/etc/php/php.ini`:
```
extension=gd.so
```
### imagemagick
Per [imagemagick](https://www.archlinux.org/packages/?name=imagemagick) eseguire `# pecl install imagick`. I file binari di pecl sono inclusi nel pacchetto [php-pear](https://aur.archlinux.org/packages/php-pear/). Quindi aggiungere
```
extension=imagick.so
```
a `/etc/php/php.ini`.
### pthreads
Se si desidera avere POSIX multi-threading è necessaria l'estensione pthreads. Per installare l'estensione pthreads ([http://pecl.php.net/package/pthreads](http://pecl.php.net/package/pthreads)) tramite `pecl` si deve usare una versione compilata di PHP con il thread safety support flag `--enable-maintainer-zts`. Attualmente il modo più semplice per farlo sarebbe di fare il rebuild del pacchetto originale con la flag.
Si possono trovare altre istruzioni alla pagina [PHP pthreads extension](/index.php/PHP_pthreads_extension "PHP pthreads extension").
### mcrypt
* Per il modulo `mcrypt`, installate [php-mcrypt](https://www.archlinux.org/packages/?name=php-mcrypt) e decommentate `extension=mcrypt.so` in `/etc/php/php.ini`:
```
extension=mcrypt.so
```
### PCNTL
PCNTL consente di creare processi direttamente nella macchina lato server. Tuttavia dà anche il potere a PHP di complicare le cose. Si tratta di un'estensione di PHP che non deve essere caricata con leggerezza, a causa del grande potere che dà a PHP. Per attivare (di default non è attiva) questa estensione PCNTL deve essere compilata all'interno di PHP.
## Zend Core + Apache
Zend Core è la distribuzione ufficiale di PHP fornito da [zend.com](http://www.zend.com). Essa comprende un installer/updater, Zend Optimizer, supporto Oracle, e le librerie necessarie. Tuttavia, manca il supporto per PostgreSQL, Firebird, e ODBC.
* Installare [mod_fcgid](https://www.archlinux.org/packages/?name=mod_fcgid), un modulo FastCGI per Apache (quello ufficiale fa schifo).
* Installare Zend Core (official PHP distribution)
* Disinstallare il pacchetto [php](https://www.archlinux.org/packages/?name=php).
* Scaricare e installare zend core da [[1]](http://www.zend.com/products/zend_core) ; **non** fategli installare il pacchetto apache o impostare il web server. Si installa sempre in `/usr/local/Zend/Core` per via di un hard-coded path.
* Creare uno script `/usr/local/bin/zendcore` e creare dei symlinks a *php*, *php-cgi*, *pear*, *phpize* sotto */usr/local/bin*
`#!/bin/bash
export LD_LIBRARY_PATH="/usr/local/Zend/Core/lib"
exec /usr/local/Zend/Core/bin/`basename $0` "$@"`
* Setup Apache:
* In `/etc/httpd/conf/httpd.conf`, aggiungere
`LoadModule fcgid_module modules/mod_fcgid.so
<Directory /srv/http>
AddHandler fcgid-script .php
FCGIWrapper /usr/local/bin/php-cgi .php
Options ExecCGI
Allow from all
</Directory>
SocketPath /tmp/fcgidsock
SharememPath /tmp/fcgidshm`
* Ricordarsi di cambiare il Directory path
* Disabilitare Zend Optimizer (così si può usare la cache):
* Modificare `/etc/php.ini`, decommentare la seguente riga quasi alla fine del file:
`zend_extension_manager.optimizer="/usr/local/Zend/Core/lib/zend/optimizer"`
* Installare APC (Cache PHP alternativa):
* Eseguire `pear install pecl.php.net/apc` come superuser.
* Modificare `/etc/php.ini`, aggiungere la riga dopo *"; Zend Core extensions..."* (line 1205):
`extension=apc.so`
* Aggiornare Zend Core e/o installare altre componenti
* Basta eseguire `/usr/local/Zend/Core/setup`
## Strumenti per lo sviluppo
### Komodo
Buona integrazione per PHP+HTML+JavaScript. Manca la formattazione del codice e il supporto unicode nei commenti doc.
[Komodo IDE](http://www.activestate.com/products/komodo_ide/) | [Komodo Edit (free)](http://www.activestate.com/products/komodo_edit/)
Aggiungere codifiche personalizzate:
* Modificare `*KOMODO_INSTALL_DIR*/lib/mozilla/components/koEncodingServices.py`, riga 84, aggiungere:
```
('cp950', 'Chinese(CP-950/Big5)', 'CP950', '', 1,'cp950'),
('cp936', 'Chinese(CP-936/GB2312)', 'CP936', '', 1,'cp936'),
('GB2312', 'Chinese(GB-2312)', 'GB2312', '', 1,'GB2312'),
....
```
Il formato è (*encoding name in python*, *description*, *short description*, BOM, *is ASCII-superset?*, *font encoding*)
### Netbeans
Un IDE completo per molti linguaggi incluso PHP. Include caratteristiche come il debug, refactoring, code templating, autocompletamento, funzionalità XML e web design e funzionalità di sviluppo (ottima funzionalità di completamento automatico per CSS e notifiche/suggerimenti per il codice PHP/Javascript).
### Eclipse PDT
[Eclipse PDT](http://www.zend.com/pdt) non è molto completo allo stato attuale (v0.7).
Necessita di altri plugin per il supporto di JavaScript e delle query al database.
### Zend Studio
[Zend Studio](http://www.zend.com/products/studio/) è il PHP IDE ufficiale, basato su eclipse. Ha l'autocompletamento, formattazione del codice avanzata, editor HTML WYSIWYG, refactoring, e tutte le funzionalità di eclipse come l'accesso al database, l'integrazione del version control e qualunque altra cosa si possa ottenere da altri plugin per eclipse. Si può installare il pacchetto [zendstudio](https://aur.archlinux.org/packages/zendstudio/) su AUR.
### Aptana Studio
Un buon IDE per PHP e web development. La versione corrente (3.2.2) non ha un debugger PHP.
### Zend Code Analyzer
Un analizzatore di codice PHP di Zend Studio. Indispensabile per ogni programmatore PHP che si rispetti.
#### Installazione
* Scaricare ed installare Zend Studio Neon
* Nella cartella di installazione, eseguire `find . -name "ZendCodeAnalyzer` per avere il percorso.
* Copiare ZendCodeAnalyzer in `/usr/local/bin/zca`
* Ora si può rimuovere zend studio; non serve nessuna chiave o cos'altro.
#### Vim Integration
Aggiungere le seguenti righe nel proprio `.vimrc`:
```
autocmd FileType php setlocal makeprg=zca\ %<.php
autocmd FileType php setlocal errorformat=%f(line\ %l):\ %m
```
#### Eclipse Integration
*Error Link* plugin:
* Symlink *zca* verso *build.zca* (così Error Link può riconoscerlo)
* Installare [Sunshade](http://sunshade.sourceforge.net/) plugin suite;
* Preference -> Sunshade -> Error Link -> Add: *`^(.*\.php)\(line (\d+)\): ()(.*)`*
* Run -> External Tools -> Open External Tools Dialog -> Select "Program" -> Click on "New":
Name: Zend Code Analyzer
Location: */usr/local/bin/build.zca*
Working Directory: *${container_loc}*
Arguments: *--recursive ${resource_name}*
#### Komodo Integration
Toolbox -> Add -> New Command:
* Command: *zca --recursive %F*
* Run in: Command Output Tab
* Parse output with: *`^(?P<file>.+?)\(line (?P<line>\d+)\): (?P<content>.*)$`*
* Select *Show parsed output as a list*
## Risoluzione problemi
### PHP Fatal error: Class 'ZipArchive' not found
Assicurarsi che l'estensione zip sia abilitata.
`$ grep zip /etc/php/php.ini` `extension=zip.so`
### /etc/php/php.ini not parsed
Se il proprio php.ini non viene analizzato, il file ini è denominato in base alla SAPI che si sta utilizzando. Per esempio se si sta utilizzando UWSGI il file dovrebbe essere nominato /etc/php/php-uwsgi.ini, se si sta utilizzando CLI /etc/php/php-cli.ini
## Altre risorse
* [PHP Official Website](http://www.php.net/)