[PHP]雑記帳




トップページへ

 

Q. 変数名で大文字、小文字の区別は?

A. します。$Value と $value とでは区別され、別物になってしまいます(詳細

 

Q. HTMLなどShift-JISのテキストデータをUTF-8に変換する

A. サンプル

$data = mb_convert_encoding($data, 'UTF-8', 'SJIS');

 

 

Q.表示されていない改行、見えない改行を消す

A.あくまでも一例

\rを”に置換し、その後、同様に\nを置換する。”に置換→消去と同じ。

$w_caption = str_replace(“\r”,”, $w_caption);
$w_caption = str_replace(“\n”,”, $w_caption);

 

 

Q.自分自身を取得したい

A. 参考元 マジック定数

フルパスのファイル名

__FILE__

ファイル名のみ

basename(__FILE__)

eg. .phpを除去

basename(__FILE__, “.php”);

 

ディレクトリ

__DIR__ または dirname(__FILE__)

 

ディレクトリパスの最後の部分

basename(__DIR__)

eg.

../abc/def

実行後

def

 

 

Q.日付日時が”2021-09-28T06:28:24+02:00″のように、日本仕様にならない。

A.

date_default_timezone_set(‘Asia/Tokyo’);

date(‘c’)

に記述する必要があります。

正常になれば”2021-09-28T13:38:11+09:00″のように「+09:00」が付加され正確な時刻になります。

 

Q.エラーメッセージ「Warning: mb_send_mail(): Multiple or malformed newlines found in additional_header in」とは?

A. mb_send_mail関数で PHPのバージョンが「7.4.13」の時

・サンプル文

mb_send_mail($mail, ‘テスト送信’, $msg, ‘ From: 任意のメールアドレス’);

で発生。エラーの表示だけでなくメールの送信も失敗しています。

・改善案

$w_header = ‘From: 任意のメールアドレス’;
mb_send_mail($mail, ‘テスト送信’, $msg, $w_header);

のように、第4パラメータを一度変数に渡すとエラーは消え、メールも送信されました。考えられる原因はPHPのバージョンによるものかもしれませんが詳細は不明です。

 

 

Q.エラーメッセージ「Parse error」とは?

A.例 $key’ ではゼロ件でした’ のように変数と文字列との間に結合文字を忘れた場合に発生。結合文字「.」を使って修正します。

$key.’ ではゼロ件でした’

 

Q. 相対パス

実行するphpファイルの場所と「相手」との関係により異なります。

混乱しやすいので、概要と事例を分けて書きます。

 

概要

パターン1

php

相手

パターン2

php

相手フォルダ/相手

パターン3

自分フォルダ/php

相手フォルダ/相手

 

・phpがある場所と同じ階層

sample.html

iamge.webp

同じ階層のフォルダ

フォルダA/sample.html

フォルダA/image.webp

フォルダA/サブフォルダ/sub.html

 

・phpがある場所より一つ上の階層

../sample.html

../image.webp

一つ上の階層のフォルダ

../フォルダA/sample.html

../フォルダA/image.webp

../フォルダA/サブフォルダ/sub.html

 

 

事例

./または指定なし 同じディレクトリを参照

(個人的には, “./”よりも「指定しない」を選択)

指定しない例

abc/def.php

abcフォルダ内のdef.phpを参照

 

・事例

Q.自分と同じ階層にあるフォルダ内のphpを参照したい

A.

自分.php

abc_folder内の相手.php

 

サンプル

require_once ‘abc_folder/相手.php’;

 

・事例

Q.自分のフォルダと同じ階層の別のフォルダにあるphpを参照したい

A.

abc_folder/自分.php

xyz_folder内の相手.php

 

サンプル

require_once ‘../xyz_folder/相手.php’;

 

includeのヘルプより

「たとえば ../ ではじまるファイル名を指定した場合は、 親ディレクトリからそのファイルを探します。」

 

 

 

Q.外部ファイルの読み込みにはrequire関数か?include文か?

A.require関数については

https://www.sejuku.net/blog/31255

より「読み込みに失敗する」と

・require文は致命的なエラーになる。

・include文は警告が出るだけ。

※ブラウザに表示する場合は ini_set関数(公式)を使う

例 ini_set(‘display_errors’, ‘1’);

 

Q.単純にファイルを開いて閉じる

A.file_put_contentsの公式の例1がシンプルでわかりやすい

<?php
$file = ‘people.txt’;
// ファイルをオープンして既存のコンテンツを取得します
$current = file_get_contents($file);
// 新しい人物をファイルに追加します
$current .= “John Smith\n”;
// 結果をファイルに書き出します
file_put_contents($file, $current);
?>

★注意点

当然ながら people.txt が存在しないとエラーになる。そこで file_exists でエラーを回避する。

$file = ‘people.txt’;

if (file_exists($file)){

$current = file_get_contents($file);

以下、同文

}

 

Q.配列の並べ替えは?

A.個人的にはarray_multisortが便利。

公式サイト

 

 

Q.型キャストは?

A.公式

変換しようとする型を括弧で括り、キャストする変数の前に置きます。

●一部抜粋

(int) – 整数へのキャスト

$foo = (int) $bar;

(boolean) – 論理値へのキャスト

$bar = (boolean) $foo;   // $bar はbooleanです

(string) – 文字列へのキャスト

$fst = (string) $foo; // $fst も文字列です

intvalもあります

 

Q.boolean型変数の中身を表示したら?

A. 実行サンプル

echo ‘_’; //正しく動作したら _ と表示される
$cluster_sw = (boolean) FALSE;
printf($cluster_sw);

結果:

_


echo ‘_’; //正しく動作したら _ と表示される
$cluster_sw = (boolean) TRUE;
printf($cluster_sw);

結果:

_1

 

 

$_SERVER 一覧

Q. $_SERVER[‘REQUEST_URI’] 、$_SERVER[‘PHP_SELF’]の戻り値は?

A. 呼ばれたPHPファイルのパス。ただしサーバーによっては対応しない場合あり

Q. $_SERVER[‘HTTP_HOST’]の戻り値は?

A. 呼んだ側のPHPファイルのあるドメイン(ホスト)名のみ(ex. domain.co.jp)。ただしサーバーによっては対応しない場合あり

 

Q. $_SERVER[‘HTTP_REFERER’]の戻り値は?

A. 呼んだ側のPHPファイルのあるサブドメイン(ホスト)名(ex. host.domain.co.jp)。ただしサーバーによっては対応しない場合あり。

また2022年10月

(A)$_SERVER[‘HTTP_REFERER’]を使用したPHPファイルを直接実行(*)した場合。

*ブラウザからURL(パス)を指定し実行した場合。

(B)PHPのバージョンが 8 以降

AとBの両方を満たす時、エラーではないものの警告が表示されることが判明しました。なお、当方のレンタルサーバーだけの可能性もある事例で読者様すべてに発生するとは限りません。

なお現時点で私の対処方法は

・HTML内のFormタグのボタンでPHPファイルをCallする

で回避しています。

 

Q. Fatal error: Uncaught TypeError: imagewebp(): Argument #1 ($image) must be of type GdImage, bool given in (訳:imagewebp(): 引数 #1 ($image) は GdImage 型、bool 型である必要)のエラーが出た

A. 私の場合、imagewebp で指定した画像に問題があったと判明。画像ソフトでエラーが出た画像を開いて保存し直したら、解消しました。画像パレットあるいは圧縮率関係の不具合ではないかと推定しました。

 

警告の内容

Warning: Undefined array key “HTTP_REFERER”

未定義の配列

PHPのバージョン 成否

7.3.33 警告なし(成功)
7.4.28 警告なし(成功)
8.0.16 警告あり
8.1.16 警告あり

(2022年10月31日調べ)

 

なぜか動作しない

※管理人の勉強不足の可能性がありますが、「個人的に解決できていない」ことを列挙します。

Q.PHP 8.0以降だとコマンドライン引数の実行ができない

A.2023.2.22原因判明。契約しているサーバーの初期設定が「引数の使用をオフ」にしていたので、「引数の使用をオン」に変更したら解決しました。訂正のうえお詫びします。

原因不明。コマンドライン引数:PHP7.4以前なら動作するが、PHP 8.0以降だと「未定義定数」となって実行できない。しかし公式ではPHP 8でも動作可能と明記されている。

 

Q.PHP8.0以降だと、$_SERVER[‘HTTP_REFERER’]で警告が表示された。

A.原因不明。個人的にセキュリティの関係の可能性が推測されますが、詳しくはこの記事の前述の項目を参照して下さい。

 

 

その他

・PHP以外の言語と同様に continue もあります。

 

・ループfor の記述例

配列 $cd_ar の数を把握し、0から配列数未満まで増加1の昇順ループ

for($i = 0, $size = count( $cd_ar ); $i < $size; ++$i) {

 

逆順の例

for ($i = count( $cd_ar ) -1; $i > -1; --$i) {

Qiita様の記事を参考にさせて頂きました。

 

*ループ記事を更新できなかったのでこの記事に記載しました

 

 

PHPメニューへ戻る

 

【PR】 PHP (amazon) *見つからない場合があります

【PR】 PHP (楽天市場) *見つからない場合があります




ほかの PHP の記事

[PHP]JavaScriptとの連携

[PHP]エラー例

PHPメニュー

[PHP]基礎・Switch

[PHP]基礎・比較演算子