When a PHP file prints its source code instead of executing, it means the PHP interpreter is not being invoked. This occurs because the terminal treats the command as a text read operation rather than a script execution. To resolve this, you must explicitly call the php binary followed by the filename, such as php index.php, ensuring the runtime environment is correctly configured.
Understanding the Execution Difference
The core issue lies in the distinction between viewing a file and running a program. When you type only the filename, for exampleindex.php, the shell attempts to execute it directly. If the file does not have executable permissions or lacks a proper shebang line pointing to an interpreter, the system may default to displaying the contents or throwing a permission denied error. However, the specific symptom of printing raw PHP code indicates that the system is treating the file as a static resource.
In a typical web server context like Apache or Nginx, these files are processed by the PHP module on the backend. But when working from the command line interface (CLI), no web server is involved. You are acting as the client and the server simultaneously. Therefore, you must manually trigger the PHP engine. The CLI version of PHP is a separate executable from the web SAPI (Server API) version, though they often share the same configuration files depending on your installation method.
If you simply run ./script.php without the php prefix, and the file lacks execute permissions, you might see a "Permission denied" message. If you use a command like cat script.php or if your shell aliases php incorrectly, you will see the output. The most common mistake for beginners is assuming that any file with a .php extension is automatically executable like a compiled binary. It is not. It is a text file containing instructions for the PHP parser.
For more insights on how Ubuntu handles default user environments which can affect path resolution, you might find Ubuntu 20 LTS: Understanding the 'bash-l' Default Login User helpful.
The Role of the Shebang Line
Some developers attempt to make PHP scripts executable by adding a shebang line at the top of the file:#!/usr/bin/php
<?php
echo "Hello World";
?>
While this allows you to run the script with ./script.php, it requires two things. First, the file must have executable permissions set via chmod +x script.php. Second, the path to the PHP binary must be correct. On many systems, /usr/bin/php is the standard location, but it can vary. If the shebang points to a non-existent path, the script will fail to execute entirely. Using the explicit php script.php command bypasses the need for shebangs and is generally safer for debugging.
Verifying the PHP Installation
Before troubleshooting execution errors, confirm that PHP is actually installed and accessible in your system's PATH. Open your terminal and type:php -v
If this command returns a version number, such as PHP 8.1.2 (cli), then the interpreter is installed. If it returns "command not found," you do not have PHP installed. In Ubuntu UnityOS, you can install it using:
sudo apt update
sudo apt install php-cli
The php-cli package provides the Command Line Interface tools necessary for running scripts outside of a web server. Without this package, even if Apache is installed, you cannot run PHP from the terminal. After installation, verify the path again. You can also check where the binary is located by running which php. This should return something like /usr/bin/php.
Common Pitfalls and Solutions
There are several reasons why your PHP file might behave unexpectedly. Here is a checklist to diagnose the problem.- Missing Interpreter Call: Ensure you are typing
php filename.phpand not justfilename.php. - Incorrect Permissions: If you try to run the file directly, ensure it has execute permissions. Use
chmod +x filename.phpto fix this. - Wrong Working Directory: Verify you are in the correct directory using
pwdbefore running the script. A missing file will result in an error, not printed code, but it is a common confusion point. - Alias Conflicts: Check if you have aliased
phpto another command in your.bashrcor.zshrcfile. Runalias | grep phpto see active aliases.
Testing Your Configuration
Create a simple test file namedtest.php in your home directory:
<?php
echo "PHP is working correctly!";
?>
Save the file and run it:
php test.php
You should see the text "PHP is working correctly!" printed to the terminal. If you see the raw source code instead, double-check that you did not accidentally type cat test.php or that your terminal emulator is not intercepting the command. If the command is not found, reinstall the php-cli package.
For those who frequently encounter path-related errors in their terminal environment, understanding how to manage your PATH variable is crucial. See Laravel Command Not Found: Accidentally Changed Terminal Path for detailed guidance on fixing path configurations.
Frequently Asked Questions
Why does my PHP file show HTML tags when I run it?
If you see HTML tags printed literally, it usually means you are viewing the file content rather than executing it. Ensure you are using the php command prefix. Additionally, check if you have accidentally opened the file in a text editor instead of the terminal.
Can I run PHP files without the php command?
Yes, but you must add a shebang line (#!/usr/bin/php) at the top of your script and make the file executable using chmod +x. This tells the operating system which interpreter to use when you run the file directly.
What if php -v says command not found?
This indicates that PHP is not installed or not added to your system PATH. Install the CLI package using sudo apt install php-cli on Ubuntu-based systems. After installation, restart your terminal to ensure the new binaries are recognized.
Is there a difference between php-cli and php-fpm?
Yes. php-cli is designed for command-line usage and is what you need for running scripts in the terminal. php-fpm is a FastCGI Process Manager used by web servers like Nginx and Apache to handle dynamic content. They are different SAPIs and serve different purposes.
How do I debug syntax errors in CLI PHP?
Run your script with the -l flag, like php -l filename.php. This performs a lint check without executing the code, highlighting syntax errors immediately. This is faster than running the full script and waiting for it to crash.