# PHP (Italiano)

PHP è un linguaggio di scripting general-purpose ampiamente utilizzato. È specialmente indicato per lo sviluppo Web e può essere integrato nell'HTML.

## Installazione

Installare il pacchetto php dagli official repositories.

Si noti che per eseguire script PHP come CGI, è necessario il pacchetto 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
- Apache: vedi Apache HTTP Server
- lighttpd: vedi lighttpd
- nginx: vedi 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) 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 decommentare questa riga in `/etc/php/php.ini`:

    extension=gd.so

### imagemagick

Per imagemagick eseguire `# pecl install imagick`. I file binari di pecl sono inclusi nel pacchetto php-pearAUR. 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) 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.

### mcrypt

- Per il modulo `mcrypt`, installate 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. 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, un modulo FastCGI per Apache (quello ufficiale fa schifo).
- Installare Zend Core (official PHP distribution)
  - Disinstallare il pacchetto php.
  - Scaricare e installare zend core da [1] ; 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"`

This article or section is out of date.

Reason: Usare APCu/OPcache https://www.archlinux.org/news/php-55-available-in-the-extra-repository/ (Discuss in Talk:PHP (Italiano)#)

- 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 | Komodo Edit (free)

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 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 è 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 zendstudioAUR 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 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

Category:

- Programming languages (Italiano)

Hidden category:

- Pages or sections flagged with Template:Out of date