【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カテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0403nobodyさん
2006/10/14(土) 09:01:08ID:???英数字だけをとりだしたいのですが、
いい方法はありますか?
はじめは以下のようにやっていたのですが、
文字の組み合わせによって余計な文字が出てくる場合があります。
preg_replace('/[^\w]/', '', $str);
mb_eregi_replace を使ってみたのですが、
使い方があっていないのかうまくいきません。
0404400
2006/10/14(土) 09:01:33ID:???あと文字列もクラスじゃない。
JavaやC#だったら、インテリセンスでメソッドが出てくるが、
PHPだとそうはいかない。それがだるい。
0406nobodyさん
2006/10/14(土) 09:12:30ID:???文字列をわざわざクラス化!?w
だったらC++やJavaで整数がなんでクラスじゃないのか説明してみなよ。
それはダサくないのかね?
0407400
2006/10/14(土) 09:17:31ID:???とにかくインテリセンスがきかんのがうざい。
インテリセンスでクラスのメソッド名が出てきたら、
だいたい該当するのはどれなのかわかる。
PHPは、いちいち調べるのがめんどい。
タイポする可能性も増える。
しかも型もコンパイルないからエラーにならんし。
つーか、こんな言語愛用してるのは糞だ。死ね!
0408385
2006/10/14(土) 09:18:49ID:53yXNDSa>>390さんの通り、サーバに置いてある画像の絶対パスは隠しておきたいのです。
headerのcontent-typeとreadfileでどのようにやるんでしょうか。
よろしければヒントお願いします。
0410nobodyさん
2006/10/14(土) 09:28:56ID:???お前がそう思ってるならそれでいい。
糞だと思うなら使わなきゃいいし、このスレを見る必要もない。
もう来るなよ。
0413400
2006/10/14(土) 09:47:59ID:???じゃあ、おめぇこそ説明しろ。
文字列や配列がクラスなら、整数もクラス化しておいてもいいんじゃないかという意味を。
てか、C#じゃ整数もクラスだがな。でも、実際四則演算ばかりだから意識もしない。
むしろJavaみたいにプリミティブ型とクラスで分かれてる方が、色々うざい。
0415nobodyさん
2006/10/14(土) 10:00:02ID:???ありがとう。
0416400
2006/10/14(土) 10:02:19ID:???俺の煽りも今ひとつだったし、そもそもみんなまだ寝てるか。
0417nobodyさん
2006/10/14(土) 10:15:23ID:lXZlr1go0418nobodyさん
2006/10/14(土) 10:59:38ID:???オブジェクトだと確かに便利だと思った
PHPユーザは純OOな言語もやっておくと
PHPの良さ/悪さに理解が深まると思う
ただPHPはスタートがOO言語じゃないし
もう全部関数でいいじゃんみたいな発想から
スタートしてるからこれOOじゃねーって言っても
根本の設計思想から違うから仕方がない
インテリセンスがきかないってのは
eclipseなりZSなりのIDE使えば問題なし
あとsplでArrayObjectもIteratorも一応ある
0419400
2006/10/14(土) 11:31:31ID:???もれが言いたかったのは、クラスだったらオブジェクト変数書いて、
その後に->って書いたらメソッドの候補が出てくるでしょ?
でもクラスじゃなかったら、そうはならないから、めんどいってこと。
PHPの良いとこは、O/Rマッパー作らんで良いことかな。
selectの結果が連想配列で返ってくるのは便利。
型もないから、いらんこと気にしなくて良い。
0420nobodyさん
2006/10/14(土) 12:12:02ID:???マジやん
おお、
0421nobodyさん
2006/10/14(土) 13:06:48ID:???演算子が使えないけどな!
0422nobodyさん
2006/10/14(土) 13:07:22ID:???0424nobodyさん
2006/10/14(土) 13:15:25ID:mRs0+tI4SESSIONとしてObjectをキープしたいときって、session_startの前に
そのObjectが書かれたファイルをincludeすればいいのはわかってたんだけど、
そのObject内部にある入れ子のObjectってSESSIONとして保存されてないの??
今そんなプログラムを作ってて、Object経由で入れ子のObjectの関数呼び出したんだけど、
Call to a member function searchPage() on a non-object
とのこと。
原因または対策のわかる方いらっしゃったら教えてください
0425nobodyさん
2006/10/14(土) 13:23:45ID:???そのObjectに格納されてるObjectってのが、実体じゃなくリファレンスを格納してるんなら
当然のようにセッションには記録されないと思います。
リファレンスの本体はデータの外部にあるわけですから。
で、多くの場合、そういう構成になってるのではないでしょうか。
何とかして実体も一緒にセッションに格納されるようにすれば解決するんじゃないのかなぁ。
0427nobodyさん
2006/10/14(土) 13:43:45ID:mRs0+tI4でも実態を入れてるつもりなんですが・・・
object内部のfunctionで
function detail($post){
switch($post['dType']){
case 1:
$this -> DetailChartObjArr['a'] -> searchPage($a,$b);
break;
default:
$this -> DetailChartObjArr['a'] = new DetailChartObj();
break;
}
って感じのを作ってて、defaultのすぐ後にprint_rすると、DetailChartObjArr['a']は表示されるんだけど
case 1のあとにprint_rさせても何も表示されないし・・・
どうして?
0428nobodyさん
2006/10/14(土) 14:04:52ID:???0429nobodyさん
2006/10/14(土) 14:09:24ID:mRs0+tI4でそのオブジェクトにはsearchPageというfuctionがあってそれを実行させてる。
0430nobodyさん
2006/10/14(土) 14:25:01ID:???case 1の時にDetailChartObjArr['a']に
中身があるのは保証されているのかよくわからんし
0431nobodyさん
2006/10/14(土) 14:39:10ID:mRs0+tI4一応defaultのときにnewでObjectが作成されていて、
case 1でそのObject内部のFunctionが実行されてるってことは、
表現できてると思ったんだけど。
その保証されてるか否かってのが、何か気になる。
ひょっとしたらそこにオレの問題点が有るってことかな?
0432431
2006/10/14(土) 14:49:59ID:mRs0+tI4DetailChartObjArrの属性をpublicにしてSESSIONを出力してみたら、
とりあえず保存はされてるみたい。
他に何か原因が有るか考えてみます。
お騒がせしました
0433nobodyさん
2006/10/14(土) 15:25:49ID:???そのつくりだと、必ずdefaultがcase 1のまえに実行されるようには見えないから、
>中身があるのは保証されているのかよくわからんし
ということになる。
つくりを見直したほうがいい。
0434nobodyさん
2006/10/14(土) 16:08:25ID:???ログインシステムで、一人しかログイン出来ないように
ログインの重複を拒否したいんですが、どうプログラムを書けばいいんでしょうか?
0435nobodyさん
2006/10/14(土) 16:24:35ID:???ログイン処理
$logged=true;
}
0436nobodyさん
2006/10/14(土) 17:37:45ID:???loggedという関数がある訳ではなくて、単に変数をフラグのように扱ってるんですよね?
PHPってユーザーの数だけスクリプトが動くから、それでは意味がないと思っていたんですが
PHPの変数ってサーバで共有でしたっけ・・・
0438nobodyさん
2006/10/14(土) 17:50:26ID:???0439nobodyさん
2006/10/14(土) 17:55:48ID:???0440nobodyさん
2006/10/14(土) 18:01:22ID:???ログイン時にフラグを上げ、ログアウト時にフラグを下げるんですよね?
ブラウザを落とされたときはどう判定すればいいんでしょうか・・・
JSを使えば出来そうな気がするんですが、
PHP単体ではサーバでひとつだけ動く変数やスクリプトを作る機能はないんでしょうか?
0441nobodyさん
2006/10/14(土) 18:15:04ID:???ログイン成功時にセッションを開始して
DBに書き込んで次からのログインを防いで
ログアウト時にDBのフラグを下げる。
ブラウザを落とされたときのためにタイムアウトを設定して
時間が経てば勝手にDBのフラグを下げるようにすればいいんですね
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が違うとファイルを作成・削除できない。
■ このスレッドは過去ログ倉庫に格納されています