Menu

PHPファイルの実行方法:コマンドラインとphp -Sサーバー

PHPファイルはターミナルでphp index.phpと打てば実行でき、PHPの組み込みサーバー(php -S localhost:8000)を使えばフォルダーをブラウザで表示できます。どちらにもApacheやXAMPPは要りません。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

PHPファイルを実行するには、そのフォルダーでターミナルを開いてphp index.phpと入力します。PHPがファイルを実行し、出力をターミナルに表示します。PHPのページをブラウザで見るには、php -S localhost:8000で組み込みサーバーを起動してhttp://localhost:8000を開きます。

php index.php

最初のindex.phpは1行でもかまいません。Runを押してください。これがphp index.phpの出力そのものです。

PHPのコードは<?phpタグのあとに書きます。タグより前にあるものはただのテキストとして出力され、これがPHPでコードとHTMLを混ぜて書ける仕組みです。

コマンドラインでPHPファイルを実行する

PHP CLI(コマンドラインインターフェース)は、スクリプトを1回実行して終了します。PHPのインストールが必要です。php -vがエラーになる場合は、先にPHPのインストールを見てください。

cd ~/projects/hello
php index.php          # run the file
php -l index.php       # only check the syntax ("lint")
php index.php > out.txt   # save the output to a file

php -lはファイルをアップロードする前に便利です。構文エラーがあれば行番号付きで報告し、なければNo syntax errors detected in index.phpと表示します。

$argvで引数を渡す

ファイル名のあとに書いた語は$argvに入ります。$argv[0]は常にスクリプト自身の名前で、$argcはその名前も含めた数です。ここでは追加の引数なしで実行されるので、名前だけが入っています。

自分のパソコンでphp index.php Ada 3と実行すると、あいさつが3回表示されます。??のフォールバックのおかげで、引数が足りなくてもスクリプトは動きます。--name=Adaのような名前付きオプションにはgetoptを使います。

<?php
// php index.php --name=Ada --verbose
$opts = getopt('', ['name:', 'verbose']);
echo "Hello, " . ($opts['name'] ?? 'world') . "\n";
if (isset($opts['verbose'])) {
    echo "Verbose mode\n";
}

php -SでPHPをブラウザで動かす

PHPには開発用のWebサーバーが組み込まれています。ファイルのあるフォルダーで起動します。

php -S localhost:8000
[Sat Oct  3 07:21:34 2026] PHP 8.3.19 Development Server (http://localhost:8000) started

これでhttp://localhost:8000/はindex.phpを、http://localhost:8000/about.phpはabout.phpを実行します。ページを読み込むたびにファイルがもう一度実行され、クエリ文字列は$_GETに入ります。下のブロックも同じ動きをします。実行してからリンクをクリックすると、$_GET['page']がセットされた状態でスクリプトがもう一度動きます。

便利なオプション:

php -S localhost:8000 -t public        # serve the public/ folder as the web root
php -S 0.0.0.0:8000                    # reachable from other devices on your network
php -S localhost:8000 router.php       # send every request through router.php

組み込みサーバーは一度に1つのリクエストしか処理せず、開発専用です。本番環境では、PHPはNginxやApacheの裏で、たいていPHP-FPMを通して動きます。

スクリプトの起動方法を確認する

PHP_SAPIは、スクリプトを動かしている「サーバーAPI」を教えてくれます。ターミナルではcli、php -Sではcli-server、本物のWebサーバーの裏ではfpm-fcgiやapache2handlerです。ターミナルからだけ実行すべきスクリプトは、まずこれを確認します。

php -rで1行だけ実行する

ちょっとした確認ならファイルは要りません。php -rは、渡したコードを<?phpタグなしで実行します。

php -r 'echo date("Y-m-d"), PHP_EOL;'
php -r 'var_dump(0.1 + 0.2 == 0.3);'

Windowsのcmdでは、コードをダブルクォートで囲み、中ではシングルクォートを使います。複数行なら、php -aで対話シェルが開き、Enterを押すたびに各文が実行されます。

macOSとLinuxでスクリプトを実行可能にする

<?phpの前にshebang行を書き、ファイルに実行権限を付けます。shebang行は出力されません。

#!/usr/bin/env php
<?php
echo "Backup started\n";
chmod +x backup.php
./backup.php

cronからPHPスクリプトを動かすのはこの方法です:0 3 * * * /usr/bin/php /home/me/backup.php。

スクリプトの終了コード

コマンドラインのスクリプトは、成功か失敗かを終了コードで伝え、シェルスクリプトやcronがそれを確認できます。exit(0)は成功、それ以外の数値は失敗を意味します。

<?php
$file = $argv[1] ?? '';
if (!is_file($file)) {
    fwrite(STDERR, "File not found: $file\n");
    exit(1);
}
echo "Processing $file\n";
exit(0);

よくあるミス:違うファイルやフォルダーで実行している

Could not open input file: index.phpは、ターミナルの今いる場所からPHPがファイルを見つけられないという意味です。pwd(Windowsではcd)で現在のフォルダーを確認し、プロジェクトにcdするか、php ~/projects/hello/index.phpのようにフルパスを指定してください。php -Sで、存在するはずのページが404になるなら、たいていサーバーを別のフォルダーで起動しています。Ctrl+Cで止めて正しい場所で起動し直すか、-tでフォルダーを指定してください。ファイルは動くのに真っ白なページが表示されるときは、エラー表示をオンにして原因を確認しましょう。

よくある質問

PHPファイルをブラウザで実行するには?

ファイルのあるフォルダーでphp -S localhost:8000を実行して組み込みサーバーを起動し、http://localhost:8000/yourfile.phpを開きます。ディスク上のファイルを直接開いても、PHPのコードを実行するものがないので動きません。

PHPスクリプトに引数を渡すには?

ファイル名のあとに書きます:php report.php 2026 sales。スクリプトの中では$argvが配列['report.php', '2026', 'sales']になり、$argcは3です。最初の要素は常にスクリプト名です。

ファイルを作らずにPHPを1行だけ実行するには?

php -rを使い、<?phpタグは省きます:php -r 'echo strtoupper("hi"), PHP_EOL;'。複数行なら、php -aで対話シェルが開きます。

PHPがコマンドラインとWebサーバーのどちらで動いているかはどうわかりますか?

PHP_SAPI(またはphp_sapi_name())を確認します。ターミナルでは"cli"、php -Sでは"cli-server"、Webサーバーの裏では"fpm-fcgi"や"apache2handler"のような値になります。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める