カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

PHP メモリーエラー

PHPでファイルを扱う中で、以下のようなエラーが発生することがあります。

Fatal error: Allowed memory size of xxx bytes exhausted (tried to allocate xxx bytes) in ...

ファイルの容量が大き過ぎて、PHPに割り当てられているメモリーの範囲を超えてしまっているのです。

php.iniに以下のような行がありますので、この値を変更してあげます。
デフォルトは8Mです。

memory_limit = 8M   ; Maximum amount of memory a script may consume (8MB)

おすすめはしませんが、-1とすると上限なしに設定できるようです。
変更したらapacheを再起動させてください。

php.iniが触れない場合や、基本的な上限は変えたくないときは一時的に変更します。

init_set("memory_limit", "16M");

もしくは.htaccessでも可能です。

php_value memory_limit 16M

以下の記事も参考にしてください
[ファイルアップロードの最大サイズを変更]

1,498 views

Ajax レスポンス処理の注意点

Ajaxを使用して通信し、得た結果を処理するときの注意点。

サーバーサイドでオブジェクト等を生成して返し、それをeval処理する際、
無効な改行が含まれるとエラーが発生することがあります。

具体的には「終了していない文字列型の定数です。」とスクリプトエラーが発生してしまいます。

例えば、PHPで単純に以下のようなデータを出力するとします。

echo "var a = \"文字列\";";

それをJavaScriptでeval処理すると

eval(responseText);
alert(a);

「文字列」というアラートが表示される。
続きを読む…»

7,186 views

MySQLデータベースにテーブルが存在するか確認する

データベースに指定した名前でテーブルが既に存在するかどうかを
確認することができます。

LIKE検索なので、テーブル名にはワイルドカード(%)を使用することができます。

ここでは例としてPHPを使って確認します。
実行しているのは単純なSQL文ですので、他の言語でも同様にできると思います。

$con = mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("database", $con);
$sql = "SHOW TABLES FROM [DATABASE_NAME] LIKE '[TABLE_NAME]'";
$rst = mysql_query($sql, $con);

DBは既に接続されているので以下でも可

$sql = "SHOW TABLES LIKE '[TABLE_NAME]'";
if(mysql_num_rows($rst) == 0){
    print "テーブルが存在しません。";
} else {
    print "テーブルが存在します。";
}
36,471 views

MySQL テーブルをコピー

テーブルをデータも含めて丸ごとコピーするには

CREATE TABLE new_example LIKE example;
INSERT INTO new_example SELECT * FROM example;

MySQL 4, MySQL 5で確認済

MySQL 3の場合、上記は利用できないので、以下のようにします。

CREATE TABLE new_example AS SELECT * FROM example;

※主キー・インデックス等はコピーできません。
続きを読む…»

2,069 views

スマートフォン対応デザイン

当サイトのスマートフォン対応デザインが完成しました。

iPhoneやAndroid端末でアクセスするとそちらが表示されるようになっています。

1,402 views