「PHP」カテゴリーアーカイブ

PHPでセッション管理を行う場合のメモ


PHPでWEBサイトのログイン機能を実装するにあたり、重要ポイントをメモしておきます。どうも他のサイトでは、肝心な部分なのに記載していないところが多いです。

session_start();

セッション管理を行う場合には、必ずこのコードの記述が必要です。

ただし、このコードはHTML出力の前に行わなければなりません。

この前に行わないと

session_start(): Session cannot be started after headers have already been sent in

このエラーメッセージがerror_logファイルの中に吐き出されます。error_logファイルは、phpの実行パスの中に自動で作成されます。エラーが出る度にファイルサイズが大きくなっていくので一定のタイミングで削除しましょう。

session関連の値

セッション名:session_name()

セッションID:session_id()

セッションデータの保存パス:session_save_path()

 

セッションを破棄する

// セッション開始
session_start();

// セッションの値を初期化
$_SESSION = array();

// セッションを破棄
session_destroy();

セッションを破棄する為には、このコードをセットで使用します。

 

おまけ

リファラを取得

$referer = $_SERVER[‘HTTP_REFERER’];
echo “リファラ[“.$referer.”]”;

 

 


phpファイルへアクセス時に拡張子を非表示にする方法


phpファイルにブラウザでアクセスした時に、phpの拡張子を見せない様にする手順をメモっておきます。

さくらインターネットを利用しています。

/home/{domain_name}/www/dir/

この中に

.htaccess

を作成し、以下のコードを記述します。

すると、拡張子の「php」を付けず

http://{domain_name}/test.php

http://{domain_name}/test

でもアクセス出来る様になります。

 

.htaccessの中身

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

Options -MultiViews

※なお、

Options -MultiViews

この行が無いと正常に動作しません。

必ず入れましょう。

なお、デフォルト  index.php を表示させたい場合、次のコードも入れておきます。

# Default Page Change
DirectoryIndex index.php

 

 


Windows10にApache2.4(アパッチ)をインストールした時の手順など


Windows10にApache 2.4(アパッチ)をインストールした時のメモ書きです。

 

PHP設定がまだの人は、こちらのページを参考に設定を済ませておきましょう。

WINDOWS 10 にPHP 5.6 (5.6.35)の環境を構築した時のメモ書き

 

2014年位からApacheのhttpdのインストーラーが提供されなくなりました。

The Apache Software Foundation自体が、

ApacheHaus

Apache Loung

XAMPP

などのサードパーティー製を使って頂戴とアナウンスしています。

では、順を追って手順をまとめていきます。

Apache 2.4(アパッチ2.4)を実際にWindows 10にインストールする

https://www.apachehaus.com/cgi-bin/download.plx

にアクセスします。

今回は、

Apache 2.4.33 x64

をダウンロードします。

ドイツ国旗のマークをクリックしモジュールをダウンロードします。

しばらくすると

httpd-2.4.33-o102o-x64-vc14-r2.zip

のダウンロードが完了します。

因みに、昔のApacheは、*.msi形式でダウンロードできました。

それをキックするとインストーラが立ち上がってインストールする形式でしたが、2018年現在では、zipファイルを解凍してそれをインストールしたいパスに直接移動して使う形式になりました。

解凍するとこんな感じです。readme_first.htmlと言うのが入ってますが気にしなくて大丈夫です。

こんな感じで移動させます。

C:\Users\{user_name}\Downloads\httpd-2.4.33-o102o-x64-vc14-r2\Apache24\conf

の中に

httpd.conf

というファイルがあります。がこれは大事なファイルなのでどこかにコピーしてバックアップしておきましょう。

httpd.conf_

バックアップする時には、この様に最後に「_」を付けておくと分かり易くて良いです。

Apacehの設定ファイルを書き換える

httpd.confの内容を書き換えていきます。

行の頭に#をつけてコメントアウトしている方が、変更前のデフォルトの値です。#Define SRVROOT “/Apache24”
Define SRVROOT “C:/Program Files/Apache24”

こんな感じで書き換えます。

¥(円マーク)ではなく、/(半角スラッシュ)でパスは指定します。くれぐれも注意しましょう!!

#ServerAdmin admin@example.com
ServerAdmin virusvirus99@yahoo.co.jp

適当なメールアドレスを指定します。

LoadModuleの部分に以下コードを追加します。

各自のPHPのインストールディレクトリにパスは指定し直してください。

AddTypeを2行追加します。

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

DirectoryIndexにindex.phpを追加します。

設定ファイルの末尾に以下1行を追加します。

PHPのパスは各自の環境に合わせてください。

PHPIniDir “C:/php/5.6”

あとは、代表的なログ機構であるアクセスログとエラーログも設定しておきましょう。

#CustomLog “logs/access.log” common
CustomLog “C:/Program Files/Apache24/logs/access.log” common

#ErrorLog “logs/error.log”
ErrorLog “C:/Program Files/Apache24/logs/error.log”

大体こんな感じです。

運用して行く中で追加でhttpd.confファイルの設定が必要になる場合があります。

ぐぐって必要に応じて書き換えていきましょう。

この記事ではすごく基本的な部分だけ説明しています。

ここまでで基本的なApacheの記述は完了です。

続いて設定内容にミスが無いかテストしていきます。

Windows10にインストールしたApacheの設定に不備が無いかテストする

Windows + R → cmd 

でDOS画面を起動します。

cd C:\Program Files\Apache24\bin

→パス移動

httpd -t

→テスト起動

※サイト上では、「\(バックスラッシュ)」になっていますが、DOSでコマンド発行をする場合、パス区切りはここでは、¥(半角円マーク)で区切ります。

Syntax OKと出ればしっかり設定が出来ています。

httpdと入力し正常に起動するか確認します。

C:\Program Files\Apache24\bin>httpd
(OS 5)アクセスが拒否されました。 : AH00091: httpd: could not open error log file C:/Program Files/Apache24/logs/error.log.
AH00015: Unable to open logs

この様なエラーが出る場合があります。

これは、logファイルへApacheが書き込みをしようとした時にWindowsの邪魔なセキュリティ機構が働いてしまった事が原因です。

エラーが出る場合には、

そんな場合には

logディレクトリの上で右クリックしプロパティ画面を開きます。

セキュリティタブを選択して

ALL APLICATION PACKAGES

制限されたすべてのアプリケーション パッケージ

CREATOR OWNER

SYSTEM

Administrators(XXX)

Users(XXX)

TrustedInstaller

 

それぞれを選択し編集ボタンを押してから、フルコントロール許可を入れます。

Windows 10になってからLinuxの様に色々な権限周りの制約が多くなりました。

自宅サーバとして運用する訳では無いのに、あまりセキュリティガチガチにされるとうざいです。

権限設定が終わったら今度は、

httpdコマンドを実行してDOS画面が待機状態になれば大丈夫です。

そして

http://localhost/

ブラウザに localhost と打ち込んでアクセスしてみましょう。

Apache Haus という画面が表示されればOKです。

英語では、Houseですがドイツ語ではHaus(ハオス)になります。

アパッチを止める場合、

DOS画面上で

Control + C 

を押せば止まります。

 

PHPがブラウザ上でも認識されるかテストする

C:\Program Files\Apache24\htdocs

の中にtest.phpファイルを作成します。

<?php

phpinfo();

?>

と入力しブラウザから

http://localhost/test.php

にアクセスしてみます。

こんな感じで表示されれば全てOKです。

ServiceメニューにApacheを登録する

SeriviceにApacheを登録しておくと便利です。

その手順をざっくり説明します。

Windows + X A

で、監理者権限でWindows PowerShellが起動します。

Windows PowerShellはDOSの後継バージョンみたいな物です。

慣れるとDOSより使い勝手が良いです。

起動したら

cd “C:\Program Files\Apache24\bin”

で移動して

.\httpd -k install

と入力し実行します。

Installing the ‘Apache2.4’ service
The ‘Apache2.4’ service is successfully installed.
Testing httpd.conf….
Errors reported here must be corrected before the service can be started.

と出ればOKです。

サービスの中に

因みにDOSからコマンド発行を行う場合は、次のコマンドを使ってください。

httpd -k install

DOSは古いので、Windows PowerShellを使った方が良いでしょう。

サービスを起動して、正常にApacheがサービスに登録されている事を確認します。

ApacheMonitorを起動すると

こんな感じで

Start

Stop

Restart

と3つのボタンがありますが、これをクリックするだけで開始・停止・再起動を行う事が出来てかなり便利です。

 

また、不定期にまとめていきます。

by  ノウハウツリーの管理人

 


Windows 10 にPHP 5.6 (5.6.35)の環境を構築した時のメモ書き


古いPHP 5.6 をWindows10 64bit環境に構築した時の備忘録です。

PHPモジュールのダウンロードを行う

以下からPHPのモジュールをダウンロードします。

https://windows.php.net/download/

VC11 x64 Thread Safe (2018-Mar-30 00:05:38)

という項目があります。

そこのZipをクリックしてダウンロードします。

No Thread Safe ではなく Thread Safe です。

しばらくすると

php-5.6.35-Win32-VC11-x64.zip

がダウンロードされます。

解凍します。

PHPの実行にあたりWindows環境では、日本語などのマルチバイト文字が含まれていると正常に動作しない場合があります。

そこで、Cドライブ直下に以下の通りディレクトリを作成します。

c:\php\5.6

その中に解凍して出来たPHP関連のファイルを全て移動させま

す。

こんな感じです。

php.iniの基本設定

Windowsでphpを動かす場合、php.iniに必要に応じて色々と設定を行っていきます。

php.iniを書き換えたらApacheを再起動する必要があります。

再起動しないとphp.iniの書き換えは反映されないので注意しましょう。

PHPを展開したパス上に

php.ini-development

→開発環境

php.ini-production

→本番環境

の2つのphp.iniの雛形があります。

php.ini-development をコピーして php.ini にリネーム保存します。

php.iniに設定情報を記述していきます。

date.timezone

date.timezoneの部分を

date.timezone = “Asia/Tokyo”

と書き換えます。date関数などを使う場合には設定をする必要があります。

extension_dir

; extension_dir = “ext”

となっているのを
extension_dir = “C:\php\5.6\ext”

に書き換えます。

phpの拡張ライブラリを使用する場合には、extension_dirでローカルのパスを指定し直します。

extension=php_gd2.dll

画像生成をPHPで行う場合、php_gd2.dllのコメントを外して画像ライブラリを有効にする必要があります。php_gd2.dllが無効の状態で画像生成系のコードを書くと

Fatal error: Call to undefined function imagecreate() in

といったエラーが出てしまいます。

 

環境変数でPATH(パス)を通す

タスクバー上にある〇をクリックして、

コントロールパネル

と入力します。

すると、コントロールパネルのリンクが表れるのでクリックします。

コントロールパネルが起動したら

システムとセキュリティ > システム 

と辿ります。

システムの詳細設定をクリックします。

システムのプロパティダイアログが起動したらその中にある

環境変数(N)…

をクリックします。

環境変数のダイアログが起動したら、その下部分に

システム環境変数(S)

という項目があります。

右側のスライダーを下にずらすと

Pathが見つかるので、選択し

編集(I)…をクリックします。

環境変数名の編集ダイアログが起動します。

新規(N)ボタンをクリックします。

ダイアログの下部分に入力枠が現れるので、さっき移動させたPHPのパス

c:\php\5.6

を指定し、OKボタンをクリックします。

これでPHPのパス通し(環境変数の設定)は完了です。

PHPのパスが正常に通ったか確認する

Windows + R

をクリックして、

cmd

と入力しOKボタンを押します。

これは、WindowsにおいてDOS画面を起動するショートカットコマンドです。

DOS画面が起動したら

php -v

と入力し実行します。PHPのバージョンを確認するコマンドです。

PHP 5.6.35(cli) (built : Mar 29 2018 14:27:15 )

Zend Engine v2.6.0, Copyright(c) 1998-2016 Zend Technologies 

こんな感じで表示されればOKです。

[test.php]

<?php

$s = “はげ”;

var_dump($s);

?>

こんな感じで、PHPファイルを作成してDOSから

php test.php

とコマンド発行します。

パスを通す事によってDOS画面からphpと入力した時に

c:\php\5.6 

の中にある php.exeを使ってPHPスクリプトが実行される様になります。

初心者の中にはパスを通すという意味がちょっと分かり辛いという人も多いかもしれませんが、要はこんな事です。

あとは、Apacheなどをインストールして実際にブラウザからPHPのテスト実行をすると良いでしょう。

ApacheとPHPを連動させる

ここまででPHP設定が出来たので実際にApacheと連動させ、ブラウザ上でも正常動作する事を確認したい場合、次のApache環境構築のページを参照ください。

WINDOWS10にAPACHE2.4(アパッチ)をインストールした時の手順など

 

 


PHPエラー【File “XXX” is writeable by group】suPHP 0.7.1 Internal Server Errorが出る場合の対処方法


WEBサーバでPHPのテストスクリプトを動かそうとしたところ

Internal Server Error
File “XXX” is writeable by group

suPHP 0.7.1

というエラーが出ました。

少しはまってしまったので対処方法をメモしておきます。

ぐぐってみたのですが、意外と日本語のページでこのエラー対処方法を解説しているサイトがありませんでした。

そもそもエラーの原因

PHPではディレクトリやファイルに過剰にアクセス権限を与えてしまうとこのエラーが出る様です。

権限を必要最低限にする事でエラーは出なくなりました。

実際にエラーを消す為に行った内容

TeraTermでサーバにroot権限で接続します。

そしてPHPファイル(ここでは、test.php)の上位階層(test_directory)に対して

chmod 711 test_directory

を発行し権限711を与えます。

次にcd コマンドで test_directoryに移動し

chmod  700 test.php

を発行します。

親ディレクトリ権限 → 711

PHPファイルの権限 → 700

にしました。

これでエラーは出なくなりました。

はまった人は参考にしてみてください。

実は、このエラー解消方法は海外サイトを見て見つけました。

やっぱり調べ事をする際には、母数がたった1億しか無い日本語ではなく、数十億人が使っている英語圏のサイトで調べると早いですね。

注意事項

root権限でphpファイルを作成すると

UID of script “xxx/index.php” is smaller than min_uid

というエラーが出る場合があります。

その場合の対象方法は、こちらのページにまとめています。

合わせて確認してください。

【PHPエラー】500 INTERNAL SERVER ERROR : UID OF SCRIPT “/HOME/XXX/NEWFILE.PHP” IS SMALLER THAN MIN_UID

 


PHPでよく使う関数の逆引きテクニック一覧


PHPで使用頻度の高い関数を不定期にまとめていきます。

基本的な用法などだけ記載していきます。

管理人用のPHP関数などのメモ書きです。

PHPの逆引き辞典としてこのページはお使いください。

 

PHPでファイルを削除する

unlink関数を使います。

例)

unlink(“hoge.txt”);

なお、ディレクトリパスを指定してunlink関数を使ってしまうと

Operation not permitted

というエラーメッセージが表示されます。間違え易いので注意しましょう。

PHPでディレクトリを削除する

rmdir関数を使います。

例)

rmdir(“/hoge/hoge_user/del_directory”);

また、PHPではディレクトリの中にファイルが含まれている場合、丸ごと削除する機能は無い様です。

rm → remove

dir → directory

の英単語の頭文字を使った関数名になっています。

PHPで指定したディレクトリの中にあるディレクトリ(ファイル)一覧を取得する

$directory_list = scandir({調べたいディレクトリパス});
var_dump($directory_list);

array(4) {
[0]=>
string(1) “.”
[1]=>
string(2) “..”
[2]=>
string(32) “test_directory_1”
[3]=>
string(32) “test_directory_2”
}

配列にはこんな具合でディレクトリ名が格納されます。

なお、このscandir関数は、ディレクトリの中に入っているファイル名も取得出来ます。

 


securimageの設定の変更方法


今回は、画像認証機能を簡単に実装できる、securimageを使用する場合の設定の変更方法を書いていきます。

まず、securimageをダウンロードすると、「securimage」というフォルダが圧縮された状態でダウンロードフォルダに入りますので、解凍し、「securimage」フォルダまるごとEcliipse内に貼りつけます。

securimageのフォルダを開くと、「securimage_show.php」というphpファイルがありますので、それを開きます。

デフォルトの状態ですと、中身はほとんどコメントアウトされているかと思います。
今回注目するのは「$img = new Securimage();」というコードと「$img->show();」の間にあるコメントアウトされている部分です。

その部分よく見ると、「$img->…」がたくさんあると思います。
この中で最も変更したいと思う方が多い部分の解説をしていきたいと思います。

$img->image_height    = **;
→画像認証の画像の高さを変更

$img->image_width    = **;
→画像認証の画像の幅を変更

$img->perturbation   = .**;
→画像の文字の読みにくさを変更
これは小数点以下から指定できる?ようです。(0.1、0.5など)
ちなみに0.9だと読みにくく、0.1だととても読みやすい画像になりました。

$img->code_length = **;
→画像認証の文字数です。
**の部分に入力した数字分、文字が表示されます。
(** = 8 にすると8文字表示されます。)

変更したい部分のコメントアウトを解除して数値を変更してください。

他の部分も見ればどの部分を変更できるかだいたいわかるかと思いますが、私は触ることはありませんでした!
画像認証の画像にこだわりたい方はぜひいろいろいじってみてください!

今回は以上です。

——▼ 追記 ————————————————

【 CakePHP を使用している場合 】

apps ではなく www  直下に securimage のファイルをセット
認証画面を表示したい View 部分に下記コードを記入すれば画像が表示されます。

<img src=”<?php echo $this->webroot; ?>securimage/securimage_show.php”>

画像の詳細設定は上記と同じく securimage_show.php に記述してください。

Securimageのカスタマイズ(上記の続きになります↓)

▼文字数をランダム
$img->code_length = rand(3,5);

▼文字のフォント
$img->ttf_file = ‘./Quiff.ttf’;

▼表示する文字列
$securimage->charset =’ABCDEFGHKLMNPRSTUVWYZabcdefghklmnprstuvwyz23456789′

▼文字色の変更
$img->text_color = new Securimage_Color(“#000000”);

▼背景色の変更
$img->image_bg_color = new Securimage_Color(“#FFFFFF”);

▼背景画像の変更
$img->show(‘backgrounds/bg1.jpg’);

▼線の本数
$img->num_lines = 8;

▼線の色
$img->line_color = new Securimage_Color(“#000000”);


phpでDateTime関数を使用しようとしてエラーが出る場合の対処方法【Fatal error: Uncaught exception ‘Exception’ with message ‘DateTime::__construct():】


Fatal error: Uncaught exception ‘Exception’ with message ‘DateTime::__construct(): 

It is not safe to rely on the system’s timezone settings.
You are *required* to use the date.timezone setting or the date_default_timezone_set()
function. In case you used any of those methods and you are still getting this warning,
you most likely misspelled the timezone identifier.
We selected the timezone ‘UTC’ for now, but please set date.timezone to select your timezone.
‘ in /home/XXX/www/XXX.php:XXX Stack trace:
#0 /home/XXX/XXX.php(XXX):
DateTime->__construct(’20XX/XX/XX’) #1 {main} thrown in /home/XXX/XXX.php on line XXX

phpで日付関数を使おうとしてこのエラーが出てしまう場合には
php.iniに以下のタイムゾーンを指定すれば直ります。

;タイムゾーンを指定する。

date.timezone = Asia/Tokyo

 


【PHPエラー】500 Internal Server Error : UID of script “/home/XXX/newfile.php” is smaller than min_uid


PHPを実行した時に以下の様なエラーが出る場合が
あります。

500 Internal Server Error : UID of script “/home/XXX/newfile.php” is smaller than min_uid

Internal Server Error
UID of script “/home/XXX/newfile.php” is smaller than min_uid
suPHP 0.7.1

 

このエラーの原因は、対象PHPファイルの所有者がrootになっている事が原因でした。この所有者・権限を変更する事によりエラーが出なくなります。

WinSCPを起動 > 対象ディレクトリの上で右クリック > プロパティ(P) >

グループ

所有者

それぞれがrootになっている場合には、これをユーザ名に変更する。

ここでは、 rootからhogehogeに変更しました。

php-error

 

 

次に、

同じパーミッション/グループ/所有者を再帰的に設定(R)

にチェックを入れて、OKボタンを押せば解決しましす。

******************************************************

2018/04/29 追記

phpの画像認証ライブラリ securimageを実行してみたところ

securimage_show.php

ファイル自体の所有者・グループがrootになっている状態だとこのエラーが発生しました。

chown {hoge_user}:{hoge_user}  securimage_show.php

ファイルの所有者・グループを{hoge_user}にchownコマンドで変更したところ正常に画像認証の画像が表示される様になりました。

 

 


さくらインターネット等のレンタルサーバ上でPHPのインストールされている場所を調べるには?


レンタルサーバを契約した時にcronからphpを実行させる為に、phpのインストールされている場所を調べたい場合があります。

その場合には

whereis php

を実行すればphpのインストールされた場所が表示されます。

実行すると

php: /usr/local/bin/php

という風にインストール場所が表示されます。

whereis