トップページphp
1001コメント337KB

【PHP】下らねぇ質問はID出して書き込みやがれ 105

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2011/03/17(木) 04:00:34.11ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 104
http://hibari.2ch.net/test/read.cgi/php/1297669559/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0538nobodyさん2011/04/08(金) 22:46:07.85ID:???
>>537
PeggyPro
0539nobodyさん2011/04/08(金) 22:48:22.30ID:???
>>537
DreamWeaver
0540nobodyさん2011/04/08(金) 22:49:53.20ID:???
秀丸でECCUBEコミュニティ版の開発に貢献してますが何か?
0541nobodyさん2011/04/08(金) 23:00:01.73ID:???
自分で貢献してるとか言っちゃう人ほど迷惑がられてる法則
0542nobodyさん2011/04/08(金) 23:16:05.81ID:???
>>537 SPACE Editor
0543nobodyさん2011/04/08(金) 23:21:52.24ID:???
>>541
貢献してるのは秀丸なんでしょ
0544nobodyさん2011/04/08(金) 23:36:50.31ID:???
>>537
eclipse
0545nobodyさん2011/04/08(金) 23:54:47.66ID:zTYaWkKE
多重ログイン(同じアカウントで別ブラウザからもう一度ログインする)
を防ぎたいと思っています。
ログイン時間をDBなどに保存してチェックをする方法以外に
何か良い方法はないでしょうか?
0546nobodyさん2011/04/08(金) 23:57:20.79ID:???
>>537
恥ずかしいとかwwww
馬鹿じゃないのかなぁ?
恥ずかしいって何?
能率が悪いコーディングしてるなって思われる事?ww

そんな事を言う事が恥ずかしいわww
0547nobodyさん2011/04/09(土) 00:01:41.19ID:???
>>545
UA、IP、クッキー
0548nobodyさん2011/04/09(土) 00:04:18.80ID:???
>>547
UAとは?UserAccount?
>>DBなどに保存してチェックする方法以外に
日本語読めますか?意味わかります?

クッキーwwwwwwwwwwwwwww
0549nobodyさん2011/04/09(土) 00:07:49.62ID:???
>>545=>>548
0550nobodyさん2011/04/09(土) 00:32:07.21ID:???
>>545
「同じアカウント」での多重ログインを防ぐってことは、ログインIDやパスワードが存在するわけで、
つまりアカウントをDB等で管理してるわけだよね。

他のブラウザからの同一アカウントでのログインを防ぐためには、
現在ログイン中のブラウザにログイン中のフラグを持たせるためにクッキーを食わせておけばいい。
他のブラウザでアクセスしようとしたら、ログイン中フラグを持つクッキーが存在しないので
一度強制ログアウトさせてログイン画面へ誘導する。
その際に最初にログインしたブラウザに保存させたクッキーはシステム側で無効にしておく。

ってのが普通の多重ログイン防止処理なんだけど、やっぱりDB等での管理は要るでしょ。
>>547じゃないけど、>>547がクッキーって書いてるのは別におかしくはない。
0551nobodyさん2011/04/09(土) 00:36:09.40ID:???
放射能でおかしくなっちゃったのか、かわいそうに…
05525452011/04/09(土) 00:39:16.34ID:lDu5zS4y
>>550
詳しくありがとうございます。
クッキーを食わせるのは想像が付くのですが、
例えば、ログアウトせずにブラウザを閉じた
ユーザーの場合はどうなるのでしょうか?

ログインの時はセッションで管理してるので
セッション+クッキー(まぁ、同じですが・・・)が正しい場合は続行で、
クッキーしかない場合は強制ログアウトとかでしょうか?
少し設計のイメージが沸きません・・・
0553nobodyさん2011/04/09(土) 00:50:02.87ID:???
俺の頭が悪いのか>>550は実現不可能なことを垂れ流してるようにしか読めん

>>552
あくまで一例だけど、DB使っていいなら、ユーザーマスターに日時項目を持たせて、
ログイン中はIFRAMEのREFRESHでもJavaScriptの非同期通信でもいいから
3分毎にその日時を現在日時に更新
ログイン時に、その日時+3分以上経過していなかったらはじく
05545452011/04/09(土) 00:56:51.13ID:lDu5zS4y
>>553
なるほど。そう言う手もあるんですね。

今はログイン時にログイン時間をDBに記録し、
別ブラウザからログインしようとした場合、
ログイン時間から30分経過してない場合はログインできないようにしてるんです。

ただ、この場合「うっかりブラウザを閉じてしまった」場合でも
30分待たなくてはいけないわけで、ユーザーからクレームが来ないかと心配です。

ログイン時の時間を記録するのではなく、ログインしている間の時間を
定期的に記録するという仕様は良いですね。ぜひ参考にさせていただきます。
0555nobodyさん2011/04/09(土) 01:09:43.98ID:9CNXe0e9
>>550
>>545=>>552ではないが。

>>他のブラウザでアクセスしようとしたら、ログイン中フラグを持つクッキーが存在しないので
>>一度強制ログアウトさせてログイン画面へ誘導する。

@ あるユーザーがいます
A あるサイトがあり、あるサイトの管理画面を利用するにはログインが必要です。
B InternetExplorer でログインして管理画面で糞入力項目が多いところを”必死に入力”します。
C 誤ってFirefoxを立ち上げたら初期画面がそのサイトの管理画面でした。
D InternetExplorer側が強制ログアウトww
E ログアウトを知らないユーザーはFirefoxを「間違えた、邪魔」といって閉じます。
F InternetExplorerでサブミットクリック!!え!!必死になって入力したのに!!

>>552
時間しかないじゃん。
0556nobodyさん2011/04/09(土) 01:10:52.08ID:???
>>554
すでにその仕様でのクレームを心配すべきでしょ。
多重ログイン禁止ってのは、お前よりあとにログインしたブラウザがあるからお前強制ログアウトなって
処理するのもある。  目的はなに?
0557548 5552011/04/09(土) 01:12:49.48ID:9CNXe0e9
開発、辞めたほうがいいよそんな事ここで質問する脳みそなら。
進めど茨の道しかない。
0558nobodyさん2011/04/09(土) 01:15:18.42ID:???
お前もな
0559nobodyさん2011/04/09(土) 01:17:34.81ID:???
>>552
結局DBを使ってよいならググればいくらでも解説は見つかると思うが。
多重ログイン セッション あたりの単語でどうぞ。

基本的には後半に書いてあるとおりでよい。
別のブラウザから同じアカウントでアクセスがあった場合は最初のブラウザのセッションを削除して
新たなセッションを開始すればいい。

注意するのは、最初のブラウザがログイン中は他のブラウザからのログインを不可にすることも可能ではあるが、
そうすると最初のブラウザが強制終了した場合など、ログインタイムアウトが過ぎるまで再起動したブラウザや他のブラウザから
一切ログインできなくなってしまうので不便なシステムとなってしまう。
05605452011/04/09(土) 04:54:23.39ID:lDu5zS4y
>>559さんの投稿を見てからかれこれ3時間以上試しているのですが、
全く上手く行きません・・。他のブラウザで多重ログインできます。

ログイン用のプログラムは↓です。

// セッションを削除
if (isset($_COOKIE['PHPSESSID'])) {
setcookie('PHPSESSID', '', time() - 86400, '/');
}
//セッションを再構築
session_start();
setcookie('PHPSESSID', session_id(), time() + 86400, '/');
// 会員情報をセッションに入れると仮定
$_SESSION['MEMBER'] = $member;
// マイページへ
header('Location:mypage.php');

こんな感じで「最初のブラウザのセッションを削除」して
新たなセッションを開始すると思ったのですが、多重ログイン出来てしまいます。

なにか考え方が悪いんですかね?「PHP 多重ログイン セッション」などで
ググってもこれと言った説明ページが見つかりませんし・・・
0561nobodyさん2011/04/09(土) 07:31:00.98ID:???
> setcookie('PHPSESSID', session_id(), time() + 86400, '/');

session_id() で意図する値が得られていますか?
0562nobodyさん2011/04/09(土) 07:41:13.29ID:???
>>560
君、>>554でDB使うことにしたんじゃないの?

>>559の本意は知らないけど、「最初(のユーザー)のセッションを削除する」ってのは、
後からログインしたユーザーを優先するって意味になるかと思うけど、まずその仕様でいいの?

んで、セッション情報ってサーバー上にファイルとして保存されてるのはわかってるかな?
本気でDB使わずセッションだけでやるなら、サーバー上のセッション情報を検索して
削除とかトリッキーなことになるけど、本気の本気?
0563nobodyさん2011/04/09(土) 08:56:47.01ID:???
おまいら一時的な記憶場所に使う変数名何にしてる?
変数交換とか付け足して最後に返すやつとか

$tmp = $a[0];
$a[0] = $a[1];
$a[1] = $tmp;

$buf = "";
foreach ($a as $value) {
$buf.=$value;
}
$buf.="hoge";
return $buf;

みたいな感じで$tmpとか$bufとか使ってるけど
もっと一般的なもんない?
0564nobodyさん2011/04/09(土) 10:04:06.45ID:???
それが一般的だと思うが$bufはそこでは使わないか
交換なら$swap?
付け足しなら$cat?
0565nobodyさん2011/04/09(土) 11:48:01.59ID:???
$hensuu
$ichiji
$tenporari
$tesuto
あたりかな
0566nobodyさん2011/04/09(土) 11:51:30.52ID:???
>>563 おまいら一時的な記憶場所に使う変数名何にしてる?

質問ならば >>1 を読み返して出直すと良いと思う。
0567nobodyさん2011/04/09(土) 11:56:41.02ID:???
>>566
水を差さずにお前も答えろよ
0568nobodyさん2011/04/09(土) 12:15:42.07ID:???
>>567 お断り
0569nobodyさん2011/04/09(土) 12:17:06.41ID:???
>>568 お断られ
0570nobodyさん2011/04/09(土) 12:57:28.84ID:???
>>565
マジかよw
0571nobodyさん2011/04/09(土) 13:36:48.46ID:???
>>570
何で?
予約語か何か使われてたかな?
0572nobodyさん2011/04/09(土) 18:06:43.41ID:LAXo4B+J
すみません、例外処理について聞きたいのですが

今、例外発生したらエラーコントローラに投げて例外情報に従った処理をするプログラムを書いています
そこで、throw new Exception();で指定できるexceptionの引数って、配列は無理なんでしょうか?

エラー発生時の状況を知らせたいので以下のようにやりたかったのですがエラーになりました
$errMsg = array(
'errType'=>'token_error',
'uId'=>$uId,
'uType'=>$uType,
'file'=>__FILE__,
'line'=>__LINE__
);
throw new Exception($errMsg);

マニュアルやエラーメッセージを見るとException([string $exception [, long $code ]])て書いてあるので
無理なのはわかるんですが、上記のようなエラーの詳細情報を投げたい時はセッションに情報を入れて
エラー処理(エラーコントローラのスクリプト)でセッションを拾って解析&実行するしかないですか?
皆さんどうやっていますか?

ご意見お願いします
0573nobodyさん2011/04/09(土) 18:09:12.18ID:???
継承して自分で作ればいいだろ
0574nobodyさん2011/04/09(土) 19:00:33.83ID:???
>>573
そっか、継承すればいいのか
ありがとうございました
0575nobodyさん2011/04/09(土) 20:02:53.04ID:???
>>573
すみません。>>574は偽者です
継承して自分で作るって、どうやれないいんでしょうか?
0576nobodyさん2011/04/09(土) 20:03:16.76ID:???
×どうやれないいんでしょうか?
○どうやればいいんでしょうか?
0577nobodyさん2011/04/09(土) 20:22:47.86ID:???
継承するだけ
0578nobodyさん2011/04/09(土) 20:32:48.96ID:???
誰が何を敬称すればいいんでしょうか?
0579nobodyさん2011/04/09(土) 20:33:07.06ID:???
×敬称
○継承
0580nobodyさん2011/04/09(土) 20:34:56.50ID:???
あなたがクラスを
05815722011/04/09(土) 20:38:30.66ID:LAXo4B+J
質問した572ですが、>>575は相手しないようお願いします
0582nobodyさん2011/04/09(土) 20:55:00.29ID:???
×>>575
>>574
0583nobodyさん2011/04/10(日) 01:08:44.90ID:???
質問した575ですが、>>581は相手しないようお願いします
0584nobodyさん2011/04/10(日) 03:42:37.21ID:???
>>581
公式読んでおけばアホの相手をしなくて済むんだ
http://www.php.net/manual/ja/language.exceptions.extending.php
0585nobodyさん2011/04/10(日) 10:06:16.88ID:vY8CJ6sh
SQL検索結果のwhile繰り返しの中で、
空の配列変数に値を入れたいのです

$ary = array(1 => "a" , 2 => "", 8 => "" , 9 => "b" , 10 => "")

があるとして、
繰り返し一回目で$ary[2]に代入、二回目で$ary[8]に代入…
という感じにしたいのです

毎回頭から空かどうか検索するのも効率悪そうですし、
なにかシンプルな方法があればご教授お願いします。
0586nobodyさん2011/04/10(日) 10:37:17.11ID:???
while (true) {

}
0587nobodyさん2011/04/10(日) 10:37:56.27ID:???
誤爆
0588nobodyさん2011/04/10(日) 10:50:55.33ID:He2iWruv
simplexmlで、まとめて生データを書き出す方法ありますか?

$xml->name

↑これだとnameタグの部分しか出ませんが、
$xmlに入ってる生データをそのままごっそり出したいんです。

file_get_contentsとかでそのままとってきて吐き出すのはだめです。
xmlオブジェクトを何回か読んであるところまでスキップしてから吐き出したいもので。

お願いします。
0589nobodyさん2011/04/10(日) 11:00:24.23ID:???
>>588
print_rかxpath
0590nobodyさん2011/04/10(日) 11:10:57.39ID:???
>>585
毎回頭から検索じゃなくて前回見つかったインデックス番号を変数に保存しておいて、
そのインデックス+1から空を検索するようにすればいい

てか、そもそもforeachで$aryを検索するなら、勝手にポインタ保存されてるっしょ
0591nobodyさん2011/04/10(日) 11:12:43.46ID:He2iWruv
>>589
ありがとうございます。やってみます
0592nobodyさん2011/04/10(日) 11:35:41.27ID:???
PHP自動アップデートツールがあったらお前ら使いたいですか?
0593nobodyさん2011/04/10(日) 11:40:26.75ID:???
なんのために?
0594nobodyさん2011/04/10(日) 11:49:39.04ID:???
なんのためにって聞く奴はaptとかyumなんて使ったこと無いか手動でソース入れる奴だな
Win環境で自動アップデートできるなら欲しい
0595nobodyさん2011/04/10(日) 11:59:44.13ID:???
なに自演?
そういう意味での自動アップデートなら、既にyumがあるじゃん
windowsならインストーラがあるだろ
定期的にチェックして勝手にアップデートしてくれる機能だったら、馬に食わせるくらいしか役に立たない
0596nobodyさん2011/04/10(日) 12:00:02.32ID:???
関数仕様が変わるのは不便
0597nobodyさん2011/04/10(日) 12:01:25.39ID:???
windowsだとインストーラ使うか?
0598nobodyさん2011/04/10(日) 12:05:16.10ID:???
>>595
欲しいって書いただけで自演認定するカス乙
0599nobodyさん2011/04/10(日) 12:19:06.89ID:???
でも自演は本当なんだろ?
0600nobodyさん2011/04/10(日) 12:26:17.01ID:???
>>592 あったらお前ら使いたいですか?

質問なら >>1 を読み直して出直しですね。
0601nobodyさん2011/04/10(日) 12:28:58.06ID:???
自演認定する奴ってXAMPPはやめろ!とか$_SERVERはやめろ!とか言ってた荒らしと同一人物くさいですね。

荒れるから次の質問どうぞ。
0602nobodyさん2011/04/10(日) 12:38:21.30ID:???
敗北宣言乙
0603nobodyさん2011/04/10(日) 14:35:30.26ID:???
>>601 荒れるから次の質問どうぞ?

質問なら >>1 を読み直して出直しですね。
0604nobodyさん2011/04/10(日) 14:45:18.92ID:???
粘着杉
0605nobodyさん2011/04/10(日) 15:31:36.36ID:???
粘着性杉花粉
0606nobodyさん2011/04/10(日) 16:14:16.40ID:???
粘着宣言乙
0607nobodyさん2011/04/10(日) 16:14:38.89ID:???
自演宣言乙
0608nobodyさん2011/04/10(日) 16:42:41.88ID:???
あれ?
0609nobodyさん2011/04/10(日) 20:31:24.18ID:7H7FFmtv
GDのimagestringを使って画像にコピーライトを載せてるんですが、
20KBくらいの画像が100KB越えになってしまい、古い携帯だと容量越えになってしまいます
容量小さくする方法ありますでしょうか?
それか、他に軽く文字を上に乗せる方法などありましたらご教授ください。
宜しくお願いします。
0610nobodyさん2011/04/10(日) 20:59:41.47ID:???
imagejpgだったら品質を下げるとか。
0611nobodyさん2011/04/10(日) 21:01:43.61ID:???
>>610
回答有難う御座います。
画像のサイズを20KBから10KBに落としたら90KBくらいになりました
処理だけで+80KBくらい上乗せされちゃうのは仕方ないのでしょうか?
0612nobodyさん2011/04/10(日) 21:10:35.93ID:???
>>610が言ってるのはimagejpegでの圧縮レベルを上げろってことだと思うが
http://php.net/manual/ja/function.imagejpeg.php
第三引数にqualityってのあるでしょ
それを見直しな
0613nobodyさん2011/04/10(日) 21:19:04.00ID:???
>>610>>612
ありがとうございます。意味を穿き違えてました。

そのqualityを下げる処理をするために、
header('Content-Type: image/png');
imagepng($im);

header('Content-Type: image/jpeg');
imagejpeg($im);
として吐き出すようにしたら
それだけで90KBから14KBまで縮んでしまいました
png自体がそもそもの原因だったんでしょうか
0614nobodyさん2011/04/10(日) 21:27:50.92ID:???
http://www.htmq.com/gazo/index.shtml
0615nobodyさん2011/04/10(日) 21:32:59.66ID:???
>>613
imagepngの圧縮レベルのデフォルトがあまり高くないんじゃね?

マニュアルには
> 圧縮レベル。0 (圧縮しない) から 9 までの値です。
としか書いてないけど

imagejpegのほうは
> quality はオプションであり、0(品質は最低 ですが、ファイルはより小さい)から100(品質は最高ですが、
> ファイルは 最大)の範囲で指定します。デフォルトは IJG 品質値(75)です。
と書いてるからデフォルトである程度圧縮されてる

header('Content-Type: image/png');
imagepng($im, null, 9);

とかにしたらだいぶ小さくなるんじゃね?
0616nobodyさん2011/04/10(日) 22:11:01.27ID:2E3V6CAL
初心者ですみません。
コンソール画面でPHPを実行(またはcron)し、エラーが返って来た時のみ、特定のメールアドレスにメッセージを送るにはどのような処理を書けばよいのでしょうか?

例えば、次のコマンドをコンソール画面で叩いた場合
# /usr/local/bin/php /path/hogehoge.php
XML_Parser: Invalid character at XML input line 15
と返って来た場合、そのエラー内容をhogehoge@example.comにメールを送ります。
0617nobodyさん2011/04/10(日) 22:22:25.53ID:???
直前のエラーを取得する関数を使ってメール関数を使う
全部標準関数です
0618nobodyさん2011/04/10(日) 23:45:40.01ID:???
学校の宿題ワラタw
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1159440211
0619nobodyさん2011/04/11(月) 02:39:55.53ID:???
>>617
>>616はPHPスクリプトの外でエラーを取得してメールを送りたいんじゃないの?
もっとも、そのPHPスクリプトの中でエラーハンドラを設定すれば済むだろうけど
0620nobodyさん2011/04/11(月) 04:41:29.57ID:???
>>615
なるほどそういう原理なんですね
わかりやすく解説いただき感謝です
0621nobodyさん2011/04/11(月) 09:02:36.85ID:???
>>616はスクリプトの外でエラー取得したいなんて一言も書いてないよ
>>617で正解
0622nobodyさん2011/04/11(月) 11:18:00.40ID:???
>>621
エラーレベルにもよるがエラーによっては直前のエラーを取得することはできない。
0623nobodyさん2011/04/11(月) 11:35:26.41ID:???
エラー内容書いてあんじゃん
>XML_Parser: Invalid character at XML input line 15
0624nobodyさん2011/04/11(月) 12:46:19.04ID:???
「例えば」という文字が読めないようですね
0625nobodyさん2011/04/11(月) 12:52:57.75ID:???
次の質問受付中
0626nobodyさん2011/04/11(月) 13:12:31.34ID:???
いいよもう質問しなくて
0627nobodyさん2011/04/11(月) 13:17:55.00ID:???
>amachang 今粛々と民事刑事の方面で進めています。一応、すべて証拠として保存しなければいけないので、冗談でも今はこのスレに変なこと書き込まないでください。
>2011/01/28


http://hibari.2ch.net/test/read.cgi/prog/1291518728/

>1 :amachang撲滅振興協議会:2010/12/05(日) 12:12:08
> amachangが憎い・・・・amachangが許せない・・・・

> ククク・・・・クククククク・・・・・
> クックックックックックックッ・・・・・
> クー、クー、クー、クー、クー、クー・・・・・
>
> もう許せない。
> もはや沸き上がる滅意を抑えることが出来ない!!!
0628nobodyさん2011/04/11(月) 14:00:48.95ID:???
cronで実行されたものの標準出力および標準えらー出力の内容は、そのcronのownerに対してメールで送信されるよ
0629nobodyさん2011/04/11(月) 14:16:22.95ID:???
mailtoだっけ
0630nobodyさん2011/04/11(月) 15:12:50.57ID:???
>>616 の質問に答えようと思ったら、
>>628 で答えが出ていた…orz
0631nobodyさん2011/04/11(月) 16:58:26.84ID:???
何でそんなことをわざわざ言うの?
俺答え知ってるぜーって自慢したいの?
0632nobodyさん2011/04/11(月) 17:23:34.54ID:???
自演に構うな
0633nobodyさん2011/04/11(月) 17:29:22.88ID:???
自演には見えんが
0634nobodyさん2011/04/11(月) 17:44:14.67ID:???
しつこいよ
06356282011/04/11(月) 18:11:57.93ID:???
>>629
補足ありがとう。MAILTO変数のこと忘れてた。
0636nobodyさん2011/04/12(火) 02:11:31.31ID:???
突然すみません。
PHPの教科書という本を終えて、さらにwebプログラミングについて学びたいと考えているのですが、フレームワークやCGI等、具体的にどんなことを勉強すればいいのか見えてこず困っています…。
皆さんは駆け出しプログラマのとき、どのように知識を増やしていきましたか?聞かせていただけると嬉しいです。
0637nobodyさん2011/04/12(火) 02:48:56.55ID:???
PHPはwebプログラミングじゃないと思うぞ。
ネットワークに手軽にアクセス出来るスクリプト言語だろ。
■ このスレッドは過去ログ倉庫に格納されています