Laravel Artisan の migrate で出る「Table Already Exists」「Foreign Key」エラー

半年前に Laravel 5.2 で開発したプロジェクトをデプロイしたとき、いくつか問題にぶつかりました。その一つが、php artisan migrate を実行すると Table Already Exists エラーが出ることです。しかし、そのテーブルを作成した覚えは一度もありません。詳しく調べると、テーブル自体は存在していたのですが、project_migrations テーブルにはその記録がありませんでした。そこでテーブルを手動で削除してから、もう一度 php artisan migrate を実行しました。すると今度は、本当のエラーメッセージが表示されました。「General error: 1005 Can’t create table ‘dbname.#sql-fbc1_15e6’ (errno: 121) (SQL: alter table karl_project add constraint project_user_id_foreign foreign key (user_id) references karl_user (id))」 ...

2016年12月12日 · 1 分

Facebook Graph API で一部のユーザーの Email 欄を取得できない問題の解決方法

最近、ちょっと面白い小さな問題に出会いました。私たちが開発したコンテスト投票システムで、ごくまれに投票できないユーザーがいたのです。このシステムは Laravel で開発されていて、ユーザーは Facebook でログインして、指定された作品に投票できます(1 日 1 票)。抽選に使うため、取得しているのは最低限の Email と Name だけです。テストの時点では問題なく動いていましたが、公開後、ごく一部のユーザーから、投票後に「whoops looks like something went wrong」というエラーメッセージが表示されるという報告がありました。大部分のユーザーは正常に投票できていました。 ...

2016年12月2日 · 1 分

PHP 拡張機能を手動でコンパイル・インストールする(Linux)

PHP に拡張機能をインストールするにはどうすればよいでしょうか。多くの人は Pecl を使うと答えるでしょう。確かに Pecl は拡張機能を簡単にインストールできる、とても便利な方法です。しかし、サーバーに Pecl がない場合はどうすればよいでしょうか。また、何らかの理由で Pecl をインストールできない場合はどうでしょう。そのときは、手動でコンパイルしてインストールするしかありません~ この記事では、Linux で PHP 拡張機能を手動でコンパイルする方法を紹介します。 ...

2012年1月26日 · 1 分

PHPConf 参加の感想

正直に言うと、最初に覚えた言語はVBですが、実際にいちばんよく使い、いちばん慣れているのはPHPです。たとえば今回の台北市ソフトウェアコンテストも、すべての問題をPHPで解きました。やっぱりPHPがいちばん慣れているので~ だからPHPConfを開催すると聞いたときはとても嬉しくなって、スタッフとして申し込みました XD ...

2011年12月3日 · 1 分

【PHP】glob、scandir、readdir でフォルダ内のファイル一覧を取得する

PHP のプログラムで、指定したフォルダ内のファイル一覧を取得したい場面があります。たとえば、オンラインハードディスクのプログラムを作っていたときには、この機能が必要でした。ここでは、この機能を実現できる三つの関数を紹介します。使い方は少しずつ異なります。三つの関数とは、glob、scandir、readdir です。 ...

2011年8月17日 · 1 分

PHP の実行時間の上限を変更し、長時間の処理が途中で止められないようにする

PHP にはデフォルトで 30 秒の実行上限があります。プログラムの実行が 30 秒を超えると、「Fatal error: Maximum execution time of 30 seconds exceeded」というエラーメッセージが表示されます。これは、無限ループなどのおかしなコードがあった場合に、システム全体が止まってしまうのを防ぐための仕組みです。ただ、プログラムによっては 30 秒を超えて実行する必要がある場合もあります。たとえば、PHP で非常に大きなファイルを処理する場合です。データベースのバックアップファイルは数百 MB になることもあり、処理に時間がかかって 30 秒を超えてしまうことがあります。以前作った Plurk BOT やクローラーのプログラムも、簡単に 30 秒を超えていました。ここでは、この時間の上限を調整する二つの方法を紹介します。 ...

2011年8月9日 · 1 分

PHP で基本的な SQL インジェクション対策をするには?

ここ数日、連絡先を整理する小さなプログラムを書いていたので、いろいろと調べていました。データベースを扱う部分では、パラメータに悪意のある文字列を入れてデータベースを攻撃する、いわゆる SQL インジェクションを防ぐために、基本的な対策を入れています。以下では、SQL インジェクションに対する基本的な防御方法を紹介します~ ...

2011年8月2日 · 1 分

PHP の文字列(SQL クエリ)に配列・$_POST・$_GET を直接埋め込む方法

ここ数日、小さなプログラムを書いていて問題にぶつかりました。連結演算子を使わずに、$_POST の変数を SQL クエリの文字列に直接入れたかったのです。ところが引用符の問題があって、やり方がわかるまでかなり時間がかかりました。ここでは簡単に紹介します。また、この方法を教えてくれた Bu さんと蒼時弦さんにお礼を言いたいです! お二人がいなければ、この方法は今でも知らなかったかもしれません。さらに、この方法は $_POST だけでなく、ほかの配列にも使えます。 ...

2011年8月1日 · 1 分

パスカル(巴斯卡)の三角形の公式解!(滄海さんに感謝)

上の図はウィキペディアから引用したもので、パスカルの三角形を説明するためのものです。 今回取り上げるのは、いわゆるパスカルの三角形です。楊輝三角形、賈憲三角形とも呼ばれています。一番上の行の最初の数字は「1」で、その下の数字は「左上と右上の数字の和」になります。左上または右上に数字がない場合は、0とみなします。たとえば2行目には「1、1」の2つの数字があり、3行目は「1、2、1」になります。この三角形は無限に広がっていきます。 ...

2011年7月24日 · 1 分

Gettext for PHP で多言語対応のプログラムをすばやく作る

Gettext は GNU が公開している……うーん、どう説明すればよいのか迷いますが、規格のようなものであり、ライブラリの集まりでもあります。とにかく、プログラムを多言語対応にするのがとても簡単になります~ この記事では、Gettext を PHP で使い、多言語対応のプログラムやウェブサイトを開発する方法を説明します。 ...

2011年7月18日 · 1 分