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

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

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

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

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0697nobodyさん2011/07/17(日) 00:15:50.64ID:Vl6SLvCj
クラス作ってnewすれば何でもOOPか
おめでてーな
0698nobodyさん2011/07/17(日) 00:44:01.64ID:???
OOPならAjaxでマスターできるよ
0699nobodyさん2011/07/17(日) 00:59:38.66ID:???
>>693
ゲラゲラ笑うべきところ

( ^∀^)ゲラゲラ
0700nobodyさん2011/07/17(日) 02:14:39.73ID:???
          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /     |r┬-|    | (⌒)/ / / //
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/  あーひゃっひゃっひゃひゃwwwwwwwww
|     ノ     | |  |   \  /  )  /   あーひゃっひゃっひゃひゃwwwwwwwww
ヽ    /     `ー'´      ヽ /    /        アッーーーーwwwwwwwww
 |    |   l||l 从人 l||l      l||l 从人 l||l  バンバン
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
0701nobodyさん2011/07/17(日) 05:24:56.71ID:???
 
 おはよぉ〜

 おねぇさん、3連休の初日なのに徹夜明けだよぉ〜

 さて、どんな質問が残ってるのかな?

 徹夜明けの帰宅途中だから、家に帰ってから質問に答えるね。
 
0702nobodyさん2011/07/17(日) 09:04:58.49ID:???
>>701
いつも答えてないじゃない
0703nobodyさん2011/07/17(日) 11:37:51.27ID:???
>>701
おなぬーは週に何回ですか?
0704nobodyさん2011/07/17(日) 11:59:47.02ID:???
>>703

>>1
0705nobodyさん2011/07/17(日) 15:20:29.72ID:???
1回ですか・・・
0706nobodyさん2011/07/17(日) 18:58:11.83ID:0h0D0Wjo
文字コードで悩んでおります
php.iniの設定でmbstring.http.outputをSJISにすると、
いくらhoge.phpのヘッダにutf-8を記述しても、ブラウザではShift-JISになってしまいます
nkfで文字コードを見ても、UTF-8って表示されるんだけど、
php.iniのmbstring.http.outputで設定されてる値が優先されるんでしょうか?
だとしたら、phpファイル上で、文字コードを宣言するのは全く無意味な気もするんですが・・・

ちなみに、PCサイトとモバイルサイトで分けていて、モバイルサイトはShift-JISで表示したいし、
PCサイトはUTF-8で表示させたい。
ヘッダで宣言して作り分けようと思ってたのですが、上記のような問題にぶつかってしまっています
0707nobodyさん2011/07/17(日) 19:09:35.21ID:???
どうせ英数字しか書いてないんだろ
0708nobodyさん2011/07/17(日) 19:33:20.59ID:???
混乱してるようにしか思えないな
日本語で書くよりソースと設定貼ってくれ
0709nobodyさん2011/07/17(日) 19:57:47.82ID:yNBJt+VA
最後にアクセスしてきたURLに処理が終わったら飛ばすということをしているのですが、
想定外(URLの直接入力)もあるので、そのまま出力するとXSSになると思います。
そこでURLにhtmlspecialcharsやurldecodeをかけてみましたが、
URLが壊れて正しい場所に戻せませんでした。
たぶん&が&や%26になるのが原因だと思いますが、
こういうことをするのに何か他に最適な関数はありませんでしょうか?
もし手動で戻さなければならない場合、
どの関数を使ってどの文字を戻すか教えていただけると嬉しいです。
0710nobodyさん2011/07/17(日) 20:18:37.93ID:???
>>706
出力文字コードをShift_JISにして、ヘッダでUTF-8指定するって、文字化けさせたいんか
0711nobodyさん2011/07/17(日) 20:21:45.95ID:0h0D0Wjo
>>708
ソースは
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>hogehoge</title>
</head>
<body>
<?php echo "hogehoge"; ?>
</body></html>

phpinfoの設定は、
default_charset UTF-8
mbstring.detect_order UTF-8,SJIS,EUC-JP,JIS,ASCII
mbstring.encoding_translation On
mbstring.http_output SJIS
mbstring.internal_encoding UTF-8
mbstring.language Japanese

metaタグに文字エンコードをUTF-8に、ファイルもnkfでUTF-8になっていてもブラウザ上ではShift_JISになってしまいます。
mbstring.http_outputをUTF-8に変更すると、metaタグの内容にかかわらずUTF-8になります。
0712nobodyさん2011/07/17(日) 20:25:29.56ID:0h0D0Wjo
>>710
そうですよね・・・。UTF-8で表示させたいなら、mbstring.http.outputをUTF-8に
すれば解決なんですが、そうすると携帯用ページで文字化けが起きてしまいます。
そこだけ、.htaccessとかでShift_JISの出力にすればよいのでしょうか
ディレクトリ単位で設定かえられましたっけ?それともファイル毎に入れ込むのでしょうか?
0713nobodyさん2011/07/17(日) 20:52:14.89ID:???
悩みどころがわからない
携帯とPCの文字コード分けるのは普通だし
同じ場所から同じ変数をとってきて表示させる場合でも
その変数をmb_convert_encodingすればいいだけの話
0714nobodyさん2011/07/17(日) 21:16:34.27ID:???
>>712
http://php.net/manual/ja/apc.configuration.php
この辺見ればどのタイミングまで設定できるか書いてあるよ
0715nobodyさん2011/07/17(日) 22:12:17.92ID:???
>>711
mbstring.http_outputはpassのまま使え!
プログラム内で変換すれば充分だから余計なことで悩まなくて済む
0716nobodyさん2011/07/17(日) 22:14:24.20ID:???
>>711
mbstring.encoding_translationも"0"にしとけよ!
0717nobodyさん2011/07/17(日) 22:22:00.29ID:0h0D0Wjo
みなさん、レスありがとうございます

>>713
文字コードを分けるというのは、phpファイルごとに
mb_http_output('SJIS');
と入れるってことでしょうか?
とりあえず、mb_http_output('SJIS');とmb_http_output('UTF-8);で
思うように振り分けて表示させることはできました

>>715
passに設定すると、ファイルそのものの文字コードで表示されるのでしょうか?
それともmb_http_output('SJIS');のように各ファイル毎に記述する必要gああるということでしょうか?
既に結構のphpファイルを作ってしまっていて、変数毎に変換というのは正直つらいものがあります・・・
0718nobodyさん2011/07/17(日) 22:30:02.10ID:???
passで変換されずに出力されるから、ファイルの文字コードを全部UTF-8にしときゃいい
default_charset=UTF-8ならHTTPヘッダでUTF-8が指定される。meta要素いらん
今時の携帯にShift_JISとか使わなくていいよ
0719nobodyさん2011/07/17(日) 23:02:56.81ID:???
>>715
情弱乙
それは開発環境のみの話な
本番でそんな事したら危険だよ
0720nobodyさん2011/07/18(月) 02:09:58.56ID:B6IhzFZp
例外って↓こういうのの代わりに使って大丈夫ですか?

function test($n) {
 if (!$n) {
  echo "引数が違う";
  return false;
 }

 if ($n > 5) {
  echo "なんか違う";
  return false;
 }

}

0721nobodyさん2011/07/18(月) 02:12:27.74ID:???
>>720
別に好きなように使ってOK
0722nobodyさん2011/07/18(月) 02:40:54.96ID:???
>>720
まさにその為の例外が用意されている
http://www.php.net/manual/ja/class.invalidargumentexception.php
0723nobodyさん2011/07/18(月) 02:44:29.30ID:???
関数で例外とかやめろ
try 書くのを強制するのか?
0724nobodyさん2011/07/18(月) 02:46:48.74ID:???
えっ
0725。 ◆oDupeixhZv52 2011/07/18(月) 08:48:29.54ID:OhzoRm/E
>>719
どういう危険があるのか教えてください。
0726nobodyさん2011/07/18(月) 09:13:16.43ID:???
>>725
去年のカンファレンスに参加してないの?
http://www.slideshare.net/ockeghem/ss-5283574
0727nobodyさん2011/07/18(月) 09:28:35.58ID:???
>>726
それってヘッダに書けって話じゃないの?
0728。 ◆oDupeixhZv52 2011/07/18(月) 09:33:25.45ID:???
>>726
参加してません。参加してないと知りえない内容でもないでしょうに。
で、どう危険で何すると安全なのですか? mbstring.http_outputで。
0729nobodyさん2011/07/18(月) 09:37:37.20ID:???
あれ、おかしいなurl先見たらそんな質問するはずないんだけどな
0730nobodyさん2011/07/18(月) 09:40:04.97ID:OuXEBLnC
>>729
見た上で質問します
是非解説してください
0731nobodyさん2011/07/18(月) 09:43:03.62ID:???
じゃあ分かるまで読むしかないね
0732nobodyさん2011/07/18(月) 09:43:13.34ID:???
俺は全部の処理に
htmlspecialchars(mb_convert_encoding($str, $charset, 'auto'), ENT_QUOTES);
してるから問題ない
0733nobodyさん2011/07/18(月) 09:44:40.95ID:???
>>731
正直に理解できてませんって言えば?
0734nobodyさん2011/07/18(月) 10:19:07.21ID:???
またコミュ障か
妄想とか曲解が大好物なんだろうな
0735nobodyさん2011/07/18(月) 10:21:10.53ID:???
ああ、>>726,>>729の事な
0736nobodyさん2011/07/18(月) 10:27:05.04ID:???
悔しい奴ってすぐ人格否定に入るから分かりやすいw
0737nobodyさん2011/07/18(月) 13:30:45.05ID:???
悔しい奴?
0738nobodyさん2011/07/18(月) 13:36:31.41ID:xsH9/6rp
警告をエラーとして扱う方法ありますか。
警告で実行を中断したいのですが。
0739nobodyさん2011/07/18(月) 13:53:54.27ID:???
>>726
inputにUTF-8、outputにpass指定しろ と書かれているように見えるのだが?
0740nobodyさん2011/07/18(月) 15:01:46.85ID:???
>>726のP37で脊髄反射レスしてるんじゃない?
UTF-8として保存したものを改めて mb_convert する意味なんてないのに
0741nobodyさん2011/07/18(月) 15:13:44.28ID:???
>>926は様々なデータが来る可能性のある入力値の話
>>711はソース中にある文字を echo してるだけなんだから文字コードは自明
携帯電話用に UTF-8 → Shift_JIS の変換が必要なだけだ
0742nobodyさん2011/07/18(月) 15:16:08.64ID:???
>>738
set_error_handler
0743nobodyさん2011/07/18(月) 15:22:27.50ID:???
携帯でももうShift_JISはやめとけ
0744nobodyさん2011/07/18(月) 16:43:08.41ID:gEfwcIht
皆さんレス感謝です
手持ちの参考書には、第3引数で文字コードを指定するとまではなかったので
>>726もすごく勉強になりました。
>>718>>741
基本UTF-8で取り扱って、携帯用のページのみShift_JISに変換して出力というかたちが
良いようですね。
>>743
サービス上、auユーザも対象にせざるを得なくて、UTF-8だけにしぼれないんですよね・・・

Shift_JISへの変換は、出力する変数毎に処理したほうがいいのでしょうか?
それともmb_http_output('SJIS');としておくのがよいのでしょうか?
0745nobodyさん2011/07/18(月) 17:35:20.52ID:???
>>744
俺は一つの変数にまとめて echo mb_convert_encoding($html 'SJIS', 'UTF-8'); にしてる

> 手持ちの参考書には、第3引数で文字コードを指定するとまではなかったので
参考書を使うなとまではいわないが、マニュアルも読もう
http://php.net/manual/ja/function.mb-convert-encoding.php
0746nobodyさん2011/07/18(月) 17:38:58.96ID:???
それじゃなくてhtml〜の方だろ
0747nobodyさん2011/07/18(月) 17:42:48.67ID:???
http://php.net/manual/ja/function.htmlspecialchars.php
0748nobodyさん2011/07/18(月) 17:44:30.23ID:???
mb_convert_encodingの第三引数にauto指定しちゃいけないの?
明示的にしたほうが早いから指定してるだけ?
0749nobodyさん2011/07/18(月) 17:51:46.92ID:???
何でくるかわからないpostとかgetとかになら良いんじゃない
普通は内部エンコーディング指定して省略するとおもうけど
0750nobodyさん2011/07/18(月) 17:56:46.32ID:???
>748
autoにすると、予期しない順でエンコードしようとする時がある。
ブラウザでも、時々日本語エンコード指定してるのに、勝手に西ヨーロッパにしやがって化け化けじゃい!って事無いかな?
0751nobodyさん2011/07/18(月) 18:05:25.01ID:mQmm7Nt1
まずパソコンからのアクセスか携帯かどうかで切りかえる。
で、携帯の場合のみ、shift-jisにする
0752nobodyさん2011/07/18(月) 20:28:27.86ID:???
UTF-8だと、auはform使った時に化けるんか
0753nobodyさん2011/07/18(月) 23:32:35.29ID:dgUsdPB0
テキストデータの文字列の最後行の2列目を取り出したいのですがどうやるのでしょうか?
行数は固定でなく増えていく感じです
0754nobodyさん2011/07/18(月) 23:52:19.35ID:???
>>753
file_get_contentsとか使って適当にやればいいんじゃないっすかね
0755nobodyさん2011/07/18(月) 23:55:30.72ID:???
<?php
$file = array("a","b","c");
echo end($file)."\n";
echo prev($file)."\n";
?>

<?
for($i=count($file)-1;$i>=count($file)-2;$i--)echo $file[$i]."\n";
?>
0756nobodyさん2011/07/19(火) 00:50:01.20ID:???
結局全部読み込むんだw
0757nobodyさん2011/07/19(火) 00:56:37.08ID:???
まぁ普通そうだよな
0758nobodyさん2011/07/19(火) 00:59:25.69ID:???
気になるならtailでも何でも使えよ
0759nobodyさん2011/07/19(火) 00:59:30.72ID:???
読み込むんだったらarray_sliceで十分ではw
0760nobodyさん2011/07/19(火) 01:00:01.12ID:???
tail lol
0761nobodyさん2011/07/19(火) 01:05:50.13ID:???
$file = escapeshellarg($file);
echo `tail -n 2 $file`;

すばらしい
0762nobodyさん2011/07/19(火) 02:18:36.73ID:???
tailは便利だけどOS依存になるな
0763nobodyさん2011/07/19(火) 02:27:07.19ID:???
printでよくね
0764nobodyさん2011/07/19(火) 02:29:09.89ID:???
http_outputはpassにするなよ情弱
0765nobodyさん2011/07/19(火) 03:17:13.08ID:???
そんなに悔しかったんか?
間違いは誰にでもあるし気にしなくていいと思うよ
0766nobodyさん2011/07/19(火) 05:32:11.56ID:???
 
 おはよぉ〜

 おねぇさん、3連休は寝てばかりでした。

 ちょっとムラムラしたけどPHPでプログラムしたら賢者モードです。

 さて、どんな質問が残ってるのかな?

 今日は、これから仕事だから夜にお返事しますね。
 
0767nobodyさん2011/07/19(火) 09:36:50.72ID:???
>>765
そうだなAjaxだよな
0768nobodyさん2011/07/19(火) 09:59:31.42ID:???
>>765
また反応する自称自治厨さんのあなたにも飽きた
0769nobodyさん2011/07/19(火) 10:23:39.49ID:???
そんなに悔しかったんか?
間違いは誰にでもあるし気にしなくていいと思うよ
0770nobodyさん2011/07/19(火) 18:15:17.41ID:???
>>769
そうだなAjaxだよな
0771nobodyさん2011/07/19(火) 19:22:21.19ID:???
Ajaxアンチ氏ね
0772nobodyさん2011/07/19(火) 19:32:47.29ID:???
AjaxアンチとはアンチAjaxのことでしょうか。
0773nobodyさん2011/07/19(火) 19:40:11.92ID:???
郷に入っては郷に従えってやつだ。
2ちゃんでは○○アンチって書き方するやつ結構いる。
0774nobodyさん2011/07/19(火) 19:47:36.27ID:???
アンチAjaxの逆じゃね?
0775nobodyさん2011/07/19(火) 21:32:33.41ID:???
ウンチAjax
0776nobodyさん2011/07/19(火) 21:57:47.99ID:???
俺家に帰ったらウイルスソフトアンチを入れるんだ…
0777nobodyさん2011/07/19(火) 22:05:36.11ID:H2wEVeOH
ログインページで質問させてください
ログインIDとパスワードを入力させる画面はhttpsで表示させるっていコラムは
良く目にするんだけど、ログイン後のページも当然httpsで受けますよね。
ログイン後は、サーバーの負荷を落としたいので非SSL通信でやりとりさせたい場合、
どうやるべきでしょう? 遷移先のアドレスにhttp://とするのもなんかスマートじゃないし、
ログイン直後のページからhttpで別のページに移動させるのも利用者に手間になるかなと。
なにか良い方法はないでしょうか?
現状はログイン先のページに、Locationでhttpのアドレスを仕込んだphpからメインページに飛ばしてます
0778nobodyさん2011/07/20(水) 01:56:45.29ID:???
セッションハイジャックされたいならお好きにどうぞ
0779nobodyさん2011/07/20(水) 03:13:52.76ID:VmDOJwn+

if ($xml->res->status !== 'success') {
 echo "failed : ". $xml->res->status;
}

↑これで success の時 "failed : success" とでるんですがなぜでしょうか?
dumpの結果は ["status"]=> string(7) "success" です

↓これだと正常になります
if ($xml->res->status != 'success') {
0780nobodyさん2011/07/20(水) 03:53:15.05ID:???
>>779
> dumpの結果は ["status"]=> string(7) "success" です
var_dumpの対象と結果を省略せずに書いてごらん。
0781nobodyさん2011/07/20(水) 04:39:54.48ID:VmDOJwn+
>>780
すみません

object(SimpleXMLElement)#2 (1) {
["res"]=>
object(SimpleXMLElement)#3 (2) {
["aaa"]=>
object(SimpleXMLElement)#4 (1) {
["bbb"]=>
object(SimpleXMLElement)#5 (0) {
}
}
["status"]=>
string(7) "success"
}
}

です。(string) $xml->res->status !== で正常になりました。
さっきは出なかったんですが (string)外して !== とすると
PHP Notice: Trying to get property of non-object と出てます。
0782nobodyさん2011/07/20(水) 05:59:04.96ID:???
>>781
何が聞きたいのか分からないけど一応それはnullだから
0783nobodyさん2011/07/20(水) 06:39:09.27ID:???
>>781
http://www.php.net/manual/ja/simplexml.examples-basic.php#example-4646
マニュアル読もう、な!

=== は型を含めた厳密な比較
http://php.net/manual/ja/types.comparisons.php
0784nobodyさん2011/07/20(水) 07:35:50.26ID:zYakDDbO
>>778
では、ログイン処理をするサイトはログイン後すべてhttps通信すべきってことなんでしょうか?
大手の動画サイトとかログインすると、http通信に戻っているようなのですが
一般的にはどうなのでしょうか? 
0785nobodyさん2011/07/20(水) 07:36:36.78ID:VmDOJwn+
>>782
なるほど

>>783
ありがとうこざいます。
var_dumpでstringでも違うんですね
これからはしっかり読むようにします。
0786nobodyさん2011/07/20(水) 07:37:02.14ID:???
>>785
なるほどて
0787nobodyさん2011/07/20(水) 08:00:47.33ID:???
本来の>>779の質問とは関係なかったからだろw
0788nobodyさん2011/07/20(水) 16:47:53.77ID:???
やべぇ。今までpreg_を/uなしで使ってたぜよ。
0789nobodyさん2011/07/20(水) 18:00:16.12ID:???
>>785
いや、var_dumpの結果が object(SimpleXMLElement)#5 (0) になってるでしょ。
つまり文字列stringじゃなくてobjectで返ってきてるの。
==で比較するとstringへ自動変換されて"success"となるけど
===の比較だとstringとobjectで型が違うから駄目なの。
0790nobodyさん2011/07/20(水) 18:12:24.76ID:???
またhttp_outputさんか
0791nobodyさん2011/07/20(水) 18:46:18.57ID:hYBwtF7i
自分もまさに>>784の話が最近の疑問だよ
mixiもログイン後、日記やつぶやきはともかくプロフィール変更まで
httpで処理してるのが気になる
httpsで遷移させてるのはログインIDとログインパスワードの変更だけみたいで…

それがそのサイトのポリシーなんだから自分も好きにしろって理屈はわかるんだけどね
最近のTwitter連携サービスなどのOauth認証->アカウント作成&ログインってフローを見ると
SSLって昔よりも使う箇所どんどん減ってきてるのかな?
0792nobodyさん2011/07/20(水) 19:01:59.91ID:???
>>787
分かった。質問形式になってないやつは二度と答えないわ
0793nobodyさん2011/07/20(水) 19:02:30.50ID:???
>>789
$xmlはオブジェクトだけど
$xml->res->statusは文字列じゃないの?
0794nobodyさん2011/07/20(水) 19:13:09.66ID:???
>>791
セッションハイジャックされてもいいけど漏洩は避けたいんだろうな
中途半端だと思う
0795nobodyさん2011/07/20(水) 19:29:17.31ID:???
セッションIDとIPの照合じゃだめ?
0796nobodyさん2011/07/20(水) 21:46:13.28ID:???
>>794
>セッションハイジャックされてもいいけど漏洩は避けたい

やっぱりそういうことですよね? なんでこんな形の処理にしてるんだろう
セッションが盗まれてもデタラメの日記の投稿とかが出来ないような
対策がとられてるのかな? どんなことしてるんだろう
でもヤフーのログイン処理もその後はほとんど全部httpだし…
どこでhttp/httpsの線引きしたらいいのか、わからないなぁ
■ このスレッドは過去ログ倉庫に格納されています