PHP
PHP is a widely-used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML.
Contents
Installation
Install the php package from the official repositories.
You can find older versions of PHP in the AUR, such as php56AUR.
Note that to run PHP scripts as plain CGI, you need the php-cgi package.
Running
While PHP can be run standalone, it is typically used with http servers such as Apache HTTP Server (this is frequently called LAMP setup), nginx, lighttpd and Hiawatha.
To run PHP standalone issue the php -S localhost:8000 -t public_html/
command. See documentation.
Configuration
The main PHP configuration file is well-documented and located at /etc/php/php.ini
.
- It is recommended to set your timezone (list of timezones) in
/etc/php/php.ini
like so:
date.timezone = Europe/Berlin
- If you want to display errors to debug your PHP code, change
display_errors
toOn
in/etc/php/php.ini
:
display_errors=On
- The open_basedir directive limits the paths that can be accessed by PHP, thus increasing security at the expense of potentially interfering with normal program execution. Starting with PHP 7.0, it is no longer set by default to more closely match upstream so users who wish to use it must configure it manually. Example:
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/
Extensions
A number of commonly used PHP extensions can also be found in the official repositories:
$ pacman -Ss php-
Extensions for current and older versions of PHP are also available in AUR under the prefix php-* and php56-*, e.g. php-imagickAUR, php-redisAUR, php56-mcryptAUR.
gd
For php-gd uncomment the line in /etc/php/php.ini
:
extension=gd.so
imagemagick
For imagemagick install php-imagickAUR or install it manually using # pecl install imagick
. The pecl binary is included in the php-pearAUR package. Then add
extension=imagick.so
to /etc/php/php.ini
.
pthreads
If you wish to have POSIX multi-threading you will need the pthreads extension. To install the pthreads (http://pecl.php.net/package/pthreads) extension using pecl
you are required to use a compiled version of PHP with the the thread safety support flag --enable-maintainer-zts
. Currently the most clean way to do this would be to rebuild the original package with the flag.
Instruction can be found on the PHP pthreads extension page.
PCNTL
PCNTL allows you to create process directly into the server side machine. While this may seen as something you would want, it also gives the power to PHP to mess things up really badly. So it is a PHP extension that cannot be loaded like other more convenient extension. This is because of the great power it gives to PHP. To enable it PCNTL has to be compiled into PHP.
The php package on ArchLinux is currently built with "--enable-pcntl", so that it should be available by default.
MySQL/MariaDB
Install and configure MySQL/MariaDB as described in MariaDB.
Uncomment the following lines in /etc/php/php.ini
:
extension=pdo_mysql.so extension=mysqli.so
You can add minor privileged MySQL users for your web scripts. You might also want to edit /etc/mysql/my.cnf
and uncomment the skip-networking
line so the MySQL server is only accessible by the localhost. You have to restart MySQL for changes to take effect.
Redis
Install and configure Redis, then install either php-redisAUR or phpredis-gitAUR.
Uncomment the line of the package, e.g. /etc/php/conf.d/redis.ini
.
PostgreSQL
Install and configure PostgreSQL, then install the php-pgsql package and uncomment the following lines in /etc/php/php.ini
:
extension=pdo_pgsql.so extension=pgsql.so
Sqlite
Install and configure SQLite, then install the php-sqlite package and uncomment the following lines in /etc/php/php.ini
:
extension=pdo_sqlite.so extension=sqlite3.so
XDebug
XDebug allows you to easily debug php code using modified var_dump() function. Install xdebug and uncomment the lines at /etc/php/conf.d/xdebug.ini
:
zend_extension=xdebug.so xdebug.remote_enable=on xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_handler=dbgp
IMAP
Install php-imap and uncomment the line at /etc/php/php.ini
:
extension=imap.so
Caching
There are two kinds of caching in PHP: opcode/bytecode caching and userland/user data caching. Both allow for substantial gains in applications speed, and therefore should be enabled wherever possible.
- Zend OPCache provides only opcode caching.
- APCu provides only userland caching.
For optimal caching, you should enable both. To do this, follow both #OPCache and #APCu.
OPCache
OPCache comes bundled with the standard PHP distribution, therefore to enable it you simply have to add or uncomment the following line in your PHP configuration file:
/etc/php/php.ini
zend_extension=opcache.so
A list of its options and suggested settings can be found in its official entry on the PHP website.
APCu
APCu can be installed with the php-apcu package. You can then enable it by uncommenting the following line in /etc/php/conf.d/apcu.ini
, or adding it to your PHP configuration file:
extension=apcu.so
Its author recommends a few suggested settings, among which:
-
apc.enabled=1
andapc.shm_size=32M
are not really required as they represent the default values; -
apc.ttl=7200
on the other hand seems rather beneficial; - finally,
apc.enable_cli=1
, which although not recommended by the manual may be required by some software such as ownCloud.
Development tools
Aptana Studio
Aptana Studio is an IDE for programming in PHP and web development. It can be installed with the aptana-studioAUR package. Does not have a PHP debugger as of version 3.2.2.
Eclipse PDT
Eclipse PDT is the PHP variant of Eclipse. It can be installed with the eclipse-php package. See Eclipse for more information.
You would need other plugins for JavaScript support and DB query.
Komodo
Komodo is an IDE with good integration for PHP+HTML+JavaScript. Komodo Edit is a free editor-only variant and installable with the komodo-editAUR package.
Netbeans
NetBeans IDE is a complete IDE for many languages including PHP. Includes features like debugging, refactoring, code templating, autocomplete, XML features, and web design and development functionalities (very good CSS autocomplete functionality and PHP/JavaScript code notifications/tips). Install it with the netbeans package.
PhpStorm
JetBrains PhpStorm is a commercial, cross-platform IDE for PHP built on JetBrains' IntelliJ IDEA platform. It can be installed with the phpstormAUR package, or with phpstorm-eapAUR for the 30-day trial version. You can get a free license for education from Jetbrains.[1]
Zend Studio
Zend Studio is the official PHP IDE, based on eclipse. The IDE has autocomplete, advanced code formatting, WYSIWYG html editor, refactoring, and all the eclipse features such as db access and version control integration and whatever you can get from other eclipse plugins. You can install it with the zendstudioAUR package.
Commandline tools
Composer
Composer is a dependency manager for PHP. It can be installed with the composer package.
Box
Box is an application for building and managing Phars. It can be installed with the php-boxAUR package.
PDepend
PHP Depend (pdepend) is software metrics tool for php. It can be installed with the pdependAUR package.
PHP Coding Standards Fixer
PHP Coding Standards Fixer a is PSR-1 and PSR-2 Coding Standards fixer for your code. It can be installed with the php-cs-fixerAUR package.
PHP-CodeSniffer
PHP CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards. It can be installed with the php-codesnifferAUR package.
phpcov
phpcov is a command-line frontend for the PHP_CodeCoverage library. It can be installed with the phpcovAUR package.
phpDox
phpDox is the documentation generator for PHP projects. This includes, but is not limited to, API documentation. It can be installed with the phpdoxAUR package.
PHPLoc
PHPLoc is a tool for quickly measuring the size of a PHP project. It can be installed with the phplocAUR package.
PhpMetrics
PhpMetrics provides various metrics about PHP projects. It can be installed with the phpmetricsAUR package.
phptok
phptok is a tool for quickly dumping the tokens of a PHP sourcecode file. It can be installed with the phptokAUR package.
PHPUnit
PHPUnit is a programmer-oriented testing framework for PHP. It can be installed with the phpunitAUR package.
PHPUnit Skeleton Generator
PHPUnit Skeleton Generator is a tool that can generate skeleton test classes from production code classes and vice versa. It can be installed with the phpunit-skeleton-generatorAUR package.
Producer
Producer is a command-line quality-assurance tool to validate, and then release, your PHP library package. It can be installed with the producerAUR package.
Troubleshooting
PHP Fatal error: Class 'ZipArchive' not found
Ensure the zip extension is enabled.
$ grep zip /etc/php/php.ini
extension=zip.so
/etc/php/php.ini not parsed
If your php.ini
is not parsed, the ini file is named after the sapi it is using. For instance, if you are using uwsgi, the file would be called /etc/php/php-uwsgi.ini
. If you are using cli, it is /etc/php/php-cli.ini
.
PHP Warning: PHP Startup: <module>: Unable to initialize module
When running php
, this error indicates that the aforementioned module is out of date. This will rarely happen in Arch Linux, since maintainers make sure core PHP and all modules be only available in compatible versions.
This might happen in conjunction with a module compiled from the AUR. You usually could confirm this by looking at the dates of the files /usr/lib/php/modules/
.
To fix, find a compatible update for your module, probably by looking up the AUR using its common name.
If it applies, flag the outdated AUR package as outdated.