【PHP】下らねぇ質問はID出して書き込みやがれ 132
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2014/01/20(月) 06:23:11.66ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 131
http://kohada.2ch.net/test/read.cgi/php/1384065969/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.5
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0552548
2014/03/11(火) 13:44:14.46ID:knsPq3quエスケープする場所を移動させるだけと思っているようで、事前にエスケープすると入れる情報の長さもかわることになるので
設計部分から見直す必要性があることもわかっていないようで困っておりました。
0554nobodyさん
2014/03/11(火) 13:55:46.79ID:???データベースを別のコードでも使うときなどのために変換済みをいれておいたほうがいいことがある。
0555nobodyさん
2014/03/11(火) 14:04:17.06ID:???むしろ、こっちの理由を聞いてみたい。
その他人とやらにおいて、何か合理的な理由があるのだろうか。
0556nobodyさん
2014/03/11(火) 14:07:00.88ID:???0558nobodyさん
2014/03/11(火) 14:15:02.96ID:???バイナリデータなどでやったらデータが破壊される。
0560nobodyさん
2014/03/11(火) 14:19:24.04ID:???0561nobodyさん
2014/03/11(火) 14:20:25.47ID:???0562nobodyさん
2014/03/11(火) 14:20:56.79ID:???なぜならhttp経由のみで使うとは限らないからである
htmlspecialcharsを入れとけばエスケープ忘れがあっても安全という主張があるが
html出力時にDBから取り出したデータにhtmlspecialcharsを挟むという
PHPのデファクトスタンダードが通用せず第三者からみたらとても不思議で一見まずいコードに見える
このような不思議な仕様にすべきでない
0563nobodyさん
2014/03/11(火) 14:24:37.63ID:???バイナリデータに対して出力で変換したら壊れる。
0564nobodyさん
2014/03/11(火) 14:27:32.76ID:???アホなこといってんじゃないよ
バイナリデータにhtmlspecialcharsなんて使うわけないだろ
つうか画像ならGDとかに突っ込んだり
そのまま出力するにしてもヘッダで指定すんだろ
プレーンテキストとは扱いが違う
0565nobodyさん
2014/03/11(火) 14:33:13.69ID:???二重にエスケープされる可能性があるから、まずいんだよね。
たとえば、'&' (アンパサンド) は '&' に変換される。
これをもう一度エスケープすると、 '&'になって、
'amp;'という不要な文字がブラウザに表示されてしまう。
0566nobodyさん
2014/03/11(火) 14:34:37.26ID:???XSS等がおきた時の責任逃れをしたいっていう感覚をヒシヒシと感じる
0567nobodyさん
2014/03/11(火) 14:34:57.80ID:???場所だけを記しておくよな
0568nobodyさん
2014/03/11(火) 14:40:07.10ID:???< と < は、 double_encodeの設定で < < もしくは < &lt; のどちらかになるにせよ
htmlspecialchars_decode すると < と < になってしまう。
0569nobodyさん
2014/03/11(火) 14:53:05.09ID:???sanitized_text ってカラム名にしてそこに「も」入れるのが、その、他の人との折衷案になるんでない?
「も」としたのは生データは重要だから失うわけにはいかないという理由。
0570nobodyさん
2014/03/11(火) 18:15:58.54ID:???馬鹿だなぁw
DB格納時やらバイナリデータにh()を適用ってw
特にバイナリデータにはウケたw
0571nobodyさん
2014/03/11(火) 20:48:31.32ID:???リニューアルの時とかネックになりがちだしなー。
基本は、あくまで「渡す時に適切な処理を」だろ。
あくまで基本だけど。
ところで、なんでhtml文章を格納するのに話題で
バイナリにhtmlspecialcharsとか言い出してる馬鹿がいるの?
0572nobodyさん
2014/03/11(火) 20:50:47.99ID:???それを見分ける方法などを付けていなければ
バイナリに対して加工してしまう可能性がある。
0575nobodyさん
2014/03/11(火) 21:12:59.37ID:???見分ける方法が無いまま混在させる状況がよく分からん。
よしんば入れるとして、バイナリが入る可能性があるのなら一律エスケープしないだろ。
0576nobodyさん
2014/03/11(火) 21:30:10.60ID:???0579nobodyさん
2014/03/11(火) 21:48:20.79ID:???0580nobodyさん
2014/03/11(火) 22:09:58.62ID:???取得するデータがどのようなものかはあらかじめ把握しているのが普通
じゃなきゃアプリケーションなんて作れません
0581nobodyさん
2014/03/11(火) 22:13:56.35ID:???| ○ | r‐‐、
_,;ト - イ、 ∧l☆│∧ 良い子の諸君!
(⌒` ⌒ヽ /,、,,ト.-イ/,、 l 入力と検証と保存と出力の話が混ぜこぜになっているが
|ヽ ~~⌒γ⌒) r'⌒ `!´ `⌒) 回答する側も初心者だ
│ ヽー―'^ー-' ( ⌒γ⌒~~ /| 騙されるな。
│ 〉 |│ |`ー^ー― r' |
│ /───| | |/ | l ト、 |
| irー-、 ー ,} | / i
| / `X´ ヽ / 入 |
0582nobodyさん
2014/03/11(火) 22:15:16.23ID:???0583nobodyさん
2014/03/11(火) 22:21:21.67ID:???投稿入力文字列をチェックして、タグ'<>'の投稿を禁止するとか、
入力値チェックの段階で対応する方がよさそう。
0584nobodyさん
2014/03/12(水) 10:33:14.69ID:???> ところで、なんでhtml文章を格納するのに話題で
> バイナリにhtmlspecialcharsとか言い出してる馬鹿がいるの?
>>583
それも手の一つであるけど、仕様決めのときの
ポリシーの問題であってレイヤーが違いすぎるだろ。
それ言い出すと、WAFいれたらとかそういう話も出てくる。
そも、XSS対策を意図した場合、PHPレベルで解決不可能じゃないだけに
そっちを先に論ずるのも妙だと思われる。
0585nobodyさん
2014/03/13(木) 05:39:10.94ID:???0586nobodyさん
2014/03/13(木) 06:13:09.69ID:???0587nobodyさん
2014/03/13(木) 07:53:48.71ID:???0588nobodyさん
2014/03/13(木) 13:11:40.14ID:???しまった!
大変な失敗をしてしまった!!
もう俺の人生終わりだァァァ!!
0589nobodyさん
2014/03/13(木) 13:12:23.06ID:???0590nobodyさん
2014/03/13(木) 13:17:37.89ID:???0591nobodyさん
2014/03/13(木) 13:21:29.15ID:???0593nobodyさん
2014/03/13(木) 19:11:56.06ID:QK76W5wi0595nobodyさん
2014/03/13(木) 21:55:50.20ID:???0596nobodyさん
2014/03/13(木) 23:42:40.32ID:???0597nobodyさん
2014/03/13(木) 23:53:19.72ID:???0598nobodyさん
2014/03/14(金) 06:41:17.54ID:???作るシステムの適正に合ったコードが書ける人間は意外と多くない
0599nobodyさん
2014/03/15(土) 09:39:37.71ID:B7D/HL0CGDを使ってpng画像を作成するプログラムを作っています。
画像を作成して表示することはできたのですが、
右クリックして「画像を保存」しようとすると、うまく保存してくれません。
保存できるようにする方法はありますでしょうか?
0600nobodyさん
2014/03/15(土) 10:00:00.04ID:???拡張子によって保存出来ないとか?拡張子.pngにしてみたら
0601nobodyさん
2014/03/15(土) 10:18:54.27ID:B7D/HL0Cただ、ご指摘いただいた点にヒントを得て、いろいろためしてみたところ、うまくいく場合といかない場合がありました。
IEの場合、デフォルトでpng保存となり、保存した画像を開いたところちゃんと表示されました。
chromeの場合、デフォルトではphp保存となっており、拡張子をpngに変えればうまく保存できました。
ただ、phpのまま保存すると、うまくいきませんでした。
これをpng形式で保存するように事前に指定できればいいのですが・・・
そう考えると、たしかにブラウザの問題となりますね。
0602nobodyさん
2014/03/15(土) 11:06:02.04ID:???>ただ、phpのまま保存すると、うまくいきませんでした。
拡張子がphpになっているだけで、pngとして保存できているはずだよ
鯖側では、Content-Dispositionを使ってfilenameをつけるのがベターかと
0603nobodyさん
2014/03/15(土) 11:11:55.23ID:???下の手法を応用して、拡張子pngに適用するのはどうかな。
PHP拡張子としてHTML型を使用する
# 全てのPHPコードをHTMLのように作成する
AddType application/x-httpd-php .htm .html
http://www.php.net/manual/ja/security.hiding.php
0604nobodyさん
2014/03/15(土) 12:50:50.87ID:/0KFEDAUソースがあるんですがこれを有効にする方法が分かりません。
「php はてなイコール」「php クエスチョンイコール」
でググってもダメでした。
教えて下さい><
0605nobodyさん
2014/03/15(土) 12:53:04.27ID:???0606nobodyさん
2014/03/15(土) 12:59:11.19ID:???0609nobodyさん
2014/03/15(土) 15:32:56.48ID:???使わないほうがいいよ。
0610nobodyさん
2014/03/15(土) 16:55:36.75ID:???4桁の数字だから総当りでもいいんだけど、効率が悪い;
phpってまではわかったんだが、どうやってPOSTすれば認識されるんだろう?
SPAMの書き込みがあるから何とかなりそうなんだ
お前ら力を貸してくれ、ください
0611nobodyさん
2014/03/15(土) 16:59:32.65ID:???画像認証の突破方法なんてSPAM屋さんを利するだけだから誰も教えてくれないよ
0612nobodyさん
2014/03/15(土) 17:02:47.17ID:???0613nobodyさん
2014/03/15(土) 17:16:54.30ID:???なんとなく、「それはそういうやり方でやるもんじゃない」という答えで終わりそうな話だけど
0614nobodyさん
2014/03/15(土) 18:26:26.69ID:???やりたい事がまったくわからん
0615nobodyさん
2014/03/15(土) 22:10:33.52ID:???0616nobodyさん
2014/03/15(土) 22:19:25.58ID:???こっち関係の板じゃ別の意味に取られるぞ
0617nobodyさん
2014/03/16(日) 00:22:45.22ID:???なんで自動ポストって言葉を使わないかなぁ。
0618nobodyさん
2014/03/16(日) 05:58:04.91ID:???0619nobodyさん
2014/03/16(日) 12:23:22.71ID:???>htmlプロトコル
httpな
httpは↓
https://www.ietf.org/rfc/rfc2616.txt
header関数は↓
http://www.php.net/manual/ja/function.header.php
抑えておいたらはずれは無いんじゃないかな
0620nobodyさん
2014/03/16(日) 13:55:18.87ID:/7LU/Oeu0621nobodyさん
2014/03/16(日) 19:05:47.95ID:???Content-Disposition:、Cache-Control:
辺りの頻出するもの教えて欲しいなって
この辺って、どの程まで理解してPHPはじめたらいいのか助言欲しいのん
ApacheのディレクトティブやPosgreSQLの設定までキリがないお
0622nobodyさん
2014/03/16(日) 19:17:58.72ID:l1xluNFW通常アーカイブ処理は元よりファイルサイズが小さくなる(圧縮される)と思いますが、
PHPで用意されてる関数群は何かしら設定が必要なようなので、
http://www.php.net/manual/ja/refs.compression.php
デフォルトで使える方法でアーカイブする方法を模索しています。
今考えてるのは、
file_get_contentsで読み込んでbase64_encodeしたものを、
その他情報とともに(ファイル名、親フォルダなど)テキストファイルに記述していく方法ですが、
この方法だと元のファイルより当然サイズが肥大化します。
アーカイブするのが主目的なので肥大化しても構わないと言ったら構わないのですが、
何か他にこの手の処理にデフォルトで使える有効そうな関数はありませんか?
zipアルゴリズムを実装するとか、フリーのそういう類のスクリプトを拾ってくるってのはなしでお願いします。
0623nobodyさん
2014/03/16(日) 19:33:47.17ID:???0624nobodyさん
2014/03/16(日) 19:37:10.45ID:l1xluNFW理由は特にありません
0625nobodyさん
2014/03/16(日) 19:55:28.56ID:???0626601
2014/03/16(日) 20:45:09.55ID:WUHmbqmdありがとうございます。
遅ればせながら、お礼です。
Content-Disposition: inline; filename=
で問題解決しました。
0628nobodyさん
2014/03/18(火) 12:27:27.37ID:???php 5.5 + 10%だな。
自分の環境のテストではそんな感じだった。
0629628
2014/03/18(火) 12:31:38.79ID:???申し訳ないです。
0630nobodyさん
2014/03/18(火) 12:34:47.69ID:???ついでにheader()しても先にレスポンスヘッダーにtext/html仕込まれたりするから、
ini_setでdefault_mimetypeを指定しておくと吉。
0631nobodyさん
2014/03/18(火) 13:02:21.50ID:RFZn4Uk4実践的なOOPを学習するにはどうしたらよいですか?
おすすめの学習法がありましたら教えて欲しいです。
PHPの入門書などを読むと、クラスの書き方には言及していますが、
実際にオブジェクトを使って何か成果物を作るようなものが少ないです。
文法的なことではなく、実践的なOOPを身に付けたいです。
クラスの書き方はある程度覚えたので、例えば、グローバルスコープで、
どうオブジェクトを扱うか等の知識を得たいです。
よろしくお願いします。
0632nobodyさん
2014/03/18(火) 13:55:07.26ID:???0633nobodyさん
2014/03/18(火) 14:50:00.57ID:ql50fOB40634nobodyさん
2014/03/18(火) 15:06:37.74ID:???そこの部分の一般例を覚えたいってこと?
それならば、クラス設計を突き詰めて学んだほうがいい気がする。
どうオブジェクトを扱うかは、結局クラス設計に依存するし、それ次第で変わるから。
そのあたりについて色々書いている人多いから、玉石混交だけど
色々読んでみるといいと思う。
で、課題作って実践する。
>>633
それ「自体」は無しじゃない。
0636631
2014/03/18(火) 15:51:26.19ID:RyBw1YMD具体的には、掲示板でもブログでもアンケートでもいいのですが、
OOPに基づいて、WEBアプリを構築してみたいというものです。
書籍「パーフェクトPHP」で学習したところ、OOPでフレームワークの構築をするとか
敷居がかなり高かったので、入門的に、掲示板などをOOPで作る定番な手法を学習したいのです。
端的には、「クラスを書いたら、後はどうしたらいいの?」という疑問です。
auto_loadして、クラスを読み込んで、オブジェクトを作り、プロパティを設定、
そして、メソッドを実行という流れだと想像するのですが、
全体としては、どのようにコーディングするのか、お手本がなくよくわからないのです。
0637nobodyさん
2014/03/18(火) 16:24:02.08ID:???private $db;
function __construct() { $this->db = DB::instance()->get(); }
function makeThread($_title, $_name, $_mail, $_body) {
//transaction
//INSERT INTO thread_tbl (title) VALUES ($_title)
//INSERT INTO res_tbl (thread_id, name, mail, body) VALUES ($lastInsertId, $_name, $_mail, $_body)
//commit
}
function getThreadTitle() {
}
function readThread($_threadId) {
}
function deleteThread($_threadId) }
}
function postResponse($_threadId, $_name, $_mail, $_body) {
}
function deleteResponse($_threadId, $_resId) {
//UPDATE res_tbl SET name = 'あぼーん', mail = 'あぼーん', body = 'あぼーん' WHERE thread_id = $_threadId AND res_id = $_redId
}
}
ど、どう?
0638631
2014/03/18(火) 16:52:00.21ID:RyBw1YMDコードを示して頂きありがとうございます。
とても分かりやすいコードです。
このクラスを実際に利用するには、どうしたらよいのでしょうか?
グローバルスコープに次のようにすればよいのでしょうか?
<?php
require_once('DB.php');
require_once('2chLikeBBS.php');
$obj = new 2chLikeBBS();
//スレッド作成の場合
$obj->makeThread($_title, $_name, $_mail, $_body);
?>
0639nobodyさん
2014/03/18(火) 16:59:31.16ID:???http://www.php.net/manual/ja/function.spl-autoload-register.php
0640nobodyさん
2014/03/18(火) 17:08:45.44ID:???まぁ勝手にロードとか型なしとかメリットでありデメリットでもあるからね
他人がコード読む際の可読性とか
0641nobodyさん
2014/03/18(火) 17:19:26.69ID:???使い勝手のためならお好きにどうぞ
メモリの使用量を抑えるためだったら
クライアントライブラリ側で結果セットをバッファリングしてないかも調べとこう
0642nobodyさん
2014/03/18(火) 17:27:33.26ID:???下のほうは実装例だから参考にしなくていいけど
上のほうにオートローダーの趣旨が書いてるから
>>639の説明がよくわからなかったら読んでみるといいかもしれぬ
0643631
2014/03/18(火) 17:29:03.73ID:RyBw1YMDありがとうございます。
このようにクラスを作成した場合、各メソッドごとに処理を記述します。
しかし、グローバルスコープでは、それらの一部のメソッドを使用するだけです。
この場合、使用しないメソッドも、全部を読み込んでいることになります。
クラスに10のメソッドが有る場合に、グローバルスコープで1つしかメソッドを
使わない場合には、効率が悪いように思えるのですが、
OOPでは普通のことなのでしょうか?
0645nobodyさん
2014/03/18(火) 17:40:10.21ID:???>>637はモデル
>>638はコントローラ
>>638でのコードはもっと多岐に渡るはずだぜ
作ったり消したり読み込んでビューを呼んで表示したり
0646nobodyさん
2014/03/18(火) 17:47:58.92ID:???>使わない場合には、効率が悪いように思えるのですが、
>OOPでは普通のことなのでしょうか?
クラスに属する振る舞い(メソッド)を定義してるだけ≒関数定義してるだけで
全く気にする必要はないですね
例えばmysqli apiで実際に使うメソッドなんてこの中の2割程度なのでは?
http://www.php.net/manual/ja/class.mysqli.php
0647631
2014/03/18(火) 18:18:38.57ID:RyBw1YMDありがとうございます。目から鱗です。
メソッドを定義しても実行しなければ、パフォーマンスに影響しないのですね。
これまで、PHPの入門書に従って、使う関数のみを読み込み、
その都度、関数を実行していました。
そのため、関数をそれぞれ別ファイルに保存する方法をとっていました。
OOPだと、その関数を一つのファイル(クラス)にまとめられるのですね。
>>644-645
OOPとMVC、そしてフレームワークは深い関係があるようなので、
もう一度、OOPでフレームワークの学習に挑戦してみます。
ありがとうございました。
0648634
2014/03/18(火) 18:54:20.68ID:???ユーザの作成するものじゃパフォーマンスに与える影響は一応違う。
モジュール化されたものは、シンタックスチェックとか入らないから。
ただまぁ、それだけぶっこんどいても実用上そこまで気にならないレベル。
MVCで、躓くところって大体決まってるのでその時はMVACも参考にしてみると面白いかも。
クラスに複数メソッドが〜の部分は、メソッドの書き方に強く依存するけど、
それらを効率的に書こうとすると結構privateメソッドが増えてくることに気付けると思う。
0649631
2014/03/18(火) 19:39:11.61ID:Dg0Vus48ありがとうございます。
参考にさせて頂きます。
0650質問です。
2014/03/18(火) 23:41:47.91ID:pDJRMjYx「接続先IPアドレス」と「HTTPリクエストヘッダ」を知る方法を教えてください。
$content = file_get_contents('http://example.com/hoge/fuga.html');
HTTPレスポンスヘッダなら $http_response_header で扱えますが、
その逆の、PHP側がリクエスト時に発行したリクエストヘッダを知りたいのです。
「GET /hoge/fuga.html HTTP/1.1」みたいなやつです。
また、この方法だと、DNSラウンドロビンで複数のサーバが立っていたら、
どのホストに接続したのかわからないと思います。
接続した先のIPアドレスを知る方法はあるでしょうか?
いちいちリクエストする前にURLを分解して
dns_get_record()でAレコードかAAAAレコードを記録してから
fsockopen()するしかないのでしょうか。
何か良い方法があれば教えてください(´・ω・`)
0651nobodyさん
2014/03/19(水) 00:26:23.47ID:???http://www.php.net/manual/ja/ref.curl.php
0652nobodyさん
2014/03/19(水) 02:31:42.34ID:???>いちいちリクエストする前にURLを分解して
>dns_get_record()でAレコードかAAAAレコードを記録してから
>fsockopen()するしかないのでしょうか。
接続先のIPを知る必要があるならやっぱ明示的に指定しないとだめだと思う
■ このスレッドは過去ログ倉庫に格納されています