【PHP】下らねぇ質問はID出して書き込みやがれ 120
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2012/06/21(木) 19:37:07.93ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 119
http://kohada.2ch.net/test/read.cgi/php/1337172256/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0702nobodyさん
2012/07/14(土) 22:09:33.37ID:???0703nobodyさん
2012/07/14(土) 23:40:38.99ID:63YLPZRTfunction check($data) {
if (is_array($data)) {
return array_map('datacheck', $data);
}
else {
$d = htmlspecialchars($data, ENT_QUOTES);
}
}
シェル上では、問題なく動作しているのに、
ブラウザでPOSTされた値を上記関数に入れ込むとなぜかサニタイズされません
しかし、check(check($data))のように2回上記関数に入れ込んでやるとしっかりサニタイズされます
POSTされた値だけ1回でうまくサニタイズされないのはどうしてでしょうか
0704nobodyさん
2012/07/14(土) 23:42:02.84ID:63YLPZRT以下コードです
function check($data) {
if (is_array($data)) {
return array_map('check', $data);
}
else {
$d = htmlspecialchars($data, ENT_QUOTES);
}
}
0705nobodyさん
2012/07/14(土) 23:51:27.26ID:???セキュリティの専門家に怒られるぞ
何が毒かなんて使う場所によって違う
0706nobodyさん
2012/07/14(土) 23:53:36.17ID:???0707nobodyさん
2012/07/14(土) 23:59:25.51ID:???なんで再帰みたいなことしてるのか
elseでreturnはしないのかとか色々疑問はあるけど
function h($data) {
return htmlspecialchars($data, ENT_QUOTES);
}
$post = array_map('h', $_POST);
でいいのでは
0708nobodyさん
2012/07/15(日) 00:15:56.17ID:???0709nobodyさん
2012/07/15(日) 00:21:30.97ID:???この段階でこんなことするのがそもそもおかしいけどね
0710nobodyさん
2012/07/15(日) 01:01:39.01ID:???これはだめでしょ
半角英数字以外をすべて削除するなら
個人的にサニタイズって呼んであげてもいいよ
でも文字列長はチェックしてね
0711nobodyさん
2012/07/15(日) 01:10:06.12ID:???function sanitize($data)
{
if (is_array($data)) {
return array_map('sanitize', $data);
} else {
return 'Don\'t say SANITIZE!';
}
}
0712703
2012/07/15(日) 05:19:47.39ID:RWRXX5R0サニタイズする関数をいくつかつくっていて、特殊文字の変換の関数が上手く動作しなかったので
誤った言い方をしてました
>>707
returnは転記するのにぬけてました・・・ 再帰処理は配列であるなしにかかわらず下の関数でよしとしたかったので
function datacheck($data) {
if (is_array($data)) {
return array_map('datacheck', $data);
}
else {
$data = htmlspecialchars($data, ENT_QUOTES);
}
return $data;
}
問題は、変数に配列を入れて上記関数を通した時には問題ないのに
配列で送られてきたPOSTを通すと特殊文字が変換されない、2回通してやると変換できる
原因が知りたいのです 変数に配列を自分でセットするのとPOSTされてくるので何か違いがあるのでしょうか
0713703
2012/07/15(日) 05:37:24.30ID:???どうもPOSTから受けた配列を変換用関数に入れると、配列の判定をしてはいるものの
再帰処理せず、1回目の配列判定をしたところで処理が終わってるようです
自分で変数に配列をセットした場合は、再帰処理されるのに
POSTの値が再帰処理されないのはなぜでしょう・・・
0714703
2012/07/15(日) 06:00:50.97ID:???var_dump($d);
$d2 = datacheck2($d);
var_dump($d2);
$d3 = datacheck2($d2);
var_dump($d3);
上記処理をかますと、
array(2) { [0]=> string(3) "<<<" [4]=> string(2) "<<" }
array(2) { [0]=> string(12) "<<<" [4]=> string(8) "<<" }
array(2) { [0]=> string(24) "<<<" [4]=> string(16) "<<" }
となります なぜこうなるのでしょうか・・・
string(3) string(12) と長さは変わってるようですが
0717nobodyさん
2012/07/15(日) 12:44:31.04ID:???0718703
2012/07/15(日) 14:44:00.05ID:???脆弱性を作りやすい間違った考えということが分かりました
ありがとうございました
0719nobodyさん
2012/07/15(日) 15:23:31.96ID:37AkCOjKtwitterの画面までは飛ぶのですが。
こちらです。
このページに対するリクエスト・トークンがありません。アプリケーションが〜
みたいな文が出てきて、アプリ認証画面に飛びません。
developerのページにちゃんと登録して、キーなどはちゃんと入力しました。
今はローカルで試しています。
0720nobodyさん
2012/07/15(日) 15:25:40.30ID:???0721nobodyさん
2012/07/15(日) 15:38:16.39ID:???リクエストトークンがないとはどういう意味なんでしょう?
サンプルプログラムを丸写ししてキーを入力しパスなどを変えただけなんです。
0722nobodyさん
2012/07/15(日) 15:59:21.04ID:???0723nobodyさん
2012/07/15(日) 21:13:23.03ID:???・投稿するAPIがあるならその仕様をちゃんと読む
・APIがないなら通信をトレースして何をしたらどうなるかを把握して専用のクライアントを作成する
結局この2つになるんじゃないの
0724nobodyさん
2012/07/15(日) 21:16:49.41ID:???0725nobodyさん
2012/07/15(日) 21:43:34.81ID:???アクセストークンがない。
read and wrightにしてない
おなじ内容の投稿を繰り返してる。
たぶんどれか
0726nobodyさん
2012/07/15(日) 21:47:32.56ID:???0727nobodyさん
2012/07/15(日) 22:16:56.04ID:???0728nobodyさん
2012/07/15(日) 22:30:26.21ID:???wright
wright
0729nobodyさん
2012/07/16(月) 03:34:05.92ID:xItWI94Mすみません、連投だからとsageてしまいました・・・
改めてお願いします
function datacheck($data) {
if (is_array($data)) {
return array_map('datacheck', $data);
}
else {
$data = htmlspecialchars($data, ENT_QUOTES);
}
return $data;
}
-----------------------------------
$d = $_POST['data'];
var_dump($d);
$d2 = datacheck2($d);
var_dump($d2);
$d3 = datacheck2($d2);
var_dump($d3);
上記処理をかますと、
array(2) { [0]=> string(3) "<<<" [4]=> string(2) "<<" }
array(2) { [0]=> string(12) "<<<" [4]=> string(8) "<<" }
array(2) { [0]=> string(24) "<<<" [4]=> string(16) "<<" }
となり、1回でエンティティ変換できないのはなぜでしょうか
0731nobodyさん
2012/07/16(月) 09:11:06.54ID:???第一は自分自身に対する不全感。
自分は非力で、無知で、まだまだ多くのものが欠けている。
だからこの欠如を埋めなくてはならない、という飢餓感を持つこと。
第二は、その欠如を埋めてくれる「メンター(先達)」を探し当てられる能力です。
メンターは先生でもお母さんでも、ネットの中の無名の人でもいい。
生涯にわたる師ではなく、ただある場所から別の場所に案内してくれるだけの
「渡し守」のような人でもいいのです。
自分を一歩先に連れて行ってくれる人は全て大切なメンターです。
第三が、素直な気持ち。
メンターを「教える気にさせる」力です。オープンマインドと言ってもいいし、
もっと平たく「愛嬌(あいきょう)」と言ってもいい。
「学ぶ姿勢」のある人は、何よりも素直です。
つまらない先入観を持たないから、生半可なリアリズムで好奇心を閉ざさない。
素直な人に聞かれると、こちらもつい真剣になる。知っている限りのことを、
知らないことまでも、教えてあげたいという気分になる。そういうものです。
以上、この三つの条件をまとめると、
「学びたいことがあります。教えてください。お願いします」
という文になります。これが「マジックワード」です。
これをさらっと口に出せる人はどこまでも成長することができる。
この言葉を惜しむ人は学ぶことができないのです。
学ぶ力には年齢も社会的地位も関係がありません。
>>727さんも、早く学ぶ力を身に付けてください。
0732nobodyさん
2012/07/16(月) 11:12:31.31ID:???0733nobodyさん
2012/07/16(月) 11:36:56.93ID:???0734729
2012/07/16(月) 11:53:07.77ID:xItWI94Mチェック用につくったものでした・・・ 注意不足で申し訳ありません
以下、最後にします・・・よろしくお願いします
function datacheck($data) {
if (is_array($data)) {
return array_map('datacheck', $data);
}
else {
$data = htmlspecialchars($data, ENT_QUOTES);
}
return $data;
}
-----------------------------------
$d = $_POST['data'];
var_dump($d);
$d2 = datacheck($d);
var_dump($d2);
$d3 = datacheck($d2);
var_dump($d3);
上記処理をかますと、
array(2) { [0]=> string(3) "<<<" [4]=> string(2) "<<" }
array(2) { [0]=> string(12) "<<<" [4]=> string(8) "<<" }
array(2) { [0]=> string(24) "<<<" [4]=> string(16) "<<" }
となり、1回でエンティティ変換できないのはなぜでしょうか
0739nobodyさん
2012/07/16(月) 13:31:55.86ID:xItWI94MたしかにHTMLソースを見るとしっかりエンティティ変換できてますね
ブラウザが変換されたものを認識して表示
2回目を通ると、2回変換されたものを1回分戻して表示しているから1回目が変換されたように
錯覚していたのですね
理解致しました、教えて頂きありがとうございました
ちなみに>>736は私じゃないです・・・
0740nobodyさん
2012/07/16(月) 13:57:52.34ID:QG6eRF1A出力する限りではデコード済みのようでした。
確認だけです
お願いします。
0741nobodyさん
2012/07/16(月) 14:25:27.61ID:???0742nobodyさん
2012/07/16(月) 14:29:14.51ID:QG6eRF1Aありがとうございました
0744nobodyさん
2012/07/16(月) 15:22:21.12ID:???0745nobodyさん
2012/07/16(月) 15:23:35.71ID:???0746nobodyさん
2012/07/16(月) 15:30:57.84ID:???エンコと勘違いしてないか?
0747nobodyさん
2012/07/16(月) 23:27:29.62ID:gCazxRKasession_start();〜
?>
<html>〜</html>
としたとき、グーグルクロームで上の方に空白ができるって
なんとかならないですか?
0748nobodyさん
2012/07/16(月) 23:31:36.01ID:???同じ結果ならブラウザでソースが変わるってのはない
PHPとは関係ないんじゃね
0749nobodyさん
2012/07/17(火) 11:59:23.23ID:???0750nobodyさん
2012/07/17(火) 12:12:53.44ID:???0753nobodyさん
2012/07/17(火) 23:10:16.97ID:???0754nobodyさん
2012/07/18(水) 11:40:22.77ID:???0756nobodyさん
2012/07/18(水) 14:31:18.93ID:???0757nobodyさん
2012/07/18(水) 15:14:11.38ID:???知らないことにするってことだろ
0758nobodyさん
2012/07/18(水) 15:17:04.27ID:???0759nobodyさん
2012/07/18(水) 15:26:02.07ID:???0760nobodyさん
2012/07/18(水) 16:01:21.74ID:???0761nobodyさん
2012/07/18(水) 16:01:30.12ID:ZNlQhXb2AjaxからPHPファイルにアクセスしてデータベースに書き込もうとしてるんですが、
そのPHPファイルにもユーザからのアクセス権限を与えないと書き込みできません。
これだと、ブラウザからそのPHPファイルに直接アクセスすることが出来てしまいます。
何か対策方法ないでしょうか?
ちなみにhtaccessで該当PHPファイルへのアクセス拒否を行うと、
書き込めなくなってしまいました。
よろしくお願い致します。
0763nobodyさん
2012/07/18(水) 16:13:59.13ID:???PHPerじゃないのかよ…
0765nobodyさん
2012/07/18(水) 16:20:49.01ID:???ブラウザからのアクセスを拒否したらだめに決まってんだろ
簡易的にAjax以外を拒否するなら
$_SERVER['HTTP_X_REQUESTED_WITH'] が 'XMLHttpRequest'
かどうかチェックすればいいが、
偽装可能だし携帯とかブラウザによっては対応できない
0766nobodyさん
2012/07/18(水) 16:28:51.63ID:ZNlQhXb2基本的に直でアクセスした場合は何も表示はされないんですが、
そのファイルのソースコードを見られるのが心配です。
基本的にアクセスすればPHPの処理が実行されるので、
ソースコードを見られる心配はないと思っていていいでしょうか?
ちょっと>>764については調べてみますが。
0767nobodyさん
2012/07/18(水) 16:35:42.56ID:???0768nobodyさん
2012/07/18(水) 16:39:51.44ID:???0769nobodyさん
2012/07/18(水) 16:42:58.58ID:???ApacheならApacheの設定をきちんとしておけば、
.phpのファイルにアクセスして直接ソースコードが見られることはない
そんなのは当たり前
0770nobodyさん
2012/07/18(水) 16:58:00.14ID:ZNlQhXb2じゃあ安心です。
ありがとうございました
他の方もありがと!
0772nobodyさん
2012/07/18(水) 21:57:10.90ID:LQ7IKH/x0773nobodyさん
2012/07/18(水) 23:04:03.60ID:???→ えーと メソッドは引数を持たなく、関数は引数を持つんだとおもいます
0774nobodyさん
2012/07/18(水) 23:27:25.90ID:???0775nobodyさん
2012/07/19(木) 10:29:57.12ID:???0776nobodyさん
2012/07/19(木) 18:16:00.49ID:sGB+atqj=>
ってどういう意味なんでしょうか?
特殊文字でグーグル検索すらできないので教えてください
0777nobodyさん
2012/07/19(木) 19:32:58.45ID:xIuqWu1Yselect 5555 from test order by rowid desc
ってやると、列5555の中の値が取得されずに、
5555って値が取得されてしまいます。
この原因は何なのでしょうか?
0779nobodyさん
2012/07/19(木) 19:40:36.16ID:rqfdDCV2関数
手続き
メンバー関数
プロシージャ
コールバック
はどう違いますか?
0781nobodyさん
2012/07/19(木) 19:48:55.73ID:???0782nobodyさん
2012/07/19(木) 19:51:18.24ID:???0783nobodyさん
2012/07/19(木) 19:53:13.19ID:sGB+atqj連想配列のことだったんですね!
ありがとうございます、おかげさまで理解できました!
0784nobodyさん
2012/07/19(木) 19:53:53.64ID:???メソッド≒メンバ関数 OOPに於ける機能、あるいはオブジェクトが持つ関数
手続き=プロシージャ 何度も行う処理を一纏めにした関数
コールバック 登録された関数を後に呼び出す機構。array_mapとか
0785nobodyさん
2012/07/19(木) 20:01:15.69ID:???phpでの話か?
ならプロシージャは関係無いで
メソッドはクラスに定義された関数
クラスを実体化したらオブジェクト。オブジェクトの持ち物がメンバー。
コールバックは振る舞いの引数。普通は引数とは何らかの値やオブジェクトだが、コールバックは関数やメソッドを渡す。
0786785
2012/07/19(木) 20:08:41.50ID:UpFPLEC5そうなると文脈では784みたいな捕らえ方も無きにしも非ずだけど、オブジェクト指向の対概念として語られる場合も多い。というか、そっちの方が多いんでないかな?
0787nobodyさん
2012/07/19(木) 20:24:02.11ID:???C++とかなら違ったような気がするけど。
0789nobodyさん
2012/07/19(木) 23:35:12.93ID:???→ 使用しないこと。実装が中途半端だという説もありますが、
PHP自体遅いのでOOPするとさらに遅くなり、実用に耐えません。
0790nobodyさん
2012/07/19(木) 23:47:22.19ID:???0791nobodyさん
2012/07/20(金) 11:31:16.80ID:???原因は、「それが仕様だから」
5555をIntegerとして返しているだけ。
``で囲め。''だと今度はstringとして認識されるぞ。
というかそんなフィールド名つけんなよ。
更に言えば、スレチもいいとこだ。
0792nobodyさん
2012/07/20(金) 12:37:18.13ID:aZB4pJtS【PHPのバージョン】4.2
【質問内容】セッションについていくつか教えてください。
■1.A.php B.php C.phpとあって、AとCでセッションを使いたいのですが
AとCだけにsession_start()を利用してよいでしょうか?(Bでもsession_start()をしないとCで
セッションが利用できないことはあるのでしょうか)
■2.セッションの有効期限(60分以上)を設定したいのですが、
ini_set('session.gc_maxlifetime', 3600);session_save_path("/tmp/hoge");
の2つを指定でよいでしょうか?
■3.2の設定は、session_start();の度に事前に実行しないといけないでしょうか。
それとも初回1回だけでよいでしょうか。
よろしくお願いいたします。
0793nobodyさん
2012/07/20(金) 12:46:28.72ID:???2. 直接関係あるのはsession.gc_maxlifetime
3. 動作があったら有効期限をリセットするのが普通 つまり毎回やれ
あとPHP4は特別な事情がない限りもう使わないでくれたまえ
0795nobodyさん
2012/07/20(金) 14:23:57.88ID:???0797nobodyさん
2012/07/20(金) 20:51:29.54ID:IokhYMk9その値をphpで取得すると2012-07-20 18:40:42となるのですが、
配列に時間を入れて昨日だけの値を表示や今日だけの値を表示
させることは可能なのでしょうか?
0798nobodyさん
2012/07/20(金) 20:55:06.04ID:???strtotime
explode
このへんでどうにかしてみろ
0799nobodyさん
2012/07/20(金) 21:00:41.56ID:bg/kXQpZこういう時は別ファイルにしてincludeするのでしょうか?
<?php
if(TRUE)
{
hoge(3);
function hoge($fuga){
return($fuga + 1);
}
}
?>
0800nobodyさん
2012/07/20(金) 21:06:03.53ID:???もっともPHPの無名関数は5.3以上じゃないと使い物にならんけど。
0801nobodyさん
2012/07/20(金) 21:10:02.62ID:bg/kXQpZありがとうございます。
調べて使ってみます。
0802nobodyさん
2012/07/20(金) 22:20:44.18ID:kO69dXPRチェックされた時に1が送られるというのは、できるんですが
チェックされていない時に 0を送るというのができません。
どのように記述すれば
チェックの時は1 未チェックの時は0という風にできるのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています