はい
タグのついた記事 php
phpでfilesize()でファイルサイズが取得出来ない特定の拡張子のファイルがあって、何が原因だろうと思ってたらgzipだった
apacheのmod_deflateでgzipで配信されてる状態のファイルはfilesize()してもファイルサイズが取得出来ないっぽい。
若干はまった。
phpのreadfile()でURLが読み込めなくて、php.iniの設定かなんかがおかしいのかなーと思ってたら、ルーターのせいだった
ルーターで自分のグローバルIPを叩くと拒絶するようになってたせいで届いてなかった。
解決するには、hostsにアクセスしたいドメイン>127.0.0.1といったように設定する。
ヘアピンNATという機能があるルーターでは普通に直接アクセス出来るみたいだけど、通常はセキュリティ的な問題で拒絶するようになっているらしい。ちなみにNECのWR8500N。
Apacheでphp.txtやcgi.txtとしているにも関わらず普通に実行出来てしまう場合
AddHandler default-handler .txt
を追加する。
phpで2重に関数を呼び出さないようにするには
時々、2重に関数を呼び出したくはないのだけれど既に読み込んだ関数が記述されたファイルを再読み込みしなければならず、エラーを吐くことになることがある。
これを回避するには少々強引だがfunction_exists()関数を使う。
これを使えば関数がすでに定義されているのかどうかを判断できるようになるため、
if(!function_exists(“関数名”){
ここに関数
}
とすることで2回目以降は呼び出されないようにすることが出来る。
phpでsort()関数を使うとき、数字ベースでソートしたい場合は
sort($配列,SORT_NUMERIC)
とする。こうしないと例えば100.jpgと1.jpgが配列の中にあった場合、一番先頭に来るのは1.jpgではなく100.jpgのほうになってしまうようだ。
mysqlのDATATIME型にPHPから日時を流し込むためには
mysqlで日付と時間を記録したく、かつDBを直接人間が見てもわかりやすい形式となるとDATATIME型ということになる。
参考 http://q.hatena.ne.jp/1143719566
mysql.com DATATIME,DATE,TIMESTAMP 型 http://dev.mysql.com/doc/refman/4.1/ja/datetime.html
この形式の名前をISO8601という。
PHPで書き出すためには、PHP5以上ならばdate(c)を使えばいい・・・はずだったのだがどうやらISO8601は多様な書き方を許していてこれはDATATIME型とは違う書式だったので、自分で作った。
date(‘Y-m-d H:i:s’)
これでDATATIME型に放り込める。
Aptana Studioとxml宣言
Aptana Studioでは例えそれが本来validであったとしても、php文の中にxml宣言の?>が含まれているとそれ以下は色分けが行われなくなる。
解消法は見つからなかった。とりあえず編集してるうちは?>の?を消して、本番時にまた載せる。
phpのgetenv(”REMOTE_HOST”)で値が取得出来ない場合は
Apacheのhttpd.confでHostNameLookupsをonにする。もしなければ追加する。
ただしこれを行うとApacheはロギング時に毎回DNSLookupを行うようになるため、パフォーマンスに影響が出るらしい。
XAMPPをphp5設定で動かしているときのphp.iniは/xampp/apache/bin/php.ini
なぜかもう二つ/xampp/php/フォルダにiniがあるけど、どうやらそれはphp4の時に使ったりするらしい。
しかしなんで3つもあるんだ?よくわからんな…