【PHP】下らねぇ質問はここに書き込みやがれ 30
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/10/05(木) 01:38:25ID:y1WWhz/pまず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・質問者は必ずIDを表示させてください。(メール欄に何も記述しないでください。)
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
(逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
(荒らし、煽りは除く。逆に煽られたときも、無闇に反論せずスルーすべし)
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0442nobodyさん
2006/10/14(土) 18:15:41ID:???しかし、他のユーザーに「今ログインしてる人がいます」を返すポートが
別に必要になる罠。
0444nobodyさん
2006/10/14(土) 19:18:19ID:???どのようにやれば、いいのでしょうか?
preg_matchでやろうとしても、上手くできません。
どうか教えてください。
0445nobodyさん
2006/10/14(土) 19:28:10ID:???0448441
2006/10/14(土) 20:28:50ID:???タイムアウトまでログイン出来ない糞仕様なPHPが出来てしまいましたorz
ログイン人数を2人以上にしなければいいだけなので
ユーザーAがログインしてる時にユーザーBがログインした場合、
ユーザーBのログイン・ページ移動を許可、ユーザーAのログインを破棄
というように、後から入ってきたユーザーを優先させればいいと思ったんですが
この場合、DBのフラグをどう扱えばいいのかわかりませんorz
登録情報はユーザーAでもユーザーBでも同じですが
ログイン時にAとBで、それぞれ別々のIDか何かをセッションで持たせ、DBに格納し
ページを移動するたびにセッションとDBを確認するという方法を考えたんですが
この方法ではIDに乱数やホスト名を持たせても被ったりして困るのですが
後からログインしたユーザーを有効にする何かいい方法を教えてもらえないでしょうか?
0449nobodyさん
2006/10/14(土) 20:43:53ID:???DBに「ユーザAがログインしている」ってこと書いといて
適時それをチェックして
次に違うユーザが入ったらそれを上書きするって方法じゃだめなん?
0450nobodyさん
2006/10/14(土) 20:54:36ID:???0453nobodyさん
2006/10/14(土) 22:17:46ID:???ファイルロックされてたら、だれかログインしてると。
0455nobodyさん
2006/10/15(日) 01:50:31ID:hzF42wCh* @hoge hugahuga
*/
のコメントの書き方で、ファイルの作成開始日や、更新日は、
どのようなキーワードで書けばいいですか?
0456nobodyさん
2006/10/15(日) 01:53:37ID:???0457455
2006/10/15(日) 01:57:38ID:???0458nobodyさん
2006/10/15(日) 02:05:42ID:???author の検索結果のうち 日本語のページ 約 30,600,000 件中 1 - 100 件目 (0.26 秒)
autherで検索したら、辞典が3番目に出てきたからびびったぜ・・・
0459nobodyさん
2006/10/15(日) 02:10:59ID:???*File: window.C
*Auther: Akiko Wada
*Date: 1999/12/31
*EndHeader:
とかでいいんじゃね?
きまりなどない
0460nobodyさん
2006/10/15(日) 03:31:19ID:???ドキュメントの自動生成にどのツールを使うのかによる。
phpDocumentorを使うなら、該当するマニュアルを読むべし。
documentable elementでぐぐれ。
ちなみにファイル作成/更新時刻なんて手書きで書かないでしょ。
そういうのはCVSやSVNなどでキーワードをつけとく。
0461455
2006/10/15(日) 03:56:05ID:???更新日は手ではあまり書かないですが、
作成開始日は書いておくと、わかりやすかったりするんです。
authorは今気付いてよかった。
0462nobodyさん
2006/10/15(日) 04:48:19ID:???調べてから来いよ。
決まった書き方なんて特にないし、使うツールまたはローカルルール依存。
だいたいコメントなんだから好きなこと書いときゃいいんだよ。
ついでに言っておくと、ファイル作成日時なんて普通は誰も書かないから、完全に好きにしろとしか言いようがない。
0463nobodyさん
2006/10/15(日) 05:08:51ID:???0464nobodyさん
2006/10/15(日) 05:37:26ID:???0465nobodyさん
2006/10/15(日) 05:53:03ID:???作成日→created
更新日→modified
だろうけど、 >>460のいうとおり、svnなりcvsなりを使ってりゃ手で書く用事はないかなあ
0466441
2006/10/15(日) 11:00:23ID:???ユーザーAもユーザーBもログインした端末が違うだけで(仮想化された場合は端末も同じ)
実際は同一人物なので何を持たせればいいのか困ってます。
>>450
ショッピングカートのようなデータの競合が起こらない為の処置なので
誰かに入られるのを防ぐのではなく、
ログインユーザーが2人以上になることのみを防ぐ目的です。
それと、ブラウザを即落とした場合
タイムアウトまで待たないといけないという糞仕様を回避するためでもあります
後からログインしたユーザーをログイン状態にして
すでにログイン状態のユーザーのログインを解除する方法は
ログインごとに連番を付けるとかしかないんでしょうか…
それだとPHPが多重起動したときにすごく不具合が起こりそうで。。
0467nobodyさん
2006/10/15(日) 11:28:41ID:???それとも別アカウントの話か?
0468nobodyさん
2006/10/15(日) 11:35:39ID:???0469nobodyさん
2006/10/15(日) 11:39:38ID:???> ログインユーザーが2人以上になることのみを防ぐ目的です。
だから別アカウントの話でしょ。
誰か1人がログインしてたら他は一切ログインできない糞仕様サイト。
0471441
2006/10/15(日) 12:25:10ID:???>>469
AとBに分けたのは分かり難かったですね・・・
ユーザーAがパソコンAでログインしてる時に
ユーザーAがパソコンBでログインした場合
ユーザーAのパソコンBからのログインを許可して
ユーザーAのパソコンAのログインを破棄する仕様にしたいのです
↓にあるブログの記事と同じコトなんですが、肝心のロジック部が分からず…orz
ttp://d.hatena.ne.jp/okinaka/20060626
0472nobodyさん
2006/10/15(日) 12:40:14ID:???ちなみにパソコンAで2つウインドウを開いてそれぞれでログインするのは可?
もしくは、パソコンAでログイン→途中のリンクで新規ウインドウを開く、は可?
根本的にWEBアプリケーションで多重ログイン禁止って考え方自体が
ユーザから見て非常に使いにくいのでやめた方がいいと思うよ。
その記事にもあるが
> なお、理想としては、多重ログインでもきちんと処理できるようなアプリケーションの作りにして、
が正しいと思う。
同一PC同一ブラウザでの複数ウインドウでは支障が出ない作りになっているなら、
ログイン時に現在のセッションIDをユーザ情報に格納するようにして、異なるセッションIDで
アクセスしてきたユーザは無効としてログイン前画面に飛ばしてしまうのが手っ取り早いと思う。
0473nobodyさん
2006/10/15(日) 14:07:50ID:???>ユーザーAのパソコンAのログインを破棄する仕様にしたいのです
ズバリ書いてる通りにすればいいじゃん。
つまり、パソコンAでログイン中にパソコンBでログインしてきたら、
そのログイン処理と同時に、パソコンAのセッション・ファイルを破棄して
ログアウト処理もやっちゃえば解決じゃん。
0474nobodyさん
2006/10/15(日) 15:24:36ID:???できてる。
ショップなんて、商品ごとに新しいページ開けたりするし。
違うパソコンから同時にログインされても困らない仕様が今風。
それがどうなってるかなんてのは、コードを読んでみなって話。
0475nobodyさん
2006/10/15(日) 16:11:59ID:???ショッピングカートでなくても考え方は同じでは?それでは解決されないのかな?
0476nobodyさん
2006/10/15(日) 16:28:01ID:gxN1FoLoこういうグラフをGDで描きたいのですが、これはどう描くのが効率が良いと思われるでしょうか?
多角形なのかな、と思ってやってみたのですが……。
みなさんならどう描きます?
0477nobodyさん
2006/10/15(日) 16:31:50ID:???http://www.asial.co.jp/jpgraph/
0478nobodyさん
2006/10/15(日) 16:44:46ID:gxN1FoLoそうか、GDだと座標計算から始めないといけないから大変だ……。
ありがとうございます!
0479nobodyさん
2006/10/15(日) 17:28:34ID:???>ショップなんて、商品ごとに新しいページ開けたりするし。
アホか。
普通にPHPでセッション機能を作った場合、ブラウザ側で「新しいウインドウで開く」などの
操作を行なった場合は当然新しいウインドウからも同じセッションIDがサーバに送られるっての。
だから新しいページを同一セッションにて開けるのは当たり前。ショップとか関係ない。
0481nobodyさん
2006/10/15(日) 20:11:31ID:???拾ってきたスクリプトに、ある関数が定義してあって
function hoge ($fuga = "") {
//処理がずらずら
}
って書いてあるんだけど、$fuga = ""って何?
ここって引数を書く場所だから関数を定義する時じゃなくて実行する時に与えるものじゃないの?
http://jp2.php.net/manual/ja/language.functions.php
にもそんな記述はないんだけど…
ちなみに実行しても特にエラーとかは吐かないんだけど、どういう意味か教えて下さい
0482nobodyさん
2006/10/15(日) 20:23:38ID:???デフォルト引数値のとこ参照。
要するに本来その関数はhoge("hage");みたいに引数をひとつ受け付けて
それは関数内では$hugaに格納されるわけだが、
$hugaが指定されていない時、つまりhoge();のみだった場合は
デフォルト値として""が入る。
0484nobodyさん
2006/10/15(日) 20:45:55ID:???ともあれ頑張れ。
0485nobodyさん
2006/10/15(日) 20:49:21ID:???0486nobodyさん
2006/10/15(日) 21:32:21ID:???以下の例と同じような現象でした。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1649057
簡単に説明すると、serial型使った時は、sequenceテーブルが
自動的にできるので、そのテーブルにもgrant権限を与えないと
いけないというものでした。
同じ悩みの方もいるかもしれないので、報告まで。
0487nobodyさん
2006/10/15(日) 23:08:02ID:???0488nobodyさん
2006/10/15(日) 23:10:23ID:???異なった所有者のファイルをunlink()やtouch()できてしまいます。
http://www.php.net/manual/ja/features.safe-mode.functions.php を見ると、
>処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。
>処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します。
と書いているのですが、セーフモードでも異なった所有者ファイルのunlink()を
可能にするような設定が、safe_mode_gidの他にあるのでしょうか?
ディレクトリの所有者が異なる場合は、
正常に、セーフモードのエラーが出るのですが・・・
0490nobodyさん
2006/10/16(月) 00:11:08ID:???0491nobodyさん
2006/10/16(月) 03:23:02ID:???投稿した人のローカルのファイルの置き場を取得する方法ってありますか?
0492nobodyさん
2006/10/16(月) 03:29:10ID:???0494nobodyさん
2006/10/16(月) 03:33:56ID:???以前はブラウザの脆弱性で、JS使えば出来てしまってた気がするけど、今時は無理ではないかと。
つーか、他人に迷惑はかけるなよ。
0495nobodyさん
2006/10/16(月) 03:34:30ID:???パスまで出たら引く
0496nobodyさん
2006/10/16(月) 03:36:15ID:???あれって、仁義的にはありなのかな?
0498nobodyさん
2006/10/16(月) 03:39:55ID:???まぁあれはperlだけど。
0499491
2006/10/16(月) 03:45:43ID:???違う方法考えてみます。
0500nobodyさん
2006/10/16(月) 04:09:39ID:???0501nobodyさん
2006/10/16(月) 04:35:00ID:???それがフツー。
非safe_modeだと、ディレクトリに書き込み権限があれば誰でもファイルを作成・削除できる。
safe_modeだと、たとえディレクトリに書き込み権限があっても、ディレクトリのUIDが違うとファイルを作成・削除できない。
0502488
2006/10/16(月) 04:46:15ID:???>処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。
とあるのに、異なった所有者のファイルを削除できてしまっている、
ということで・・・
0503nobodyさん
2006/10/16(月) 05:43:51ID:???それはPHPとかPerlとか関係ない。
INPUT TYPE="file"はフォームの標準仕様。
仁義もクソも関係ない。(っていうか「仁義」って言葉の使い方間違えてるが)
0504nobodyさん
2006/10/16(月) 05:58:54ID:???0505nobodyさん
2006/10/16(月) 06:00:15ID:???ありがとう。
0506nobodyさん
2006/10/16(月) 06:08:27ID:???マニュアルが変だね。
でも仮に、異なった所有者のファイルを削除できないとなると、
wwwサーバはユーザディレクトリのファイルを一個も削除できない仕様になる。
safe_modeは共用サーバ用に作られた仕様だからそれはどうかと。
(suEXEC環境とか、root権限持ってる環境の話は置いといて)
0507nobodyさん
2006/10/16(月) 06:13:53ID:???> wwwサーバはユーザディレクトリのファイルを一個も削除できない仕様になる。
wwwサーバはwwwサーバ自身がユーザディレクトリ内に作ったファイルを一個も削除できない仕様になる。
0508nobodyさん
2006/10/16(月) 07:27:32ID:???公式マニュアルの癖にコメント欄が付いてて
http://www.php.net/manual/ja/features.safe-mode.functions.php
この↑ページのコメント欄にも
「glob()が一覧に載っていないけど、これもsafe_modeで挙動が変わる」
「所有者が他人のディレクトリーをglobしても警告が出ない。(けど、返ってくる一覧はからっぽ)」
とかなんとか、色々書いてあるし。(所有者が他人でだれでも読めるディレクトリで、こうなるんなら問題だと思うが・・・)
>>488 が指摘している問題は、umaskかなんかで適当に解決できると思うけど。
(OSのファイルシステムのパーミッションを適切に使えれば、PHPが制限しなくてもいいような気が)
0509nobodyさん
2006/10/16(月) 08:07:56ID:???0510nobodyさん
2006/10/16(月) 09:30:14ID:???そのメールにあるアドレスに飛ぶことで初めて登録が成立するシステムを作りたいんですが
どのようすれば作れるのか分かりません。
PHPの処理の流れを教えて貰えないでしょうか
0511nobodyさん
2006/10/16(月) 09:44:32ID:???そのまんまじゃん。
入力されたあとに、仮登録のファイル(仮登録フラグを立てる)を作る。
メール上の個別認識できるURLに飛んできたら、仮登録を本登録に変える。
個別認識部分に、自由設定のIDとか連番を使わないようにね。
0512nobodyさん
2006/10/16(月) 10:09:20ID:???pear upgrade PEARとすると、
permission denied (delete): \xampp\php\pear.bat
permission denied (delete): \xampp\php\peardev.bat
permission denied (delete): \xampp\php\pecl.bat
ERROR: commit failed
と言われて、アップデートできません。管理者権限はあるはずなのですが…
何か解決方法はあるでしょうか?
0513nobodyさん
2006/10/16(月) 12:23:22ID:???インストールパス(\xamppだったかな)から
変更するとPEARスクリプトファイル内で
パスが噛み合ってないところが出てきた記憶がある
エラーで出てるパスに実際のファイルがなかったらそういうのかも
pear.batの中のパスとかがちゃんと合ってるか確認してみれ
0514nobodyさん
2006/10/16(月) 15:53:48ID:???例:$a="abcdefghijk" の場合、 ijk を取得したいです。
0516nobodyさん
2006/10/16(月) 18:31:12ID:ecpKZqzB0518nobodyさん
2006/10/16(月) 19:04:54ID:???0519nobodyさん
2006/10/16(月) 19:15:03ID:4Z1hn7GP["Red"] => "Apple",
["Yellow"] => "Banana"
}
array_pop( )って、こういう配列に対応していないのかなぁ。
ファイルポインタがEOFに当たるまで、配列に格納する処理をしているんだけど
最後のEOFまで配列に格納しちゃうから、この関数で要素を削除しようと思っていたんだけど。
0520488
2006/10/16(月) 19:24:41ID:???マニュアルが変だいうことでがってんしました。
実装挙動は別によかったんですけど、
マニュアルと書いてあることと違うようなので、混乱してました。
0521nobodyさん
2006/10/16(月) 19:33:38ID:???$a["aaa"] = "111";
$a["bbb"] = "222";
$a[] = FALSE;
array_pop($a);
var_dump($a);
で結果が
array(2) {
["aaa"]=>
string(3) "111"
["bbb"]=>
string(3) "222"
}
になるんだけど、これじゃいかんのか?
つか、EOFまで配列に入れちゃうロジックも間抜けだと思うけどね。
0522nobodyさん
2006/10/16(月) 19:39:11ID:4Z1hn7GPごめん、EOFなのかは分からないんだけど
[""]=> NULL
になっている。
インデックスが "" で、要素が NULL …。
array_pop( $array ) でvar_dumpすると、
「NULL」が返ってきた。
> 配列 array は、要素一つ分短くなります。
> array が空(または、配列でない)の場合、 NULL が返されます。
配列がおかしいのかな……?
0524nobodyさん
2006/10/16(月) 19:55:10ID:???arrayが空か配列でない場合、戻り値にNULLが返る。
arrayの最終要素の値がNULLだった場合も当然だがNULLが返る。
0525nobodyさん
2006/10/16(月) 19:57:45ID:4Z1hn7GParrayが空ってのは、引数にある変数の型がArrayでは無い場合のことかと思っていた。
じゃあ、こういう場合はどうしたらよいんだろう……。
0527nobodyさん
2006/10/16(月) 20:06:03ID:4Z1hn7GPえっ? 配列が返ってくるのを期待しているのに、NULLが返ってきたら
嫌だと思うでしょう。
とりあえず array_slice( $info, 0, -1 ) でイケました!
0528nobodyさん
2006/10/16(月) 20:12:04ID:cRZeyQ/b大量のincludファイルがあったときに困っています。
includ pathをgrepしたりしていると時間がかかってしょうがないですし・・。
他人のソースを除いてみて、ユーザ関数がどの外部ファイルに書かれているかわからない場合。
どのような方法が一般的なのでしょうか。
環境としてはサーバにあるファイルを直接viでいじっているような環境なので、eclipse等の便利なツールは使えません。
0530nobodyさん
2006/10/16(月) 20:18:31ID:???unset($array['']);のがよくね?
つーか521の言うように、EOFまわりのロジック見直したほうがいいと思うけど。
>>528
なんでgrepで時間がかかるの?
0531nobodyさん
2006/10/16(月) 20:24:16ID:cRZeyQ/bgrepが遅いのはハードのせいでしょうか、大量にありますし。
あとはできるだけ鯖に負荷をかけたくないのです。
grepが一般的なのでしょうか?
0532nobodyさん
2006/10/16(月) 20:32:18ID:???エディタでもなんでも使って見りゃいいし
ファイル名でだいたい想像つくだろ
0533名無しさん@お腹いっぱい。
2006/10/16(月) 22:18:14ID:TSmbOY92インデックス作成コマンドをsystem関数で入力するようにしたいんですけど
うまくいきません。
コマンドプロンプトでインデックスを作るとき
>mknmz -U -O C:\namazu\var\namazu\index "C:\Program Files\Apache Group
\Apache2\htdocs\dir\"
でよいのですが、
system関数では
system("mknmz -U -O C:\namazu\var\namazu\index C:\Program Files\
Apache Group\Apache2\htdocs\dir\");
とすると、mknmzまでしかコマンドを認識していないようなのです。
どなたか正しい指定の仕方をご教示願えませんか?
0535名無しさん@お腹いっぱい。
2006/10/16(月) 22:44:40ID:TSmbOY92"/[Cc]\\|/Program Files/Apache Group/Apache2/htdocs/dir/"
としてみたのですが、同じ結果になってしまいました。。。
0536nobodyさん
2006/10/16(月) 22:55:31ID:???> system("mknmz -U -O C:\namazu\var\namazu\index C:\Program Files\
> Apache Group\Apache2\htdocs\dir\");
> とすると
WindowsのPHPはよくしらんのだけど、
これだと「C:\Program」で切れちゃうんでは?
$cmd = 'mknmz -U -O C:\namazu\var\namazu\index "C:\Program Files\
Apache Group\Apache2\htdocs\dir\"';
system($cmd);
としてもだめなの?
0537nobodyさん
2006/10/16(月) 23:04:13ID:???array_popの戻り値は最初から配列じゃないだろ。
やりたいことはarrayの最後の要素を削りたいって話であって
削った内容がなんであるかなんて気にする必要ないじゃん。
>>529
おまえも分かってない。
0538名無しさん@お腹いっぱい。
2006/10/16(月) 23:19:05ID:TSmbOY92ご指摘の通りでした。ありがとうございました。
0539512
2006/10/17(火) 01:52:14ID:???インストールパスに対するヒントをくださってありがとうございます。
結果的には、XAMPPのインストーラー版をダウンロードしなおし、
デフォルトのパスでインストールしたところ、うまくPEARが動くようになりました。
0540nobodyさん
2006/10/17(火) 02:52:05ID:???他の方が書いた、よく使うクラスやメソッドという認識であってますか?
PHPのフレームワークを使ってみようと思うのですが、
誰でも簡単に使えるものなんでしょうか?
Mapleというものをダウンロードして使ってみよウと思ったのですが、
中にPHPのファイルがたくさんあって、どうしたらいいのかわからなくて・・・
あとPEARはライブラリなんでしょうか?
0541nobodyさん
2006/10/17(火) 05:02:33ID:???SQLインジェクション攻撃の仕方とか、XSS攻撃の仕方とか、
詳しく解説されてるサイトなんてないでしょうか?
もちろん悪用はせず、自鯖で自分が攻撃者になってチェックをするつもりです。
■ このスレッドは過去ログ倉庫に格納されています