Posts tagged php.ini
MacBook に開発環境を入れる
1Apache + MySQL + PHP を MacPorts で入れてみました。
Apache のインストール
$ sudo port install apache2
しかし、sqlite3 のインストールでエラーになってしまう。
下記を参考に一度 sqlite3 を削除して入れなおしたらうまくいきました。
Mac Ports で Apache2 のインストールエラー – Get crazy
$ sudo port clean --all sqlite3
$ sudo port install sqlite3
.htaccess で error_reporting を設定するときの注意点
5.htaccess で PHP が出力するエラー表示を制御するには E_ALL などの定数は使えないので、ビット値で指定する必要があります。
E_ALL & ~E_NOTICE を設定する場合
php.ini
error_reporting = E_ALL & ~E_NOTICE
php コード内
error_reporting(E_ALL ^ E_NOTICE);
.htaccess
php_value error_reporting 6135
error_reporting に設定する値は PHP: error_reporting – Manual を参照するといいでしょう。
| 値 | 定数 |
|---|---|
| 1 | E_ERROR |
| 2 | E_WARNING |
| 4 | E_PARSE |
| 8 | E_NOTICE |
| 16 | E_CORE_ERROR |
| 32 | E_CORE_WARNING |
| 64 | E_COMPILE_ERROR |
| 128 | E_COMPILE_WARNING |
| 256 | E_USER_ERROR |
| 512 | E_USER_WARNING |
| 1024 | E_USER_NOTICE |
| 6143 | E_ALL |
| 2048 | E_STRICT |
| 4096 | E_RECOVERABLE_ERROR |
ちなみに E_ALL & ~E_NOTICE の値が 6135 になる理由は E_ALL の値が 6143、E_NOTICE の値が 8 なので 6143-8=6135 になります。(または E_NOTICE と E_STRICT 以外の値を足した数が 6135 になります。
私は開発中は E_NOTICE も表示するようにしていますが、結構表示させない人が多いようで人のコードを修正するときなど Notice エラーが出て困ることがあります。E_NOTICE を表示するようにしておくと未定義の変数などバグの元になりやすいものを教えてくれるのでお勧めです。
また、開発終了して本番運用するときにはブラウザにエラーを出力しないように
error_reporting(0);
を設定しておくことを忘れずに!
その際も PHP のエラーはエラーログに記録されるようにしておかないのも忘れずに。
PHP で大きいJPEGやPNGファイルをPHPで扱うときのメモリエラー回避方法
0GD でメモリエラー
に書かれているように GD で JPEG や PNG の大きな画像を扱うときに
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 11648 bytes) in ...というようなエラーが出てしまいます。
上のエラーがは私が EOS5D で撮影した 2912×4368とかなり大きな画像です。
大きさで制限するのも一つの方法ですが、どうしても大きな画像を取り込みリサイズしなければいけないときなどのために以下の方法もあります。
PHP: imagecreatefromjpeg – Manual
PHP に割り当てられているメモリの範囲で必要なメモリを計算して
ini_set('memory_limit', 'xxM')と設定しれくれます。
function setMemoryForImage( $filename ){
$imageInfo = getimagesize($filename);
$MB = 1048576; // number of bytes in 1M
$K64 = 65536; // number of bytes in 64K
$TWEAKFACTOR = 1.5; // Or whatever works for you
$memoryNeeded = round( ( $imageInfo[0] * $imageInfo[1]
* $imageInfo['bits']
* $imageInfo['channels'] / 8
+ $K64
) * $TWEAKFACTOR
);
//ini_get('memory_limit') only works if compiled with "--enable-memory-limit" also
//Default memory limit is 8MB so well stick with that.
//To find out what yours is, view your php.ini file.
$memoryLimit = 8 * $MB;
if (function_exists('memory_get_usage') &&
memory_get_usage() + $memoryNeeded > $memoryLimit)
{
$newLimit = $memoryLimitMB + ceil( ( memory_get_usage()
+ $memoryNeeded
- $memoryLimit
) / $MB
);
ini_set( 'memory_limit', $newLimit . 'M' );
return true;
}else
return false;
}
}