トップページ⇒php
585コメント154KB

PHP上級者が集まるスレ

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/01/14(日) 16:53:46ID:???
ここでは他のPHPスレよりもより一層と高いレベルでの情報交換・体験談などを行うスレです。 
我こそはPHPプロフェッショナルだという方の書き込みをお待ちしております。 
0220nobodyさん2010/09/14(火) 14:00:50ID:???
ん?チェックする対象にしなけりゃいいんじゃない?
それとも<br>が100個書かれたときのレイアウト崩れまで考慮すんの?
それやるとキリがないからやりたくないな…。
0221nobodyさん2010/09/15(水) 04:01:29ID:???
>>211
strip_tags() で不満なら HTML Purifier
0222nobodyさん2010/09/15(水) 12:55:31ID:???
strip_tagじゃjavascriptのコードは消せませんよ
0223nobodyさん2010/09/16(木) 02:50:48ID:???
>>222
だからその後まで書いてるんじゃん。バカ?
0224nobodyさん2010/09/16(木) 10:29:22ID:???
認識するタグは変更出来なかったっけ
0225nobodyさん2010/09/17(金) 13:09:32ID:???
正規表現で消せばいいだろ
0226nobodyさん2010/09/17(金) 13:41:52ID:???
似非上級者の集うスレはここですか?
0227nobodyさん2010/09/17(金) 13:45:23ID:???
>>226は下のスレに誘導
http://hibari.2ch.net/test/read.cgi/php/1279833891/
0228nobodyさん2010/09/22(水) 17:57:31ID:???
PHP上級者(笑)
0229nobodyさん2010/09/22(水) 19:00:53ID:???
PC iPhone 携帯 いずれからアクセスされたも指定したURLへ飛ばすにはどうすれば良いでしょうか?
当然携帯電話の場合には、JavaScriptが使えないので Location等を使う事になると思うのですが、
携帯キャリアを問わず正常にページ遷移させる事が出切るのか不安です。
0230nobodyさん2010/09/22(水) 19:07:17ID:???
ゆーざーえーじぇんとー^^
0231nobodyさん2010/09/22(水) 19:08:05ID:???
http://php.net/manual/ja/function.header.php
header("Location: うんたら")
0232nobodyさん2010/09/22(水) 21:00:14ID:???
ドコモの古いので無ければ、まあ
0233nobodyさん2010/09/27(月) 00:08:18ID:???
PHP5のオブジェクト指向開発で
protectedを一切使わない奴はすべからく雑魚PGである。
0234nobodyさん2010/09/27(月) 00:52:33ID:???
雑魚PGの俺に、protetedとprivateの使う場面の違いを教えてくれ
0235nobodyさん2010/09/27(月) 17:58:35ID:???
protectedは欠陥商品
使うヤツが雑魚
0236nobodyさん2010/09/30(木) 19:41:34ID:???
do-while と Exception を使わない奴は間違い無く雑魚PG
0237nobodyさん2010/09/30(木) 20:34:11ID:???
最近覚えた単語を使いたいのか
組み込み系では使うがPHPで使う機会ってほとんどないけどな
0238nobodyさん2010/10/01(金) 00:14:13ID:???
使わなくても書けるけど、使えばコードがスマートになる場面は多々ある。
>>237が雑魚PGという事は良くわかった。
0239nobodyさん2010/10/01(金) 01:02:57ID:???
●初心者の考える関数/メソッド
・成功した場合は配列を返す
・エラーの場合は1〜nのエラーコード返す
・第1引数&$errを渡した場合はエラーが代入される。
・第2引数&$msgを渡した場合はメッセージが代入される。

●まともな関数/メソッド
・戻り値は配列
・エラー時は XxxException が throw される
0240nobodyさん2010/10/02(土) 19:57:41ID:???
致命的じゃないものはfalseを返すとかはよくやる
try(func())catch(XxxException $e){die();}より
if(func()===false){die();}のがてっとりばやいし
特に複数種類Exception出すと面倒だし

参照渡しは絶対に使わないけどな
0241nobodyさん2010/10/02(土) 20:45:24ID:???
このスレで上級者は1割に満たないだろ。

9割はカッスカス
0242nobodyさん2010/10/02(土) 23:39:41ID:???
1人もいないよ
0243nobodyさん2010/10/02(土) 23:53:20ID:???
241だが

俺は少なくとも上級者に入ってるので一人は先ずありえない。
0244nobodyさん2010/10/03(日) 00:06:59ID:???
オレも同じようなこと書こうとしたけど恥ずかしくてやめました
0245nobodyさん2010/10/06(水) 07:23:47ID:???
Facebookに勤めてるPHPハッカーとか憧れるわ
どんなコード書いてるんだろ
0246nobodyさん2010/10/09(土) 04:01:25ID:???
作りたいものがない!
0247nobodyさん2010/10/09(土) 18:35:21ID:???
上級者ってどこからなの?
という疑問。
0248nobodyさん2010/10/10(日) 00:59:01ID:???
別スレで分る人がいなかったのでこちらにて質問させて下さい。

Googleで特定サイトの(画面上から入力されたURL)ページランクを

調べるにはどうすれば良いでしょうか?

GoogleのAPIをコールするのかな?
0249nobodyさん2010/10/10(日) 01:25:50ID:???
>>248
ttp://hm2k.googlecode.com/svn/trunk/code/php/scripts/pagerank.php

ttp://www.hm2k.com/projects/pagerank

GoogleにGETでアクセスしてるっぽい。
ソース直張。
0250nobodyさん2010/10/10(日) 01:44:06ID:???
>>249
サンクス

流石上級者が集まるスレだけあるわw
0251nobodyさん2010/10/10(日) 02:53:51ID:???
>>250
いや、普通にググっただけだよ。
実はGoogleAPIでもいけるんじゃないか。。。とかはわからん。
0252nobodyさん2010/10/11(月) 15:44:05ID:???
ちょっと質問なんですが
Googleで特定のキーワードが何回検索されたかを調べる方法ってありますか?
出来れば、特定の日に何回検索されたかです。

例) 赤い一輪車 というキーワードが 10月10日(日) に15回 といった具合です。
0253nobodyさん2010/10/11(月) 15:51:53ID:???
>>252
Google Trends, AdSense管理画面 以上のことは無理。

はい次
0254nobodyさん2010/10/11(月) 15:54:31ID:???
>>253
つまりある程度検索上位ワードでないと
無理という事でしょうか?

Google Trends で適当にキーワードを入力して
検索したところ、

検索ボリュームが不足しているため「寄与等」のグラフを生成できません。


というエラーメッセージが表示されてしまいました。
0255nobodyさん2010/10/11(月) 16:12:45ID:???
そうですね。
0256nobodyさん2010/10/11(月) 16:20:05ID:???
なんとかならないですか?
0257nobodyさん2010/10/11(月) 16:24:57ID:???
なりません。
0258nobodyさん2010/10/20(水) 14:33:30ID:???
mod_rewriteの正規表現が苦手です。

皆さんはどうやって勉強しましたか?


また、お勧めの解説サイトを教えて下さい。
0259nobodyさん2010/10/20(水) 15:39:30ID:???
2chでスレッドを立てた場合
どの位レスが無いとDAT落ちしてしまうのでしょうか?
※お気に入りスレッドの保守ツールを作ろうと考えています。
0260nobodyさん2010/10/20(水) 17:52:52ID:???
phpからjavascript に配列渡す方法おねがいします
0261nobodyさん2010/10/20(水) 20:25:15ID:???
ドメインを検索した結果
Organization:Personal

というのが出て来るんですが
これってどういう意味でしょうか?
0262nobodyさん2010/10/20(水) 20:35:26ID:???
>>258
PHP関係ないです。正規表現スレで聞いてください。
>>259
PHP関係ないです。2chを開発または維持保守してる人達に聞いてください。
>>260
PHP半分だけ関係あります。echoなりprintでjavascriptコード吐けばOKです。
>>261
PHP関係ないです。英和辞書引いてください。


0263nobodyさん2010/10/20(水) 20:55:04ID:???
>>262
>PHP関係ないです。2chを開発または維持保守してる人達に聞いてください。
2chを開発してるのは誰ですか?
0264nobodyさん2010/10/20(水) 21:03:10ID:???
>>263
2chを開発してる人を監督している人に聞いてください
0265nobodyさん2010/10/20(水) 21:07:48ID:???
>>264
(株)ゼロ or (株)イスト という情報をGETしますた!
0266nobodyさん2010/10/21(木) 09:22:12ID:???
d7028c0bfaf88de9734406fb7bc893d3
0267nobodyさん2010/11/28(日) 01:08:02ID:F1JfXYTU
ワールドワイドに展開したいサービスを作る場合、
日付情報はローカル時刻から世界標準時に変換してDBに保存して、
閲覧時には、閲覧者の国に合わせて時刻を変換するのがベストなんでしょうか?
0268nobodyさん2010/11/28(日) 01:17:47ID:???
No
02692672010/11/28(日) 01:30:18ID:F1JfXYTU
どうするのがいいですか?
0270nobodyさん2010/11/28(日) 08:17:58ID:???
ワールドワイドに展開したいんだから
ワールドワイドに展開してるということを分かってもらう必要がある
つまり日本時刻に統一することで、日本のサイトがワールドワイドに展開してると認識してもらう
0271nobodyさん2010/11/29(月) 00:45:34ID:???
>閲覧時には、閲覧者の国に合わせて時刻を変換するのがベストなんでしょうか?
YES。

閲覧時に変換すればいいだけの話で、
DBにはローカル時刻で保存しておいても問題無いよ。

というか、日本で開発するならデバッグのし易さ等も含めて、、
わざわざ世界標準時に変換して保存する必要は無いかと。
0272nobodyさん2010/11/29(月) 00:56:52ID:???
timestampで保存すりゃいいじゃん
0273nobodyさん2010/11/29(月) 01:10:16ID:???
$_REQUEST

を使えば GET も POST もどちらの値も取れる様なので
GET や POST を使わずに

REQUEST 一本で行こうかと思っているのですが
何か問題(セキュリティー的な面で)はありますか?
0274nobodyさん2010/11/29(月) 01:28:15ID:???
うむ
0275nobodyさん2010/11/29(月) 01:36:22ID:???
>>273
getとpostを区別しないフレームワークもあるし、いいんじゃない?
0276nobodyさん2010/11/29(月) 02:50:23ID:???
timestampで保存??
PHPおよびDBのtimestamp型はグリニッジ標準時で格納されて、
表示のときにタイムゾーンにあわせて変換されてるの??
0277nobodyさん2010/11/29(月) 02:52:33ID:???
>>273

<img src="http://hoge.com/sendmessage?title=shine&body=aho">

なんてのが掲示板に書き込まれたらどうだろう?
CSRFチェックしてるならいいけど。
0278nobodyさん2010/11/29(月) 03:13:43ID:???
timestamp型は内部ではGMTなんだね。知らなかった。さすが上級。
でも2038年までしか使えないのか。
案外すぐそこだと思ってしまう。
0279nobodyさん2010/11/29(月) 03:15:47ID:???
>>275
ええのかな。

>>277
ごめんなさい。
かりに投稿されてもサニタイジング処理するから
問題無い気もするのですが何が問題なのでしょうか?
0280nobodyさん2010/11/29(月) 03:56:53ID:???
サニタイズじゃないだろそれ
0281nobodyさん2010/11/29(月) 10:10:19ID:???
>>278
DateTimeつかいなよ

あと「2038年問題」で検索すればわかるけど
過去に銀行でトラブルがありニュースになってる
php5.1までは対応が面倒だったが
php5.2以降ならDateTime使えば2038年問題はクリアできる
書式も柔軟で使いやすい
0282nobodyさん2010/12/01(水) 01:33:56ID:fFpZquRW
PHPでtry-catch-finallyの動きさせたい時どう書くのが手軽?
try-finally-catchでも別にいいのでこんなの考えたけどキモいかなあ

$ex=NULL;
try{
 …例外が出るかも知れない処理…
}
catch(Exception $ex){}

…finally処理…

switch(true){
case $ex instanceof HogeException:
 …例外ハンドラ…
case $ex instanceof Exception:
 …例外ハンドラ…
 throw $ex;
}
0283nobodyさん2010/12/01(水) 02:41:56ID:???
tryとcatchブロックの最後に同じ処理を入れとけばいい
0284nobodyさん2010/12/02(木) 04:12:56ID:???
YahooやGoogleなど、1つのIDで複数のサービスを利用できるようにしているサイトは
どのようなユーザーDBを持っているのでしょうか?
まさかすべてのサービスを1つのDBに格納してるわけではないですよね?
サーバやDBを分けると、リレーションが作れないと思うのですが
管理しにくくなるデメリットをどう回避しているのでしょう?

たとえば、全IDの基本情報を持った1つのユーザーIDマスターテーブルがあって、
サービスごとのDBに、ユーザーIDマスターテーブルをコピーして、サービス用のカラムを追加した
各サービス用のユーザーIDテーブルがあって、マスターが更新されると、こちらも自動更新されるとか、
もしくは、各サービス用ユーザーテーブルには、マスターのIDが保存されていて
GET http://api.mydomain/?getUserDetail=username
とかHTTPリクエストでマスターテーブルから取得しているんでしょうか。
(いま利用しているレンサバは外部からのDB接続ができません)

できるだけスマートな実装を教えてください。
0285nobodyさん2010/12/02(木) 04:44:43ID:???
DB越えのリレーションができるようにしてるのでは
0286nobodyさん2010/12/02(木) 04:53:14ID:???
>>284
基本情報の保存されたマスターユーザテーブルと、
サービス別に必要なカラムを持ったテーブル(マスターユーザIDで紐付け)があるんじゃねーの?

マスターサーバに負荷がかかると思われるが、
それはハードウェア的に分散してるものだと思われる。
0287nobodyさん2010/12/02(木) 19:18:34ID:???
DB越えのリレーションってどうやるの??
0288nobodyさん2010/12/02(木) 23:52:26ID:???
DBってテーブルの上位のDBじゃなくてDBサーバのことを言ってるの?
だったら普通にレプリケーションしてるだけじゃないの
0289nobodyさん2010/12/03(金) 01:32:27ID:???
>>283
同じ処理を書きたくないからこそのfinallyじゃない?

>>284
レプリケーションとかDB直接接続もできるorしてるかも知れないけど、
少なくともそういうAPIは裏側で用意されてるはず。
他社製の物と連携すること考えるとDBMSが異なるサービスにも使えるようにしてると思う。
ポリシー上そのAPI介さないと(自社製でも)ユーザ情報にアクセスさせないとかは十分ありうるね。

で、レンサバという制限の元、何とか共有したいという話なら
使える物は何でも使って最も楽な方法でやればいいと思うよ。
例えばCronで定期的にユーザマスタcsvを子サービスにSSLで送りつけてもいいし。

ちなみにサービス別にユーザテーブル作る場合、全件は複製せずに
そのサービスを使ってる人のIDだけが入ってるというのが多い実装だと思う。
0290nobodyさん2010/12/04(土) 00:41:28ID:???
Doctrineもここでいいのかなあ

PostgreSQLだとDoctrine_Core::generateModelsFromDb()はできない?

確認したら
Import/Pgsql.phpの
$sql[ 'listTableColumns']のSQL実行してるみたいなんだけど
これが失敗してるんだよなあ
0291Perl忍者 ◆M5ZWRnXOj6 2010/12/05(日) 14:11:08ID:v423lubt
WEB業界を牛耳っているのは
Perl-casualのやつら

こいつらはやばいよネットヤクザだよ

だいたいのWEB業界 mixi,gree,ライブドア,google,yahoo,楽天など
牛耳ってるのもperl-casualのやつら

mixi事件のメルアド検索もperl-casualのやつらの工作

perl-casualのやつらはやばいよ
まじでこれは言える

perl-casualのやつらが日本のインターネット業界を支えている
これはマジで実話
0292被リンクサービスの決定版2010/12/05(日) 18:43:27ID:07kW5KS8
被リンクサービスはこれらの業者を掛け持ちするのがベスト!
http://hibari.2ch.net/test/read.cgi/hp/1291304974/43
0293nobodyさん2010/12/06(月) 01:02:20ID:???
↑
3万も払って、たった10ブログからのリンクだけ??
クソボロい商売だな。
俺一人で個人経営やっても、数日で1000ブログ以上作るシステム開発する自信あるぜ?
てかもう存在してるだろうけど。
0294nobodyさん2010/12/06(月) 11:55:38ID:???
アホか。システムなんか誰にだって作れる。
問題はプロモーションだ。
0295nobodyさん2010/12/08(水) 00:40:37ID:???
phpで出来てるフレームワークで、ほとんど素のphpだろこれっていうレベルのものある?
smartyとか覚えきれなかったので
0296nobodyさん2010/12/08(水) 00:51:42ID:???
つ「ちいたん」

ってかSmartyだって素のPHPなんだが・・・w
0297nobodyさん2010/12/08(水) 02:44:18ID:???
>>295
フレームワークってのは使い方を覚えて初めて役に立つものだから
覚えることがデメリットになるくらいなら使わない方が無難な物ができると思う。
素のPHPだから一概に悪いなんてことないよ。
0298nobodyさん2010/12/08(水) 22:29:52ID:???
>>296
なかなか悪くないな!むしろいい感じだな! 名前の由来が気に入らないが!
0299nobodyさん2010/12/12(日) 06:49:26ID:k+72gwmM
JavaScript使ったサイトのテストにWatirが良さ気だと思っているのですが、
これもいいよ、っていうツールはありませんか?
いまはWSHでやってて限界感じています。
0300nobodyさん2010/12/12(日) 12:35:52ID:???
比較したことないけどSeleniumもいいと思う
0301nobodyさん2010/12/17(金) 03:26:27ID:???
スレ違いだったらすみません。
PHPDocumentorでチュートリアルを生成すると文字化けが起こるんですけど、どなたか解決方法を知りませんか?

文字化けというより、不正な文字を「?」に置き換えてる感じで、日本語が全部「??????」で出力されます。
チュートリアル以外のドキュメントは文字化けを起こさないのですが。。。
0302nobodyさん2010/12/17(金) 03:36:57ID:???
>301
すみません、解決しました。。。

Setup.inc.php の 733行目 にあった $ret = utf8_decode($ret); をコメントアウトしたら解決しました。
お騒がせしました。
0303nobodyさん2011/01/02(日) 13:53:35ID:6H//G+jS
>Perl/shell 形式のコメント (#) は使用するべきではありません。

PEARのコーディング規約でこんなの見つけたんだけど。
何でいけないんだろう。

unix系OSでphp使ってる人には身近なコメントだと思うんだけど、
(#)使っちゃいけないっていうのはただ単にWin系もしくは
入門者の人が見慣れてないから使うなってだけかな?

べつにPEARのコーディング規約をリファレンスにする必要は無いと思うし、
嫌なら別の規約を使えばいい話なのはわかってるんだけど、
「PHPでshell形式はいけない物」みたいな風潮が広まちゃったら嫌だなって・・・。
0304nobodyさん2011/01/02(日) 15:03:30ID:???
風潮はどうかはしらないけどPHPで#は使わないな。
0305nobodyさん2011/01/03(月) 04:16:48ID:???
>>303
「#」と「//」の2種類のコメントを混在させてはいけないって所がコーディング規約的な意図でしょ
0306nobodyさん2011/01/03(月) 21:50:57ID:???
だね。

「するべきではありません。」っていうのがいかにも#をつかうのが良くないと言っているように見えるけど
多分must not beぐらいの意味だろう。
0307nobodyさん2011/01/03(月) 22:35:35ID:???
//を使わずに#に統一するなら問題はない。
初心者のことを考えて//に統一するのもよい。
0308nobodyさん2011/01/03(月) 23:45:21ID:???
$result = array();
for($request as $key1 => $value1){
for($value1 as $key2 => $value2){
for($value2 as $key3 => $value3){
$result[$key3][$key2][$key1] = $value;
}}}
こんなイメージな多次元配列の次元位置を入れ替える方法を考えています
多次元配列の次元数が固定されていれば、
上のようなやり方でも大体行けるのですが、
n次元だった場合のいいロジックってないでしょうか
0309nobodyさん2011/01/04(火) 00:00:56ID:???
function test($request) {
$result = array();
foreach ($request as $key => $value) {
if (is_array($value)) {
$result[$key] = test($value);
} else {
return array($key=>$value);
}
}
return $result;
}
0310nobodyさん2011/01/04(火) 00:03:03ID:???
ごめん全然嘘だった
0311nobodyさん2011/01/04(火) 00:16:30ID:???
やっぱ愚直に参照にするか引数で受け渡すしかないんじゃないかね
0312nobodyさん2011/01/04(火) 08:50:08ID:???
一度作った配列を構成しなおすというパターンはそうそう無いよね
最初に作る時にそうしておくか、使う時に対応するかのどっちかで大抵は済むし、
最悪でも最初に2種類構築すればいいし
0313nobodyさん2011/01/06(木) 01:16:57ID:???
>>312
その一度配列を作るロジックを聞いてるんじゃないか?w
0314nobodyさん2011/01/06(木) 01:37:45ID:???
パット見の思いつき。たわごと。

n次元てことは再帰だろーなーと思うけど
array_keys()使う感じでできんかな。
0315nobodyさん2011/01/06(木) 13:03:14ID:???
こういう質問出るって事は、お前らFW使ってないのか?
まぁ自作関数ライブラリがあれば足りるケースがほとんどではあるが。
0316nobodyさん2011/01/06(木) 20:49:39ID:???
>>315
どういうこと?
03173152011/01/07(金) 12:20:05ID:???
>>316
単なる知ったかぶりですけどなにか?
0318nobodyさん2011/01/07(金) 20:38:17ID:???
>>317
何がどうしったかぶりなの?
0319nobodyさん2011/01/08(土) 00:51:52ID:???
FWは作ってないが、ライブラリ群は作ってる
で、今バリデーションの案を抗争中な訳なんだが、
どんなソースコードになったら、見やすくて分かりやすいだろ?
$str = vali::post('text')->mbLength(0,256)->var();
みたいにJavaっぽく書けば、分かりやすいけど細かい設定は付けれない
$v_id = array('func'=>vali::alnum,'error'=>'どうたらこうたら');
$id = vali::post('text', $v_id);
と、Cake風の書き方すれば、細かい設定もしやすいからいろんな事が出来る
そんなわけで、どんなバリデーション作ったら使いたくなる?
0320nobodyさん2011/01/08(土) 01:02:08ID:???
つくりかけ

var $VALIDATIONS = array(
'varname' => array(
'trim' => array(),
'ascii' => array(),
'unique' => array( '※すでに使われている名前です。'),
'blank' => array( '※必ずご記入ください。'),
'date' => array( '※正しい日時ではありません。'),
'range' => array(18,100, '※18から100の数字をご記入ください。'),
'length' => array( 0, 20, '※20文字以下でご記入ください。'),
'bytes' => array( 0, 40, '※40バイト以下でご記入ください。'),
'regex' => array('/^[a-z0-9\-\_]*$/i', '※英数字と -(ハイフン) _(アンダースコア) のみでご記入ください。'), //複数設定可??
'in' => array('OPTIONS', '※正しい選択肢ではありません。'), //複数または直接array??
'method' => array('model::method', '※正しい値ではありません。'), //うまいことやる!!
),
);
■ このスレッドは過去ログ倉庫に格納されています