For those aiming to install PHP 8.3, 8.2, 8.1, 8.0, or 7.4 on Fedora, understanding the significance and versatility of PHP is paramount. PHP, standing for Hypertext Preprocessor, has cemented its place as an indispensable open-source programming language tailored for web development. Let’s delve into the myriad advantages PHP brings to the table:
Key Advantages of PHP:
- Dynamic Web Pages: PHP excels in server-side scripting, paving the way for dynamic web content and bolstered security measures.
- Cross-Platform Compatibility: PHP seamlessly integrates with various operating systems, including Windows, Mac, and Linux, underscoring its adaptability.
- Robust Community Support: A thriving community of PHP developers ensures constant resources, tutorials, and troubleshooting assistance.
- Comprehensive Built-in Functions: PHP has many functions to facilitate everyday web tasks, from database connectivity to email dispatch.
- Database Integration: PHP’s compatibility with renowned databases like MySQL and PostgreSQL streamlines database-centric projects.
- Interactivity with Modern Tech: PHP’s synergy with technologies like JavaScript and AJAX fosters the creation of dynamic, user-friendly web applications.
- Library & Framework Access: PHP’s ecosystem boasts libraries and frameworks like Laravel and CodeIgniter, simplifying and accelerating development processes.
- Beginner-Friendly: PHP’s intuitive syntax and structure make it an ideal starting point for budding developers.
- Cost-Effective Development: Being open-source, PHP is a budget-friendly choice for businesses and individual developers.
- Optimized Performance: PHP ensures swift, efficient performance, further enhanced by features like JIT compilation in its newer versions.
For Fedora users, the integration of PHP, especially versions 8.3, 8.2, 8.1, 8.0, and 7.4, is straightforward, thanks to the Remi PHP repository.
Import Remi RPM Repository
Step 1: Update Fedora Linux Before PHP Installation
Update the system before you install PHP and its extensions. Run the following commands in a terminal to achieve this:
sudo dnf upgrade --refresh
Step 2: Import PHP Remi RPM Repository
To install the Remi PHP repository on Fedora systems, follow this simple process. Unlike RHEL and its clones, Fedora doesn’t need EPEL. To import the Remi PHP repository that matches your Fedora version, execute the command below:
We provide the latest versions, and we will update this article when new Fedora releases come out back on this article.
sudo dnf install http://rpms.remirepo.net/fedora/remi-release-39.rpm -y
sudo dnf install http://rpms.remirepo.net/fedora/remi-release-38.rpm -y
sudo dnf install http://rpms.remirepo.net/fedora/remi-release-37.rpm -y
Step 3: Enable PHP Remi Repository
Before diving in and installing different versions of PHP, it’s a good idea to check which versions are available in the REMI repository. By listing the available PHP modules first, you can get a better idea of what’s on offer and make a more informed decision about which version to install. It’s also worth noting that you can change your selection later if needed, so don’t feel you must make a final decision immediately.
sudo dnf module list php
To proceed with the installation, the system might prompt you to import the GPG key for Remi’s repository.
If it does, enter (Y) to continue.
Now that you’ve looked at the available PHP versions, it’s time to run the command to enable the version you want to install:
sudo dnf module enable php:remi-8.3 -y
sudo dnf module enable php:remi-8.2 -y
sudo dnf module enable php:remi-8.1 -y
sudo dnf module enable php:remi-8.0 -y
sudo dnf module enable php:remi-7.4 -y
Step 4: Install PHP 8.3, 8.2, 8.1, 8.0 or 7.4 via DNF Command
You are ready to install PHP with the Remi PHP repository now enabled. The following options guide choosing between Apache and Nginx. However, if you know, you can further customize the installation by installing specific extensions for your CMS or software development needs.
Apache (httpd) PHP:
sudo dnf install php php-cli -y
Nginx PHP:
sudo dnf install php-fpm php-cli -y
To confirm the successful installation of PHP, run the following command after finishing the installation process.
php -v
You can run the command below if you want to obtain the most commonly used extensions for your chosen version of PHP. However, make sure to remove any extensions that you know you won’t need for your specific use case:
sudo dnf install php-cli php-fpm php-curl php-mysqlnd php-gd php-opcache php-zip php-intl php-common php-bcmath php-imagick php-xmlrpc php-json php-readline php-memcached php-redis php-mbstring php-apcu php-xml php-dom php-redis php-memcached php-memcache
Another method to install the commands above is using the PHP-{extension} format.
sudo dnf install php-{cli,fpm,curl,mysqlnd,gd,opcache,zip,intl,common,bcmath,imagick,xmlrpc,json,readline,memcached,redis,mbstring,apcu,xml,dom,redis,memcached,memcache}
You can execute the command below anytime to view the currently loaded modules:
php -m
It’s a good practice to keep an eye on the installed modules and remove any unnecessary ones, as too many installed modules can negatively impact system performance.
To install the development branch of PHP, use the command below:
sudo dnf install php-devel
To install additional development tools like debugging, use the command below:
sudo dnf install php-xdebug php-pcov
Remember that installing this version will add multiple dependencies. We don’t recommend it unless you specifically need it for your PHP development or have a particular requirement.
Additional: Configure Nginx User for PHP-FPM on Fedora
When you install PHP-FPM on Linux distributions like Debian or Ubuntu, you commonly use the “www-data” user. However, you don’t do this for installations in the RHEL family. By default, the PHP-FPM service runs under the “Apache” user, which doesn’t work with Nginx. Therefore, you must adjust the configuration for correct usage.
First, open the configuration file (www.conf) with the following command:
sudo nano /etc/php-fpm.d/www.conf
Open the configuration file and replace the (Apache) user and group with the (Nginx) user and group.
Example to:
Press (CTRL+O) to save, then press (CTRL+X) to exit.
Make the necessary adjustments, then restart your PHP-FPM service.
sudo systemctl restart php-fpm
Example Nginx PHP-FPM Server Block Code
To handle PHP files with Nginx, you must configure the server block as shown in the example below. Use this example for all server{} blocks that manage PHP files, and ensure you include “location ~ .php$.” in the configuration.
Example ONLY:
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
To verify that the changes made to the previous code did not cause any errors, you can use the following command to test the Nginx configuration.
sudo nginx -t
Example output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
To complete the PHP-FPM setup, it’s necessary to restart the Nginx service.
sudo systemctl restart nginx
Conclusion
This guide has outlined the steps for installing PHP on Fedora Linux by utilizing the Remi PHP repository, setting the chosen version as the default, installing common extensions, and configuring the Nginx server block to process PHP files. It emphasized the importance of keeping track of dependencies and removing unnecessary modules. Additionally, it stressed the significance of testing Nginx for errors before restarting the service, particularly in a live production environment.
switching a version on Linux fedora 6.5.12-100.fc37.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Nov 20 22:28:44 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
doesn´t work. php -v reports 8.1.24 whatever i enter
Hello John,
It seems that the article needs an update to reflect that the Fedora 37 Remi link has been retired, similar to Fedora 37 itself, as indicated here: https://docs.fedoraproject.org/en-US/releases/eol/
I recommend upgrading to Fedora 38 and using the Remi PHP F38 repository.
Best,
Joshua James