phpLiteAdminのエラー

データベース管理ツールで下記のエラーが出力。

PHP Deprecated:  Function get_magic_quotes_gpc() is deprecated in /phpliteadmin.php

該当箇所は下記ですね。

PHP
if (get_magic_quotes_gpc()) {
	$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
	while (list($key, $val) = each($process)) {
		foreach ($val as $k => $v) {
			unset($process[$key][$k]);
			if (is_array($v)) {
				$process[$key][stripslashes($k)] = $v;
				$process[] = &$process[$key][stripslashes($k)];
			} else {
				$process[$key][stripslashes($k)] = stripslashes($v);
			}
		}
	}
	unset($process);
}

PHP7.4以降で「get_magic_quotes_gpc()」が削除されるため使わない方が良いという警告。ツールは操作可能ですがエラーログが出力されていました。

対策コードが以下。上記はコメントアウトでOK。

PHP
$process = [&$_GET, &$_POST, &$_COOKIE, &$_REQUEST];
foreach ($process as &$global) {
	foreach ($global as $key => &$value) {
		$newKey = stripslashes($key);
		
		if (is_array($value)) {
			array_walk_recursive($value, function(&$item) {
				$item = stripslashes($item);
			});
		} else {
			$value = stripslashes($value);
		}

		if ($newKey !== $key) {
			$global[$newKey] = $value;
			unset($global[$key]);
		}
	}
}
unset($process);

もし対策後のコードに変更すればPHP7.4以降でエラーログを吐かずにバックスラッシュの削除処理を行いながらもセキュリティ性を保つことができます。

動きについてざっと解説しておくと、Magic Quotesが無効でも処理を実行して配列のキーと値に「stripslashes()」を適用しバックスラッシュを削除する。さらにネストされた配列へ再帰的処理を行いキーのバックスラッシュも削除した上で新しいキーで再設定。そして元のキーを「unset()」で削除することで元コードと同等の動作を再現。

要約するとMagic Quotesに依存せずバックスラッシュ削除を行えます。ぜひお試しを!

記事にコメントを残す