【PHP】下らねぇ質問はID出して書き込みやがれ 127
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2013/03/19(火) 22:13:49.76ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 126
http://kohada.2ch.net/test/read.cgi/php/1359808868/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0584nobodyさん
2013/04/22(月) 17:30:21.42ID:0nrxKiO80586nobodyさん
2013/04/22(月) 23:14:46.67ID:YyKrblk5じゃあのさん来た! 次スレ
26:以下、名無しにかわりましてVIPがお送りします[]
2013/04/22(月) 22:59:02.35 ID:8TN30C6y0
じゃあ、こっからが情報戦レクチャーに入るぜwww
敵の資金源をおまいらでも一枚噛んでぶっ潰す方法だwwww
不買運動やデモは単なる手段でしか無いwww
俺が求めるのは更にその先だwwww
--- 以下スレ情報 ---
高岡さんがフジ韓流ゴリ押し批判したら干されたのでウジテレビ凸
http://hayabusa.2ch.net/test/read.cgi/news4vip/1366637744/
0590nobodyさん
2013/04/23(火) 21:53:05.68ID:870eDqk8亀だけど、ぜんぜん方向の違う勘違いしてるじゃないか
お前らちゃんと指摘してやれよw
PHPはリクエストのたびに起動して一プロセス消費して終わり。
これ、フレームワークがどうたらとか関係なく、言語仕様な。
一度作成したインスタンスを再利用するなんてのはシリアライズして
DBに保存してっていう、どっちかっていうと変態っぽいやりかただから、
まだ手を出さないほうがいいと思うし。
0592nobodyさん
2013/04/24(水) 04:02:41.23ID:???0593nobodyさん
2013/04/24(水) 04:12:15.02ID:6o5SNjBY0594nobodyさん
2013/04/24(水) 04:23:24.40ID:???0595nobodyさん
2013/04/24(水) 11:10:58.26ID:???を外部から呼び出す時、引数を与えたいのですが、
hoge.php?saitama=chichiu
以外に方法はありますか?
PHP 5.2.17です。
0596nobodyさん
2013/04/24(水) 11:14:23.84ID:???0597nobodyさん
2013/04/24(水) 12:01:08.73ID:L2MfGf1mを外部から呼び出す時、引数を与えたいのですが、
hoge.php?saitama=chichiu
以外に方法はありますか?
PHP 5.2.17です。
>>596
すみません。
0598nobodyさん
2013/04/24(水) 12:04:45.02ID:???あとPATH_INFO使うとか
0599nobodyさん
2013/04/24(水) 12:05:42.44ID:???0600nobodyさん
2013/04/24(水) 12:08:26.65ID:???で、 hoge.phpに saitama と chichiu 渡すみたいな方法はあります。
0603nobodyさん
2013/04/24(水) 13:38:58.11ID:???0604nobodyさん
2013/04/24(水) 18:32:03.09ID:???foreachで$_GETからkeyとvalue取ってくるの?
0605nobodyさん
2013/04/24(水) 18:33:19.63ID:???0607nobodyさん
2013/04/24(水) 20:53:40.70ID:???0608nobodyさん
2013/04/25(木) 02:19:49.33ID:UuN6InnxWindows7でpeclで pecl_http を入れようとしてダウンロードまではいったのですが
その後エラーが出て止まってしまいました。これはどうすればいいんでしょうか。
pecl install http://pecl.php.net/get/pecl_http
downloading pecl_http-1.7.5.tgz ...
Starting to download pecl_http-1.7.5.tgz (174,624 bytes)
.....................................done: 174,624 bytes
71 source files, building
ERROR: The DSP pecl_http.dsp does not exist.
0609nobodyさん
2013/04/25(木) 02:32:52.82ID:???http://stackoverflow.com/questions/7751679/php-http-build-url-and-pecl-install
0611nobodyさん
2013/04/25(木) 13:44:25.08ID:???英語なのであいまいにしか翻訳できなかったので間違っていたらすいません。
これはhttp_build_urlを使うためにpecl_httpを入れようとしたけど使えなかったから
http_build_url() を自作したっていう話ではないですか?
私がしたいのは http_build_url ではないのでこれには当てはまらないのではないでしょうか。
0612609
2013/04/25(木) 13:44:56.25ID:UuN6Innx>>611 は 609 です。
0613608
2013/04/25(木) 13:46:28.43ID:UuN6Innx0614nobodyさん
2013/04/25(木) 14:17:01.66ID:0FNu+M2Thttp://example.com/hoge.php/saitama/chichiu
ならできるけど、
http://example.com/hoge/saitama/chichiu
ってできる?
0615nobodyさん
2013/04/25(木) 14:37:11.67ID:???サーバーにディレクティブ渡せば楽勝でしょ。
WordPressやCakePHPのURLの仕組みを調べてみれば?
0616nobodyさん
2013/04/25(木) 15:04:32.09ID:???.htaccess に、特定のファイル名の時はapplication/x-httpd-phpを追加する
とかが一般的かな
0617nobodyさん
2013/04/25(木) 15:31:26.40ID:???0618nobodyさん
2013/04/25(木) 16:37:07.19ID:???0619nobodyさん
2013/04/25(木) 16:42:52.06ID:???0620nobodyさん
2013/04/25(木) 19:16:06.66ID:???お前たちは答えてろ
0621nobodyさん
2013/04/25(木) 19:32:36.30ID:???0623nobodyさん
2013/04/26(金) 07:59:11.43ID:h02AATTSインスタンスを生成後、オブジェクトにアクセスする際
$this->val
valの部分に他の配列に入れておいた文字列でアクセスするにはどうしたらよいでしょうか
$val = array(a,b)
$this->a
$this->b
のょうに繰り返しで処理したいです
配列だとhoge[$val]といったようにしてましたが、オブジェクトの場合はどうなるのでしょう
0625nobodyさん
2013/04/26(金) 13:34:02.60ID:wd6ISbqU【PHPのバージョン】5.3
【連携ソフトウェア】MySQL
【質問内容】
DBに書き込みデータを保存する掲示板を作っているのですが
ユーザーが書き込んだ文字列をHTMLエスケープするのはどの段階にするべきでしょうか
勿論'や;に\をつけるのはDBに保存する前だと思いますが、
<や>等HTMLとして影響を与える文字をエスケープするのはDBに保存する前か
それともDBにはそのまま保存して出力する際にエスケープすべきでしょうか
一般的な考え方があったら教えて下さい
0626nobodyさん
2013/04/26(金) 13:44:14.73ID:???DBにデータを入れる際のSQLインジェクション
そしてデータをHTMLに出力する際のクロスサイトスクリプティング
DB操作にどのAPI使ってるのかしらんがDBに入れる際
mysql関数ならmysql_real_escape_string
PDOならプリペアードステートメントを使う
DBから取り出してHTMLに出力するときにhtmlspecialcharsを使う
0627nobodyさん
2013/04/26(金) 13:45:37.38ID:???select文にたいしても同様にSQLインジェクション対策を行うこと
0628nobodyさん
2013/04/26(金) 15:17:37.16ID:wd6ISbqUどうもありがとうございます
0629nobodyさん
2013/04/26(金) 15:22:40.36ID:???出力するときに、htmlspecialcharsを使う。
これしかない。
0630nobodyさん
2013/04/26(金) 15:27:43.27ID:???有効にするタグがあるのかどうか(<a>や<strong>, <pre>などは生かすとか)によって違う。
また、エンコードが何なのかによっても違う。
0631nobodyさん
2013/04/26(金) 16:08:21.01ID:???色んな所で古くから議論されてるけど、
基本はDBに生で保存して出力時に整形する。
いろんな検証の仕方をしても多分ここに落ち着く。
それを踏まえた上で、パフォーマンスを高めるためのチューニングとして
エンコード済みのデータをケースバイケースで本データとは別に保存しておいたりすると良い。
0632nobodyさん
2013/04/26(金) 17:56:09.59ID:???ほかの人も言っていることとほぼ同様だけど
取り立てて仕様に影響するような要件がない場合は、DBには可能な限り生なデータを突っ込んだほうがいい。
突っ込む前に整形するとその後の拡張性がすこぶる悪くなったりする。
で、PHPでMySQL使っているならば、mysqli_real_escape_string関数あたり使いなはれ。
で、出力するときは、htmlspecialcharsあたりでXSS除けしなはれ。
ちなみにWHERE句なんかで外部からの値突っ込むときもちゃんとエスケープ処理かけるんだぞ。
もう一つ言うと、LIMITやOFFSET句みたいな場所を除いて外部から受け取ったIntegerを突っ込むときも
ちゃんとエスケープ処理して'つけてSQL文に流し込め。
LIMITやOFFSETは、Integer以外入りようがないのだから、正規表現かなんかでバリデートすべし。
0633nobodyさん
2013/04/26(金) 18:13:03.59ID:???昔はそれが普通だったのか?
0634nobodyさん
2013/04/26(金) 18:14:00.99ID:???0635nobodyさん
2013/04/26(金) 18:14:09.48ID:2flPsSFU0636nobodyさん
2013/04/26(金) 18:16:10.65ID:???たんに何のセキュリティ問題なのかとか具体的なことがわからなかったってだけでは?
とりあえずエスケープにはhtmlspecialcharsを使っとけばいいって覚えちゃった人が
自分のサイトでこういうふうにして入れますみたいに書いて
それを間にうけた第三者が真似していくという
0637nobodyさん
2013/04/26(金) 18:18:57.51ID:???内容はだいたいわかるけど実際に問題になるコードが書けない人
本当にアマでセキュリティホールを理解してるのは少ない
0639nobodyさん
2013/04/26(金) 19:42:40.94ID:???そのカラムの範囲を破壊されないために
<と>をエスケープしていたんだよねwww
0640nobodyさん
2013/04/26(金) 20:23:06.36ID:???そうそう、そんな理解していない奴らが簡単にWebアプリもどきを作れるようにしたPHPは犯罪
世界規模のサイバーテロに匹敵するほどの犯罪
犯罪者予備軍のPHP厨にはお似合いかw
0641nobodyさん
2013/04/26(金) 22:33:10.72ID:zqV1AZ+pわしのことやな、、getpost変数はほぼホワイトリスト解決させてる、、ヌルバイトだけはどう来るか予想できん。。。。
0642nobodyさん
2013/04/26(金) 22:35:09.48ID:???0644nobodyさん
2013/04/27(土) 14:25:23.44ID:RdpUkJUr仮にmcintosh(詳細な綴りは知らん)とwindowsに同じ問題があったとして
その影響が同じだなどという主張と変わらん
0645nobodyさん
2013/04/27(土) 14:36:40.37ID:???0646nobodyさん
2013/04/27(土) 14:48:32.82ID:???なんでmacって呼ばれてるのか考えろ!
0647nobodyさん
2013/04/27(土) 14:49:44.35ID:???0648nobodyさん
2013/04/27(土) 19:00:06.77ID:RdpUkJUr0649nobodyさん
2013/04/27(土) 22:27:02.27ID:78HtUPwGじゃあのさん来た!
421:以下、名無しにかわりましてVIPがお送りします[]
2013/04/27(土) 21:53:57.62 ID:qYDE1sEQ0
てか、すっかり野間ちゃんのこと忘れてたわwww
別件で色々あってなwwww
所詮その程度の存在なんだけどなwww野間ちゃんなんてwwww
じゃあ、今からやるかwww罰ゲームなwww
あーあwww野間のせいだwww野間が全部悪いwww
--- 以下スレ情報 ---
高岡さんがフジ韓流ゴリ押し批判したら干されたのでウジテレビ凸
http://hayabusa.2ch.net/test/read.cgi/news4vip/1366990405/
0650nobodyさん
2013/04/28(日) 01:08:05.93ID:A2fSkdFWウェブサイトを制作しており、初回訪問時に設問を表示し、その答えに応じてメニューの並び順などを変えたいと思っています。
Cookieに保存し次回訪問時も引き継ぎたいです。
$pt = $_POST["pt"];
if ($pt == ""){
$pt = $_COOKIE["pt"];
if ($pt == ""){
header("HTTP/1.1 301 Moved Permanently");
header("Location: ./start.html");
quit();}
} else {
setcookie("pt", $pt, 0, "/", "www.exsample.jp");}
$topMenu[0] = "<a href=\"aa\" alt=\"aa\">aa</a>";
$topMenu[1] = "<a href=\"bb\" alt=\"bb\">bb</a>";
switch ($pt){
case "1": $topDisp = array(0, 1);
break;
case "2": $topDisp = array(1, 0);
現在このように書いており、「start.html」にて
<form method="post" action="index.html">
<a href="http://www.exsample.jp" onclick="forms[0].pt='1'; forms[0].submit();">1</a>
<a href="http://www.exsample.jp" onclick="forms[0].pt='2'; forms[0].submit();">2</a>
<input type="hidden" name="pt" value="" /></form>
と、選択させCookieへの保存を行なっているつもりです。
しかし「index.html」へアクセスすると「start.html」に飛びはするのですが、選択しても「start」から移動しません。
どの部分に間違いがありますでしょうか。あまり知識がなく、どうか教えていただきたいです。
また、現在は「start」という別ページを置いていますが、jQueryなどを使い、設問画面がポップアップするという形を取りたいと思っております。
その方法(どの部分でどういった書き方をすれば良いか)も教えて頂ければと思います。
長文となって申し訳ありませんが、よろしくお願いします。
0651nobodyさん
2013/04/28(日) 06:40:23.43ID:???0653nobodyさん
2013/04/28(日) 19:10:31.55ID:???// 222を出力するクラスaaa
class aaa{
function aaa_m(){
echo "222<br>";
}
}
// クラスaaaを継承したクラスbbb
// ヒアドキュメント内でクラスaaaのメソッドを出力
class bbb extends aaa{
function bbb_m(){
echo <<< EOF
111<br>
{$this->aaa_m()}
333<br>
EOF;
}
}
$bbb = new bbb;
$bbb->bbb_m();
クラスbbbのメソッドbbb_mを使うと
111、222、333とならぶはずが
222、111、333となります
となってしまいます。ヒアドキュメント内でクラスを使うと
最初に呼び出される仕様なのでしょうか?
0655nobodyさん
2013/04/28(日) 19:17:29.32ID:mmUnQlFQ0657nobodyさん
2013/04/28(日) 23:50:47.53ID:3X4yk4QNで、質問の答えだが、ヒアドキュメントのパースする際に
まずはその中の命令を処理する必要があると思わないか?
この結果には驚くような要素は何も含まれていないと思うよ。
0658nobodyさん
2013/04/29(月) 00:02:01.61ID:???クラスファイルで使いたいと思い、作り直しを試みているのですが
function hout($d) {
if (is_array($d)) {
return array_map('hout', $d);
}
else {
$d = htmlspecialchars($d, ENT_QUOTES);
}
}
以下がオブジェクトで
Class Hout
publice function __construct($d)
0660nobodyさん
2013/04/29(月) 00:07:12.36ID:cl3jdKHBクラスファイルで書いてみたのがは以下の通りです
Class Hout
{
private $d;
public function __construct($data)
{
$this->d = $data;
if (is_object($this->d)) {
$this->d = get_object_vars($this->d);
}
}
public function htmlout()
{
if (is_array($this->d)) {
return array_map('htmlout', $this->d);
} else {
$this->d = htmlspecialchars($this->d, ENT_QUOTES);
}
}
}
0661660
2013/04/29(月) 00:13:10.57ID:cl3jdKHB0662nobodyさん
2013/04/29(月) 00:27:56.12ID:???{
private $d;
public function __construct($data)
{
$this->d = $data;
if (is_object($this->d)) {
$this->d = get_object_vars($this->d);
}
}
public function htmlsc()
{
var_dump($this->d);
if (is_array($this->d)) {
return array_map('Hout::htmlsc', $this->d);
} else {
$this->d = htmlspecialchars($d, ENT_QUOTES);
}
return $this->d;
}
}
としてみましたが、ループしてしまいます・・・
0664nobodyさん
2013/04/29(月) 02:22:19.12ID:???0665nobodyさん
2013/04/29(月) 03:26:57.34ID:???0666662
2013/04/29(月) 04:14:22.43ID:cl3jdKHBvar_dump($val);
$val = get_object_vars($val);
var_dump($val);
とすると、結果が
object(ArrayObject)[17]
string '0' (length=1)
string '1' (length=1)
string '1' (length=1)
string '0' (length=1)
array (size=0)
empty
となってしまうのが、上手くいかない原因のようなのですが、
なぜに、get_object_varsを通すとemptyになってしまうのでしょうか・・・
array
[0] => string'0'
[1] => string'1'
[2] => string'1'
[3] => string'0
とさせたいのですが'
0667nobodyさん
2013/04/29(月) 09:07:52.19ID:aXyeiYnzaddServers(array(
192.168.0.11 => 11211,
192.168.0.12 => 11211,
192.168.0.13 => 11211
));
で複数のMemcachedクラスタを構成しています。
Memcachedが落ちた(get(key1)できなかった)場合、DBに直接アクセスしてデータ(val1)を取得した後、
書き込みset(key1,val1)を行います。
この状態で、たとえば192.168.0.12が落ちた場合、192.168.0.12にマッピングされていたkey1が
0.11か0.13にマッピングし直されて継続されることを期待しているのですが、どうも0.12に向けられていた
割り当てられていた分が全部DBに直接アクセスしているっぽいです。
addServersでサーバーを追加したら、そのどれかが落ちていたとしても、再マッピングはされないのでしょうか?
OPT_DISTRIBUTIONを変えても駄目でした。
そうすると、addServersを行う前にサーバーの死活をチェックして、もし0.12が落ちているのであれば
addServers(array(
192.168.0.11 => 11211,
192.168.0.13 => 11211
));
のようにしないといけない、ということなのでしょうか?
(この方法だともちろんうまくいきましたが、何か納得いかず・・・)
0668nobodyさん
2013/04/29(月) 10:06:27.00ID:???0669nobodyさん
2013/04/30(火) 09:46:50.70ID:???サーバーを冗長化するのは、負荷分散で、データの多重化ではないよ。
データベースへのアクセスをメモリーを使って高速化するのが希望なら、tokyo tyrantを使いなさい。
0670667
2013/04/30(火) 15:11:25.92ID:/LZjkS9qただ、>>667の説明がまずかったようなので、流れを書きますと
Memcachedクラスタ:A、B、C
仮にkey1 => val1がBに対応づけられているとする。
ここでBが落ちたとき
プロセスX
(1) get(key1)する
(2) 当然失敗する
(3) DB叩いてval1を取る(実際には色々加工してval1を作るわけですが)
(4) set(key1,val1)する
(5) 今はクラスタが{A,C}なので、今度は(例えば)Aにkey1 => val1が保存される
プロセスY
(6) get(key1)する
(7) 今度はAに保存されているval1が返ってくる
こういう動作を期待しているんですが、どうもプロセスYでもプロセスXと同様にDB叩いてるっぽいんですよね。
それもタイミング差で数プロセスってレベルじゃなくて、数百というプロセスが何分間も。
当然DBが(結果を加工してval1を作っているWebサーバも)捌ききれなくなってあぼん。
0671nobodyさん
2013/04/30(火) 15:21:11.06ID:???6で失敗してることは確認したの?
6で成功する環境が構築できていることは確認したの?
0672nobodyさん
2013/04/30(火) 15:25:34.14ID:???同じように失敗してるとこへ聞きにいって、同じこと繰り返すに決まってる。
クラスタ纏めてるサーバーが1台あって死活まで管理してるならともかく、
簡易的な分散なんだから。
0673nobodyさん
2013/04/30(火) 15:38:05.83ID:???すみません・・・
> 6で失敗してることは確認したの?
Yes
> 6で成功する環境が構築できていることは確認したの?
addServers(array(A,C))なら期待したとおりに動きます。
>>672
こんなコード書いてやってみましたが、確かにval1は取れませんね・・・そういうもんなのか(´Д`)
$m = new Memcached();
$servers = array(
array('localhost', 11211), //Memcachedが動いている
array('192.168.0.201', 11211), array(...), array(...), ... //存在しないサーバー100個ぐらい適当にぶっこむ
);
$m->addServers($servers);
$m->set('key1','val1',time()+100); //多分localhostじゃないとこに書き込もうとしてる
var_dump($m->get('key1')); // bool(false)・・・
0674nobodyさん
2013/04/30(火) 15:46:15.33ID:???Bを速攻で復旧させたほうがスマートじゃないだろうか
数秒間落ちただけでDBが死ぬほどクリティカルじゃないんだろ?
ハードのトラブルとかで長期間落ちる場合は、addServersのところを自動なり手動なりで
書き換えてクラスタから切り離す。
あとは>>669のようにNoSQLか。どう冗長化すりゃいいのか俺は知らんけど。
0676nobodyさん
2013/04/30(火) 19:59:46.53ID:???DBそのまま叩いてもイケる
0677nobodyさん
2013/04/30(火) 20:02:21.83ID:???作成者が2chで質問って・・・
0678nobodyさん
2013/04/30(火) 20:04:01.91ID:???0679nobodyさん
2013/04/30(火) 20:06:21.67ID:???0680nobodyさん
2013/05/01(水) 03:40:01.52ID:cfjacJ3h$a = 1;
$b = 0;
if ($a == 0)
if ($b == 0) print "a";
elseif ($a == 1)
if ($b == 0) print "b";
else
if ($b == 1) print "c";
上記のようなコードを実行すると、想定では「b」が表示されるはずだったのですが
何も表示されずに終了します。
$a = 1; $b = 1; とした場合も「c」が表示されません。
$a = 0; $b = 0; では想定通り「a」が表示されます。
なぜこのような動作をするのか教えて頂けないでしょうか。
0681nobodyさん
2013/05/01(水) 04:11:57.11ID:???0682nobodyさん
2013/05/01(水) 04:12:19.66ID:???見にくすぎる。
■ このスレッドは過去ログ倉庫に格納されています