【PHP】下らねぇ質問はID出して書き込みやがれ 132
質問者はまず
>>1 を良く読むこと(必須!)
過去スレ、関連スレ、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等)・フレームワークは各該当スレへ
【簡易FAQ】
1.文字コードは何を使えばいいの?
→1.UTF-8 2.EUC-JP のどちらか。迷うようなやつはShift_JISは使っちゃダメ。
2. このスレに書き込むときに自分のサイト名を晒したくない
→
http://example.com/が例文などのために予約されている 。hogehoge.comは使っちゃダメ。
3. ブラウザに何も表示されないんだけど・・・
→ Apacheの設定を見直せ。ファイルの拡張子は何にしてて、その拡張子でPHPを呼ぶようになっているか?
4. 記号の意味がわからないけどググりようがない
→ 「@」 エラー表示を抑制、「->」 オブジェクトのメンバにアクセス、「::」 静的なメソッド呼び出し、
「==」は暗黙の型変換をしてゆるい比較、「===」は型情報も含めた厳密な比較
5. echo "$arr['hoge']['fuga']"; と書いたらエラーになった
→ {おっぱい括弧}でくくって"{$arr['hoge']['fuga']}"にする
6. 一定時間ごとに自動的に何かしたいんだけど
→ cronかタスクスケジューラを使え。
7.extractって危険なの?
→変数上書き&初期化忘れなどで危険。楽だからという理由だけで安易に使わない。
8. include/requireに「〜.php?a=b&c=d」のようなパラメータをつけたい
→ URL呼び出しなら可能だけど、普通のファイル呼び出しではできません
9.include/requireでURLを指定しても何も起きない
→ .phpの拡張子のファイルをURLで呼び出すと、1度PHPプログラムとして実行された結果になる。
10. そもそもインストールの時点でうまくいかない
→ 確認すべきはPHPのconfigureの引数、php.iniの内容と置き場所、
Webサーバの設定(Apacheならhttpd.conf)、起動&再起動あたり
11. SQLの質問はどこで?
→ データベース板に誘導されるのが嫌ならPHPにうまく関連させて質問する
12. 文字列のなかに、英字のみとか数字のみとか記号が入っちゃいやんとかはどうしたらいいの?
→ ctype_〜()が手軽。複雑なパターンはpreg_〜()あたりで正規表現を使う。
13. $a1, $a2, $a3 ... のような変数名をうまく扱いたい
→ 可変変数で実現できるけど、むしろ配列を使って$a[1], $a[2], $a[3]等とするのがベター
14. echoとprintってどう違うの?
→ よく議論される話題であるが基本的に両者とも同じ。 以下ちょっとした議論。
http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40 15. クッキーの情報をユーザから隠したい
→ セッション使え。ただしクッキーとセッションは仕組みが違うから同じように扱うな
16. strip_tags()で削除しないタグを複数指定したい
→ strip_tags($html, '<a><p><font>'); // htmlspecialchars()も検討すべし
17. CSVやTSVのファイルをスマートに扱いたい
→ まずはfgetcsv()。ただし日本語を含むと正常に動作しない場合があるので注意だ。
18. 値渡しと参照渡し(「&」を使う)のパフォーマンスの違い
→ C言語じゃないので、パフォーマンス目的で使いわけたらダメ。参照渡しにすると逆に遅くなったりする
参照渡しは引数に戻り値を設定したり引数を関数内で変更するなど、正しい目的に使うこと
19. ファイル入出力関数(fopen等)でリモートファイル(
http:// 〜とか)を扱う際の限界
→ fsockopen()でソケット通信 or PEARのHTTP系 or CURLで解決
必要ならHTTPをはじめとする各種プロトコル(どんなデータを送受信するか)はRFCなどで調べる
20. PHPからPOSTリクエストしたい
→19.を参照
21. 画像処理一般 or GDの限界
→ ImageMagick(PECLのやつ or シェルから実行)
22. 画像・音・動画はファイルで保存?DBに保存?
→ 好きにしてください
ファイル扱う関数以外はほとんどバイナリセーフって認識ぐらいでいいんじゃね?
7 :
nobodyさん :2014/01/20(月) 20:25:13.22 ID:/QxzPvCb
PHP5.4を使っています。 値渡しと参照渡しがいつどのタイミングで発生するかわからないので教えてください。 $arr1 = array('aaa'=>1, 'bbb'=>2, 'ccc'=>3); $arr2 = $arr1; // ※1 function hoge($arr3) {} hoge($arr1); // ※2 このような時、 ※1は値渡しでしょうか?参照渡しでしょうか? ※2は値渡しでしょうか?参照渡しでしょうか? また、 何か見分けの付きやすいルールがあればそれも教えてください。
8 :
nobodyさん :2014/01/20(月) 21:16:56.92 ID:pZcSGmVQ
馬鹿には無理
どっかにPHPの参照カウントを図解してるスライドあったよ
11 :
10 :2014/01/20(月) 22:53:25.36 ID:???
すみません宣言時です function hoge(& $arr3) {}
12 :
nobodyさん :2014/01/20(月) 22:55:09.61 ID:/QxzPvCb
>>7 ※1も※2も値渡しだよ。
PHPでは、基本的にみんな値渡しになる。
例外的に、オブジェクトにオブジェクトを代入すると参照渡しになる。
オブジェクト以外で参照渡しにしたい場合には、&を変数等の前につける。
もっとも、通常は参照渡しにする必要はほとんど無いはず。
15 :
nobodyさん :2014/01/21(火) 22:58:26.87 ID:DnPfDE6k
PHPでGDライブラリを勉強中なのですが、 ピクセルのRGB値を取得する以下のサンプルで、 $im = imagecreatefrompng("php.png"); $rgb = imagecolorat($im, 10, 15); $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; var_dump($r, $g, $b); このようなやり方でRGB値を取得できることはわかったのですが、 このなかの「$r = ($rgb >> 16) & 0xFF;」の部分はどういう処理を 行っているのでしょうか? 「>>」という記号と、「&」の部分がどういう意味なのか教えてください。 どうぞよろしくお願いします。
>>15 >>はビットシフト
RGBは24bitなので、右に16bitシフトすればGとBのビットは捨てられてRだけになります
& 0xff はビットマスク
ここでは下位8bitはそのまま、それ以外のビットがあれば0にする意味で使われています
18 :
15 :2014/01/22(水) 08:39:19.31 ID:???
19 :
nobodyさん :2014/01/22(水) 14:46:32.76 ID:aoIHocMl
$val の内容ダンプしてみては
21 :
19 :2014/01/22(水) 14:58:11.25 ID:aoIHocMl
>>20 大変、失礼しました。自己解決です。
trimが効いていないと思ったら、効いていました。
投稿後、セッションの元データをフォームに反映させていたため
効いていないと、勘違いしていたみたいです。
お騒がせして済みませんでした。
ム板のPerlスレもだいぶPHPの良さが分かってきたみたいだな
でもまだ抵抗してる馬鹿がいるだろ。 継続的に啓蒙していくことが重要。
24 :
nobodyさん :2014/01/22(水) 22:36:56.70 ID:FG8ViAIJ
一行もPHPのコードが書けないバカはここに来るな
>>23 啓蒙つーか
perl使ってる奴は底辺だって事実を
認知させるところからだろ
26 :
nobodyさん :2014/01/23(木) 02:52:37.95 ID:df5KuOGo
PHP使ってる奴は底辺だって事実を 認知させるところからだろ
perlじゃお金にならないよ
いやいやこいつはどの言語も使えない馬鹿チョンだろ
スレ違いです 質問書いてください。
>>27 Perl厨はPerlそのものを使って仕事を見つけるつもりはないと苦しい言い訳をしているよ。
俺も見かけたときは加勢してやってるんだから お前らもがんがれ
Perlで質問してるところにPHPで解答コード書いてやればいいんじゃね? そうすればPHPユーザーのスキルレベルとPHPの有用性を同時に示すことができる
そしてPHPerは空気も読めないのかと言われる
35 :
nobodyさん :2014/01/23(木) 21:47:21.78 ID:df5KuOGo
ぺちぱーにそれが果たしてできるのかな
36 :
nobodyさん :2014/01/23(木) 23:37:54.85 ID:7YymRraU
【OS名】RedHat 【PHPのバージョン】5.3 【連携ソフトウェア】MySQL CodeIgniter 【質問内容】 セッションに大量に突っ込むと中身が消えます。 具体的にはセッションに3000文字とかいれると消えます。 1000文字とかであればちゃんと入っているんですがセッションの容量には上限があるんでしょうか? 以前にちょっとしたファイルをやり取りしたことがあるので3000文字程度では大丈夫と思っていたのですが設定など見ても上限に該当するものがみあたりませんでした。
保存先がCookieになっていないか確認したか?
とくに制約を受けるサイズないと思うよ デバッガで追ってみたら
中身が消えるっていうのは、Session自体は生きてるけど特定のパラメータだけNULLか何かになるってこと? その辺どうやって確認してんの
40 :
nobodyさん :2014/01/24(金) 10:09:16.59 ID:d/hHeezf
みなさん回答ありがとうございます。 単純にsessionの関数使っているだけなのでsessionがどこに保存されているのか? というのを意識していませんでした。 特に何もしていませんがブラウザーのデバッガーで見たらcookieにそれらしき文字列があったのでcookieだと思います。 中身が消えるかどうかの確認は1000文字いれても取り出せるけど 3000文字だとnullになっているという形です。 保存先を変えることができるのであればやってみたいと思います。
セッションの内容をクッキーに保存したら、それは、クッキーでありセッションではないと思うのだが。 セッションとクッキーを混同してるんじゃないの。 それと、クッキーは、たしか4kbyteとかの上限があるからそれが原因だと思う。
42 :
nobodyさん :2014/01/24(金) 15:15:41.95 ID:UatxQsqL
getで送信とかしてないよね
43 :
40 :2014/01/24(金) 15:44:15.53 ID:d/hHeezf
みなさんありがとうございます。 単純にCodeigniterのセッションを使って入れておりました。 $this->session->set_userdata($newdata); こんな感じです。
横レスだけどCookieにSessionデータ詰めるなんて話初めて聞いたわ
46 :
40 :2014/01/24(金) 16:29:54.30 ID:d/hHeezf
スレを移ったほうがよさそうですね 私もsessionと書いてあったのでてっきり実データはサーバー側とおもっていたのですが cookieの中になにやらはいっておりました。 文字数からして4kの上限にあたっているようなのでsessionとなっていますが cookieの中にいれていたということでしょうか。 ちょっとよくわからなくなってきました。
いずれにしても、セッションのデータがクッキーに入ってしまうのは、 セキュリティ上も良くないと思うよ。
CIのマニュアルにCookie使うから4kbまでってはっきり書いてあったわ マニュアルも読まずに質問するとは乳首1000クリックの刑
49 :
40 :2014/01/24(金) 17:36:06.47 ID:d/hHeezf
みなさん申し訳ありません。 確かにマニュアルにクッキー使うよと書いてありますね。 sessionってあったからてっきりそうなのかと思ってましたがCIのsessionはcookie保存のようです。 別の手段で回避することにしました。 お騒がせしました。
そういう発想なかったけど、セッションサーバいらないってのは魅力かもね Hmac付けてHiddenを引き回してたのに近い感じやな
最近じゃhtml5のlocal strageが5MBytesある。 http2.0なぞ普及するとサーバ側が非同期にpullするサービスも増えてくるのかしらん。
53 :
nobodyさん :2014/01/25(土) 07:04:11.94 ID:HM5WIj95
ログイン実装をFWに頼らず自力でやろうと思ってます cookieの存在・仕様については無知なので以下の流れで本当に大丈夫なのか心配です 1.パスワード等でログインが成功したらcookie["token"]にランダム文字列を格納(Aとする) 2.Aをデータベースの個別のUser情報にも記録(Bとする) 3.毎回ユーザーがアクセスする度にA(cookie側)とB(DB側)が一致するかチェック 一致すればログインされてる 一致しなければ未ログイン 4.もしtokenが作られて24時間経てばtokenを一度破棄してログアウトさせる これで十分にセキュアなログイン仕様となるでしょうか?
>>53 >>cookie["token"]にランダム文字列を格納
これがセキュリティ的にまずいかも。
通常は、トークンを自前で作ることはせず、セッションIDの自動発行にまかせる。
また、ログイン機能自体もセッションをメインで作るのが普通だと思うけどね。
そうすれば、DBへの問い合わせとか不要だし。
セッションにログインフラグ立てればいいんじゃね
>>53 親父がログインしたエロサイト息子が見放題のまき〜
>>57 それは、クッキーでもセッションでも変わらないんじゃない。
ログアウトの実装次第であって。
通販サイトの、「チェックした商品の履歴」辺りってヤバイよね?
60 :
nobodyさん :2014/01/26(日) 01:40:38.55 ID:tfpbRtMA
自分もログイン機能を作りたいんですけど セッションにユーザーid、ユーザー名を保存して ログインが必要なページではセッションに ユーザーidがあるか確認するというやり方で実装しました。 これだとセッションが切れると一緒にログインも切れてしまいます。 ブラウザを閉じるまでログインを維持するにはどうしたらいいでしょうか?
PHPで回答してやろうと思ってチェックしてるけどなんか歌の話しててチャンスがないんだがあいつら馬鹿か
>>60 セッションが切れるとログインも切れるってのは正常な動作なんだが
セッションのタイムアウトを伸ばせばいい
64 :
53 :2014/01/26(日) 10:59:50.06 ID:LLTt79Q+
皆さんありがとうございます いまいちセッションが何なのかよくわかっていませんでした(cookieの別名ぐらいの認識) よくサンプルコードでsession["user_id"] = hogehoge みたいなのを見かけて、 これだとクッキーにuser_idが書き込まれちゃうからありえない実装だ!と勘違いしてました この場合["user_id"] = hogehogeはPHPのsession内部で管理していいて、 ユーザー側のcookieにはsession_idしか残らないんですね 一瞬で理解が深まりました本当にありがとうございます
>>60 デフォルトでは、1/100の確率で、24分より古いセッションファイルが消える。
設定を変更するには、gc_maxlifetime の設定値を伸ばせばいいよ。
たとえば、こんな感じだと3時間はセッションが切れない。
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);
ini_set('session.gc_maxlifetime', 3 * 60 * 60);
session_start();
>>ブラウザを閉じるまでログインを維持するにはどうしたらいいでしょうか?
これは、わからない。
ただ、あまり長い時間セッションを有効にするとセキュリティ上まずいと思う。
66 :
60 :2014/01/26(日) 13:15:54.64 ID:tfpbRtMA
68 :
67 :2014/01/26(日) 13:37:35.48 ID:???
延々とセッションの話してるこっちも似たようなもんでしょ。
妄想で書き込んでる
>>71 がちょっとかわいそう
脳の病気かな、それとも心の病気かな
3Dの話出てるぞ。
監視スレでも立てて向うでやってれば?
3DグラフィックはPHPの専門外だろw 行ける猛者は行ってこいw
漠然と3Dって言われてもな DirectXの3Dモデルに独自フォーマットのXファイルってやつがあって Xファイルにはバイナリとテキストと2種類あるが テキストのほうならPHPでも出力できる テンプレートと頂点情報を文字列として出力するだけだからな そういう話?
78 :
nobodyさん :2014/01/27(月) 16:05:44.71 ID:YzEqdDGf
PHPで作成したWEBアプリの決済システムについて質問です。 無料サービスに、特典を上乗せした有料会員を募集しようと思っています。 そこで、PHPと連携できる決済システムなどはありますでしょうか? たとえば、決済が済むと、無料会員から有料会員へ自動で変更できるような APIを提供している決済システムなどです。 現在、paypalなどを考えているのですが、こうしたAPIが無いようでいまだ検討中です。 よろしくお願いします。
>>78 PHPと連携できる決済システムならググれば見つかる。
会員のグレードは決済システムとは無関係のビジネスロジックなのだから、自動で連携できる決済システムはないんじゃないかな。
80 :
nobodyさん :2014/01/27(月) 19:57:51.65 ID:bUMgBNWh
perlなら宮川達彦が何か作ってただろうな
81 :
78 :2014/01/27(月) 20:26:35.59 ID:VwC5UIRJ
>>79 実は、検索はしたのですが、これといったものが見つからなかったのです。
そこでPHP使いの皆さんはどうしているのかと思い質問させて頂きました。
決済システムの利用は、個人だとハードルが高いのかもしれませんね。
それか調べ方が悪かったのかな。もう少し調べてみます。
ありがとうございました。
>>79 も言ってるけど会員のグレードを自動で移行できるロジックは自作するしかないよ
決済システム自体は別に個人でも普通に導入できる
83 :
78 :2014/01/27(月) 21:15:11.18 ID:VwC5UIRJ
>>82 レスありがとうございます。
「決済システムの導入」と「会員のグレードの変更」は別物と考えた方がいいのですね。
そうであるなら、まずは、「決済システムの導入」に注力したいと思います。
結構、難しそうですが、PayPalを候補に考えてます。
それで上手くいったら、次に、「会員のグレードの変更」にもチャレンジしたいと思います。
この2つを一度で済ませられると考えたのが良くなかったみたいですね。
ありがとうございました。
84 :
nobodyさん :2014/01/30(木) 06:30:49.21 ID:M3G3bQxX
HTTPレスポンスヘッダーを明示的に記述したい場合に @ini_set('default_charset', 'UTF-8'); Aheader("Content-type: text/html; charset=utf-8"); はどう違うのですか? @はスクリプト終了時に元の値に戻されるとのことですが…… 使い分けの方法などあれば教えていただきたいです。
default_charset は Content-Type: text/html; charset=UTF-8 の後半部分だけ
86 :
nobodyさん :2014/01/30(木) 12:37:38.81 ID:M3G3bQxX
@ini_set('default_charset', 'UTF-8'); ini_set('default_mimetype', 'text/html'); Aheader("Content-type: text/html; charset=utf-8"); の違いはないという認識でいいんですかね? header()はLocationとかヘッダーのiniでいじれない部分を変更できるということですかね
マニュアル読め
>>84 ini_setで指定しているのはあくまでデフォルトの設定。
headerのほうを指定するとそれが上書きされる。
89 :
nobodyさん :2014/02/02(日) 00:03:04.56 ID:6TG0eOwN
ActiveRecordを継承するModelモデルがあったとして テーブルにinsertするaddメソッドを作るとき staticメソッドにすべきかどうかを教えていただきたいです。 以下の2つで迷ってるんですが正解ってあるんでしょうか。 public function add($hoge) { $this->hoge = $hoge; return $this->save(); } $model = new Model; $model->add($hoge); ---------- public static function add($hoge) { $model = new static; $model->hoge = $hoge; return $model->save(); } Model::add($hoge);
議論のあるところですが、Frameworkの流儀に倣うのがよいでしょうね 元々はテーブルがクラスでインスタンスが行になる感じですね クラスの得意メソッドが、PHPだとStaticという表現になります
出番だぞ 724:デフォルトの名無しさん :2014/02/02(日) 04:29:49.87 [sage] 1000日後の日付をYYYY-MM-DD形式で取得するのに簡単な方法はありますか? 前提条件はできるだけ少ないほうがうれしいです
いつから1000日後よ
DateTimeクラスのaddメソッド
95 :
nobodyさん :2014/02/02(日) 12:44:47.02 ID:XaYZuhBO
function view() { extract([ "v1" = > "aaa" ]); require("test.php"); } test.php <? function func() { echo $v1; // ここで$v1を表示するにはどうしたらいいですか } global $v1 と $GLOBALS['v1'] でも表示されません
requireの場所違くね
func(extract([ "v1" = > "aaa" ]))じゃダメなの?
突っ込みどころが多すぎる
一番手っ取り早い方法 function〜 {と } の行を全てコメントアウト = > を => に <? を <?php に view()のあるファイルの先頭に <?php 追加 これでいけると思うが
>>97 は無視してくれ extractという関数を理解していなかった
extractってのはシンボルテーブルに変数をインポートする関数なんだが
別のphpファイルだとシンボルテーブルを共有してないっぽい
関数ごとにシンボルテーブル違うっぽいな
102 :
95 :2014/02/02(日) 16:13:00.92 ID:???
無理ぽいのでとりあえず引数で渡すことにします。 皆さんありがとうこざいました。
質問者は関数定義だけしてその関数を呼んでない、というのもあるw
104 :
95 :2014/02/02(日) 16:13:50.74 ID:XaYZuhBO
ID出し忘れました
1 <? 2 $a = "aaaaaaaaaaaaaaaaaaaaa"; 3 echo "in global\n"; 4 print_r(get_defined_vars()); 5 function bbb(){ 6 $b = array("bbbbbbbbb" => "bbbbbbbbbbbbbbbbbb"); 7 extract($b); 8 echo "in function\n"; 9 print_r(get_defined_vars()); 10 } 11 bbb(); 12 echo "in global\n"; 13 print_r(get_defined_vars());
test.phpの実行結果 in global //大量に変数が表示される [a] => aaaaaaaaaaaaaaaaaaaaa in function Array ( [b] => Array ( [bbbbbbbbb] => bbbbbbbbbbbbbbbbbb ) [bbbbbbbbb] => bbbbbbbbbbbbbbbbbb ) in global //大量に変数が表示される [a] => aaaaaaaaaaaaaaaaaaaaa どうやらextract($b)によって変化するのはbbb()のシンボルテーブルのみ
あと面倒くさいから確かめてないけど func()でglobalをつかってもtest.phpのシンボルテーブルが参照されるだけで requireされた場所(views)のシンボルテーブルが参照されるわけではないんじゃないの
<? $v1 = ''; function view() { global $v1; extract(array( "v1" => "aaa" )); require("test.php"); } view(); testfunc(); -------------------- <? function testfunc() { global $v1; echo $v1; // ここで$v1を表示するにはどうしたらいいですか } --------------------
test.php <? require('test2.php'); function view(){ extract(array("v1"=>"aaa"));; func(get_defined_vars()); } view(); test2.php<? function func($hoge){ echo $hoge["v1"]; } これじゃダメ?
110 :
108 :2014/02/02(日) 16:46:04.11 ID:???
上が適当なファイルで下がtest.php extract(array( "v1" => "aaa" )); は動かしたphpのバージョンが古いので変更している。 requireはあくまでファイルを読み込むためのもの。例え関数内で読まれたとしてもその意味は変わらない。 view関数の中でrequireしても、view関数内の変数がglobalの対象にならないよってことで。
個人的に関数を呼び出すごとにrequireっておぞましいんだが普通なんか?
>>111 あまりrequireすることがなくてサイズが大きいやつだとオーバーヘッドになるから、その関数内でやる場合もあるかも。
ただ効果があるかどうかは知らない。
自分は主な関数ごとにファイルを作成しているから、使う関数の数だけrequireするよ。 たいていは、多くても10ファイル前後におさまる。 速度も別に遅くならないし、気にならない。 まあ、auto_loadが関数の読み込みにも使えたら便利なんだけど。
114 :
nobodyさん :2014/02/02(日) 17:38:45.22 ID:UuBd4EHo
質問と言って良いかわからんが curl_multi_exec を使うと「エラー時のエラー番号が0」になる人いない? バージョンは最新のどれでも。 curl_exec だとしっかりエラー番号も取れるんだけどねー。
仕様見てみりゃわかる。 multi は個別にエラーチェックしないと
116 :
89 :2014/02/02(日) 17:53:21.79 ID:6TG0eOwN
>>91 ありがとうございます。クラスメソッドにすることにしました。
クラスメソッドの使いどころについてもうちょっとお聞きしたいです。
オブジェクト指向の勉強にとデザインパターンの入門サイトを見ていたのですが
factoryメソッドの紹介でこんなコードが載ってました。
http://codepad.org/KLCiPfDa このReaderFacotoryクラスのメソッド2つをクラスメソッドにしない理由がよくわかりません。
$factory = new ReaderFactory(); // このnewが無駄に見えて仕方ないです
$data = $factory->create($filename);
単に $data = ReaderFactory::createReader($filename);
とせずインスタンスを作る利点は何なのでしょう?
>>116 載ってるコードだけで完結させるならどっちでもいい。public staticにする必要はあるけど。
addとかdeleteとかメソッド作ったりしてクラスを改造していくならインスタンス作るほうが便利。
95 はテンプレートエンジンじゃないの
119 :
114 :2014/02/02(日) 19:34:26.88 ID:???
>115 >multi は個別にエラーチェックしないと エラーメッセージは正確に出るのに 番号は出ない仕様なの? よければ、マニュアルに書いてあったら教えてください。
ぉん?
>>166 依存性を小さくできる、パターンに従っていれば伝わりやすい、OO的に自然で理解に手間がかからない
上のファクトリは単純にStaticにしても動かない
ファクトリはサブクラスにオブジェクト生成の詳細を任せるパターンだから、createReaderはオーバーライド前提になっている
ReaderFactory::create()からサブクラスのcreateReader()を呼ぶのは、親にとって未知の子孫固有のメソッドを呼ぶこと
そのためget_called_class()なり遅延束縛なりして実行時にstaticメソッドのバインド先を決定してやる必要があるという
謎設計に帰結する。遅延束縛がなかったころはさらに不自然だった。
OOPではクラスメソッドは(各インスタンスではなく)クラス自身の振る舞いを記述するものだと言っていいだろう
コード上でメッセージをやりとりしてシステムを形成しているオブジェクト==インスタンスだとすれば、クラス自身は何か?
この設定いかんによって、クラス固有のメソッドとして自然なものと不恰好なものを区別できる
static張りまくって関数ポインタのかたまりを作る人もいし、それがよいケースもある
しかし手続きからOOに入ってやりがちな、よくないstaticについてはstatic evilとかでぐぐれば情報はある
123 :
122 :2014/02/02(日) 23:24:15.85 ID:???
遅延束縛なかったら静的メソッドのユニットテスト糞になるからな
php関数名って一貫性なさすぎだろ 一旦全部エイリアスにして新しいの付けるべき
isset は is_set で有るべきだと思うんだ
alias.phpでも作ってろ
>>125 正しい名前でラップするには都合がいいだろう?
129 :
nobodyさん :2014/02/11(火) 22:13:31.86 ID:ak6dJouy
OS XP php ver 4 適切なスレが見つからなかったのですが、 phpでmysqlのテーブルから文字列を取ってきて表示させようとしたのですが、 半角パーセント記号を含む文字列において、パーセント記号が消え、次の文字が変な記号になってしまいます。 文字列中の%を\%などとしてみてもダメでした。 解決法を教えてください。
130 :
「ガスライティング 集団ストーカー カルト」で検索を! :2014/02/11(火) 23:02:18.69 ID:lii3ZN0H
★マインドコントロールの手法★ ・沢山の人が偏った意見を一貫して支持する 偏った意見でも、集団の中でその意見が信じられていれば、自分の考え方は間違っているのか、等と思わせる手法 ・不利な質問をさせなくしたり、不利な質問には答えない、スルーする 誰にも質問や反論をさせないことにより、誰もが皆、疑いなど無いんだと信じ込ませる手法 ↑マスコミや、カルトのネット工作員がやっていること TVなどが、偏った思想や考え方に染まっているフリや常識が通じないフリをする人間をよく出演させるのは、 カルトよりキチガイに見える人たちを作ることで批判の矛先をカルトから逸らすことが目的。 リアルでもネットでも、偽装左翼は自分たちの主張に理がないことをわかっているのでまともに議論をしようとしないのが特徴。 ,.,.,,
>>129 php4か…
新規で学習中なら現在主流のphp5をおすすめします。
(できればOSも来年度以降サポートがあるものが(winでもLinでも)望ましい)
mysqlではパーセント記号がワイルドカードとして扱われるからそれが影響してるのかも。
phpmyadminとかで取り出す前のデータが化けてないか確認してみるといいかも。
化けてるならinsertに問題あり。
化けてないならselectに問題あり。
>>129 表示はどうやってるの?
printf 使ってるなら、1番目は%sにして文字列は2番目で
>>129 どの文字がどう変わるのか、もう少し具体的に言った方がアドバイスを
貰いやすいよ。
>>129 base64というものがありまして。
抽出、表示を一気にやる前に、抽出したものをそのままログファイルなどに出力して確認してはどうだろう。
ceil(7000*1.08)が7561になるのは仕様? どうすれば7560って出せるの? 切り上げでね。
>>135 PHPのせいといいたいかもしれないけれど、小数がどう扱われるかを勉強したほうがいい。
何かと付きまとう問題なので。
>>135 仕様
ceil(7000*108/100)とすればよい
消費税だろうけど、浮動小数点数型の丸め誤差は勉強した方がよいと思うよ
139 :
nobodyさん :2014/02/12(水) 21:53:28.41 ID:rdsqA60A
この程度で丸め誤差とか致命的に腐ってるだろ
141 :
129 :2014/02/12(水) 22:44:26.79 ID:J2CtCpwd
具体的には下の通りです。 ちなみに出力はflashでしています。 (flashが原因でないことは確認しています) 【テーブルの文字列】 フィールドdata2 「ダメージを50%カット。」 【php】 if(!$mysql->query("SELECT * from table")){ }else{ while($row=$mysql->fetch()){ $data=$data.$row["data1"].",".$row["data2"].","; } echo "data=".$data; 【出力結果】 ダメージを50?≪ット。
すみません。phpの方コピペミスで"}"足りないです。
>>139 Perl、Python、Ruby すべて 7561 になる。
これは1.08が2進数では循環小数になることが影響している。
>>139 はCOBOL以外は全部腐ってるって言いたいんだろ。
>>129 insert時にミスってるように見える。
コマンドラインのmysqlで直接データ見たほうが良いと思う。
Pythonならdecimal、RubyならBigDecimalがあるけど、PHPの場合は…gmp_*ぐらいしかないか
>>145 テーブルの文字列は、phpmyadmin上で直接手打ちしました。
phpmyadmin上では正常に入力されているように見えます。
>>146 文字列を使って小数点を扱うクラスとしてはdecimal便利だよね
PHPは利用用途が多くないから実装されてないな
>>141 化けるのと同じくらい深刻なトラブルがあるんだけど、
data= が出力されてないよ。大丈夫なのかな。心配だよ。
>>141 すみません。一応通常の動作は確認済みです。
ここに要点だけ書くためにいじったら変になってしまい。。
解決策が無いようであればおとなしく全角%にします。。。
%がおかしなるのはエスケープ周りじゃないかなあ 文字コードも分からんし
要点だけ書くなら検証方法も要点にまとめてほしいもんだわ。
>>129 "?&lt;&lt;" この文字を "%" に再変換してから出力すればいいじゃない。
最終手段だけど。
まあ、文字エンコードの設定のどこかに不統一があるのが有力な原因だと思う。
それか、環境のせいかな。
とりあえず、文字エンコードを設定できるすべての箇所できちんと統一すればいいよ。
あと、htmlspecialcharsを通してるなら文字コードの指定もした方がいい。
訂正 "?<<" この文字を "%" に再変換・・・。
原因箇所を特定しろ mysqlに入ってるデータがすでに?<<になってるのか? それならinsertするとこに問題があるから見なおせ
ってinsert時は正常って書いてた 文字コードがおかしいだけだな
MDB2を使って欲しいけどphp4だしな…
SET NAMES utf8みたいなやつとか 照合順序をutf8_general_ciみたいなやつが怪しい?
160 :
129 :2014/02/13(木) 19:59:48.42 ID:???
文字コードは、mysql(DB、照合順序)、phpファイル共にutf8に統一しています。 mysql_query("set names utf8"); も記述していましたが、消しても変わりませんでした。 本件については全角%でしのごうと思います。 なにかわかりましたらここに戻ってきます。 ありがとうございました。
161 :
nobodyさん :2014/02/14(金) 00:12:14.57 ID:FqeyPeT2
環境変数らんぐは?
【OS名】IIS7 【PHPのバージョン】5.4 PHPの文字コード「JIS」についてコードマップが 記載されている資料ってどこかにありませんか? せめてJIS1990相当だ、とか1997だとかだけでも判るといいんですが…
163 :
162 :2014/02/14(金) 14:53:21.20 ID:48zvG1O+
あ、チェック外して忘れてsageてもうた
>>165 JISとISO-2022-JPは別だよ
isoってカナ入って無くないっけ
>>166 PHPのmdstringのソースコードのREADME_PHP3-i18n-jaに
- JIS
standard: JIS
alias: N/A
mime: ISO-2022-JP
ってあるから、PHPでJISといえばISO-2022-JP
NEWSに、ISO-2022-JP-2004対応って書いてあったので
そこまで対応してるんだと思ってました。
すみません。
>>160 釣りはもう沢山。解決に導くためのレスだけスルーするとかわかりやすすぎんよ
170 :
nobodyさん :2014/02/15(土) 17:21:47.48 ID:NpO2DRH6
最強のフロントエンドエンジニアsasaplus1様だ!
171 :
nobodyさん :2014/02/15(土) 18:02:22.51 ID:jT0c7PHQ
質問です。 echo や var_dump() などをしても出力をさせない方法はありますか?
全てを出力させないのであればob_end_cleanを使用する。 特定の関数だけ出力させないのであれば自作する。
標準出力を閉じるかlinuxなら/dev/nullにリダイレクトする
PHP厨の存在価値なんて釣られてなんぼだろw PHP厨の分際で調子に乗るなよw
175 :
nobodyさん :2014/02/16(日) 01:04:25.49 ID:/GeetU5z
【OS名】win7 32bit 【PHPのバージョン】5.3.5 【連携ソフトウェア】xampp 1.7.4 【質問内容】 セッションを開始して値が入っているかのチェックを session_start(); if(isset($_SESSION['sample'])&&($_SESSION['sample'] !=null);){ //処理 } としているのですが、これでよろしいでしょうか? 一般的な書き方があれば教えていただきたいです。
値が入っている、の定義によるんじゃない それ0とか空の文字列や配列はnullでスキップされるよ 一段目はissetだけにして、値のチェックなりフィルタなりは別にやったほうがいいんじゃない
俺なら && empty() 使う
入れ子が嫌いだから俺も&&だな 一般的な書き方は知らない
アンドは && を使うけど、オアは or を使ってしまうのはオレだけか? どうも || が馴染めないんだよね。USキーボードで打てないてのもあるけど。
180 :
nobodyさん :2014/02/16(日) 14:51:20.17 ID:f2HQdmKQ
俺なら
if(!empty($_SESSION['sample'])){
//処理
}
>>175 で、最初にissetを使うのは、noticeエラーを出さないためのはず。
そのためだけなら、!emptyで代用できる。
また、0,"",false,null等もまとめて除外できる。
まあ、要件次第だけど。
>>179 ?
shift + backslash で出るでしょ普通に。
てか、パイプ使えないとすべてにおいて不便だと思うんだけど
VB6.0やっててPHPを勉強しだしたらそんな感じに見えるかもしれない>or
>182 USキーボードを日本語配列で使ってるから出ないんだわ。 同じようにアンダーバーも出ない。
英字キーボード使ってるアピールするならちゃんと使えるようになってからにしてね
>>184 使えねぇのはキーボードじゃなくてまぬけなおまえな
USキーボード使う意味がわかりません 貧乏人かな?
馬鹿相手にしてもしょうがないぞ 人と変わったことしてる俺ってカッコイイとか思ってるあほだから
USキーボードは普通だろ? 日本語配列のまま使うのが変態なだけで
そうだよ
日本語キーボードに対応してないアプリケーションとかもあるからなあ
日本語キーボードをUS配列で使う(使わざるを得ない)人はいるけど、 わざわざUSキーボードをなんで日本語配列で使うんだろ? 壊れた配列並に頭も壊れてるんかな?
これがまともな人間の思考回路 222:デフォルトの名無しさん :2014/02/17(月) 01:44:26.48 [sage] PHP使うくらいならPerl4を使うけどな、このスレ的にも
キーボードの話題はそこまでだ 実にくだらない
>>193 日本語の配列に対応してないキーボードとかあるだろ
エキセントリックなキーボードだとよくある
197 :
182 :2014/02/17(月) 04:46:23.32 ID:???
久しぶりに絶句した。
久しぶりに息絶えた
199 :
nobodyさん :2014/02/17(月) 13:00:53.38 ID:5TF8zSur
ブラウザ無しでPHPから <SCRIPT LANGUAGE="JavaScript"> <!-- … // --> </SCRIPT> この中を実行とか出来ますかね?
ちょっと何言ってるかわからないですね
>>200 ブラウザで
>>199 のページを見たら<script></script>の中が実行されますよね?
それをPHPのみで実行したいという事です。出来ますかね?
一体何がしたいんだ つかクライアントプログラムと サーバープログラムの違い判ってるか?
何がしたいかはすぐわかるだろ。 出来ない。
>>201 <script></script>をPHPに書きなおせばおk
Javascriptはクライアントサイドのスクリプトだから、クライアント(Webブラウザ)がないと実行されないよ。
phpでjsのコード出力すればブラウザでそのページ表示した時にそのjsコードが実行されるかってこと? それなら実行される
「PHPのみ」ってのが意味不明
php -f index.html でjsコードを実行したいってこと? 無理 馬鹿なのかな
きっとコンソールでjavascriptが実行したいってことだろ phpと全く関係ないな
210 :
nobodyさん :2014/02/17(月) 15:19:31.75 ID:S7yDbQ6X
ボタンを押したときにファイルを書き込むときの、htmlとphpを知りたいです。 <form name="message" method="post"> <textarea name="sendMessage" cols="70" rows="4"> </textarea> <input type="submit" name="submit" id="submit" value="送信" /> </form> これで、message.txtを作るには、 <?php $filename = "message.txt"; $string = ???(ここ不明) file_put_contents($filename, $string, LOCK_EX | FILE_APPEND); ?> とするとして、それをsubmitに割り当てる方法を教えてください。
なんか…頭痛いな… $string = $_POST["sendMessage"]; だけじゃねーの? あと、textarea〆タグ改行すると余計な改行入るで
213 :
nobodyさん :2014/02/17(月) 20:15:12.48 ID:Vu1akjEB
鯖と蔵の区別がつかないのがぺちぱーの既定値だからな
なに作るか知らんけど掲示板とかそういうのだったらセキュリティに気をつけて。
別に俺に迷惑がかかるわけじゃないから何を作られても困らん
216 :
nobodyさん :2014/02/18(火) 02:30:03.17 ID:j8Kv6pSE
HTMLで使う記号をエスケープするのではなくて 本当に素のまま表示しているphpがあったんですがどうやってるんでしょう? header()で何か指定するとかですか? <br> ではなくて <br> と ソースコードもブラウザでの表示もされてるんですが。
ん?
ただ単にサーバの設定でPHPをhtmlで処理しないようにしているだけなんでしょうか。
ヒアドキュメントのことか?
>>219 いやヒアドキュメントではなくて
例えばmoji.txtに色々タグ書いてアップしても
サーバの設定でhtml処理されないようにしてたら
普通にテキストが表示されますよね?
PHPでもそういうのがあったので何かPHPから処理出来るのかなって。
でも単純にサーバの設定でPHPが動作しないようになってるだけなのかも。
PHPというよりも特定のファイルだけとかかも。
PHPともお前の人生とも関係ない
>>220 …単にエスケープして表示してるだけじゃないか?
>
>>222 いやそれならソース表示したら
<>タグとかがエスケープの記号になってるはずだけどなってない。
更に調べてみたけどやっぱしPHPファイルでPHPの処理をした後に
なんらかの形でエスケープしてない<>素のタグの文字列とかを出力してるみたい。
どうやってるんだろうなぁ。
>>223 んじゃあMIMEタイプが text/plain になってんじゃないの?
レスポンスヘッダみてみ
>>224 同じようにするには
こっちのスクリプトにも
header()で設定すればいいのかな?
…レスポンスヘッダみてみ。
HTTP/1.1 200 OK Server: nginx/1.2.6 Date: Mon, 17 Feb 2014 20:57:26 GMT Content-Type: application/x-javascript Connection: close Vary: Accept-Encoding こうなってました。 JavaScriptのコードを吐いてるみたいですね。 同じようにブラウザから見てもただのテキストにするには application/x-javascript にしとけば大丈夫でしょうかね?
やっぱし application/x-javascript にしたらイケました! PHPから文字列出力しても全部普通のテキストとして解釈されます。 ちなみに、text/plain ではダメでした。 レスくれた方、ありがとうございました。
>>227 実際に返却しているものがJavaScriptのコードかどうかはそれからじゃわからないけれど。
> application/x-javascript にしとけば大丈夫でしょうかね?
JavaScriptのコードを出力したいのなら。
>>229 出力されているのはJavaScriptのコードでした。
自分がやりたいのもJavaScriptのコードの出力です。
<script src="test.php"></script>
でtest.phpから素のJavaScriptのコードを出力したら
PHPの処理とJavaScriptの処理が一緒に出来てたページがあったので
それと同じような事をしたかったんです。
>>230 IEじゃなくてChromeなんですが
text/plainだとタグとかが処理されちゃってますね。
みなさんありがとうございました。
なんか意味不明なんだが。 エスケープせず、そのままタグを出力すればいいんじゃないの。
Content-type:text/html <?php echo '<script>alert("hello");</script>';
type="text/javascript" つけてないからだろう
>>234 が正解だと思う。
headerがどうとか、Content-Typeがどうとか難しく考えすぎ。
つーか基礎の基礎がわかってないっぽい。
そんな事は分かってないとあの質問はできんよ。
>>232 余談だけれど、text/plainをつかいたければ、レスポンスヘッダで X-Content-Type-Options: nosniff を送信する。
ブラウザが勝手にファイル形式を判断して適当に処理しちゃうのを防ぐ。
>>236 だけど、基礎がわかってないのは自分の方でした。
JSからPHPを呼び出して、JSとして実行できるんだね。
知らなかった。
www.phppro.jp/phptips/archives/vol5/2
質問者の疑問点の解決策はここの注意書きにあった。
www.res-system.com/weblog/item/383
PHPから動的にJSを出力できると確かに便利だね。
プロトコル抜く意味がわからんわ hだけ抜くのも意味あんのかよって思うけど、全部抜いて何がしたいの
>>239 わかってないと思ったのなら黙っておくのがよい。
>>241 いやそんなんわかってるけど
今回必要か?って話
レベル低くてhttp入れると書けない人もいる
>>244 必要かどうかという話なら、どんなときでも必要無い。
248 :
nobodyさん :2014/02/19(水) 13:03:15.14 ID:uro2XKIN
210です。 みなさん、ありがとうございます。
249 :
nobodyさん :2014/02/19(水) 18:33:16.42 ID:WOyb+TV3
配列を正規表現で確認する方法ってないでしょうか? $array = array('test'); preg_match('/(test)/', $array); として、これならエラーになりますが、 preg_match('/(test)/', $array[0]); これだとtrueになります。 foreachで$arrayを一件ずつ調べる方法とかではなく、 配列自体を正規表現にかけて、指定の文字列が含まれているか 判別する方法があれば教えて下さい。
>>249 PHP 配列 正規表現 でそのものズバリでるやん
>>249 あのさ、そもそも、例に上げてる
$array と $array[0] が、
別のものを指してるって気が付かんの?
正規表現とかじゃなくても、普通の比較でもその両者は違うだろ
254 :
nobodyさん :2014/02/20(木) 11:11:47.59 ID:FjcGtyDL
メモリエラー(memory_limitがオーバー)した場合、 メールで警告文を送りたいのですが、 try catchみたいなので、実行できないですかね? メモリエラーするとPHPの実行自体が止まってしまい、 メール送信できないのですが、良い方法があれば教えてください
register_shutdown_function あたりに仕込めば取れるっしょ
256 :
254 :2014/02/20(木) 11:58:18.75 ID:???
>>255 出来ました!クラス内でも使えるし、こんな便利な関数があったんですね!
関数実行した後に画面をリロードすれば、エラーメッセージも表示しないし、
求めていた対策が出来そうです。ありがとうございました。
258 :
nobodyさん :2014/02/20(木) 16:26:17.05 ID:5OYsJS7P
phpのソースコードの出てるサイト知らない? 例えば、htmlspecialcharsがどのようにCで書かれてるか、とか 内部関数がどういう風に書かれているか調べたい
PHP.net
260 :
nobodyさん :2014/02/20(木) 16:52:41.58 ID:5OYsJS7P
マジで? htmlspecialcharsで検索してみたけど、いつものマニュアルページに飛ばされた ざっと見直してみたけどどこに書かれてる? もしよければurl教えて欲しいんだけど
262 :
nobodyさん :2014/02/20(木) 17:01:20.30 ID:5OYsJS7P
なるほど、ハックせぇってことね Webサイト上で見れれば楽だったんだけどなぁ
助かる 携帯からだとソースコード見れないから ありがと
>>262 > なるほど、ハックせぇってことね
ソースコード見たい→ソースコードの取得方法へのリンクに対する反応にしちゃおかしいね。
> Webサイト上で見れれば楽だったんだけどなぁ
リンク先にgithubへのアンカーがあるんだけど。
266 :
nobodyさん :2014/02/22(土) 21:56:16.36 ID:vuNRI6C8
両方ともGET。 とりあえずスレ違いだから細かいことはサーバ関係のところで聞くと良い。
268 :
nobodyさん :2014/02/22(土) 23:41:52.03 ID:vuNRI6C8
すれ違いすいませんでした
まあ PATH_INFO で
270 :
nobodyさん :2014/02/25(火) 15:39:10.19 ID:WY/QKLno
>>270 $data = simplexml_load_file(file_name or url);
foreach($data->item as $item){
print '<a href="'.$item->link.'">'.$item->title.'</a>' . PHP_EOL;
}
272 :
266 :2014/02/26(水) 02:34:55.65 ID:yQIC0gZ6
ごめんなさい。何日か調べてみたのですが、どこで聞いていいのか分かりませんでした。 できましたら誘導お願いします。
>>272 mod_rewriteによるリダイレクト処理
メリットとしてはURLが静的に見えることによって
独立したページとして検索エンジンで効果を発揮する
275 :
266 :2014/02/26(水) 03:07:45.29 ID:yQIC0gZ6
>>275 使い分けだけど、前者はURLに見える。後者はURL+GETパラメータに見える。
この違いによってサーチエンジンの解釈と挙動が変わる。
あとは適当に調べて。
mod_rewriteは相対リンクが上手く動かなくなるからあまり使いたくないな。 でも便利なので使っちゃう・・・と。
>>277 それは使い方が悪い。
公式マニュアルをよく読んでから使おう
PHP関係ないし
280 :
nobodyさん :2014/02/26(水) 17:15:37.34 ID:izW9LgAW
Mainというフォルダにindex.phpというスクリプトとa,bという2つのフォルダがあります。 Main/index.phpからフォルダaの中のinc1.phpを相対パスで呼び出し(include 'a/inc1.php';)、 またそのinc1.phpからフォルダbの中のinc2.phpを呼び出したいです。 この時に、include 'b/inc2.php';のようなindex.phpからの相対パスではなく、 include '../b/inc2.php';のようにinc1.phpからの相対パスで呼び出したいです。 どうすれば良いのでしょうか?
include( dirname(__FILE__).'../b/inc2.php' );
「../」じゃなくて「/../」じゃないとダメじゃない?
そだね。 あと、今なら dirname(__FILE__) は __DIR__ ですかね
あ、なんか俺癖のようにいつも__FILE__使ってたけど__DIR__もあるのか 今試せないから信頼できる値が得られるのか気になる
autoloadで楽になろう
286 :
nobodyさん :2014/02/26(水) 19:56:42.04 ID:izW9LgAW
phpでsqliteを使っています。 select文でソートして取り出す時、DESCを指定しているのですが空のカラムが先頭に出てきます。 この空を0より後に出したいのですが、色々検索して調べてみたら以下でできるような記述がありました。 ORDER BY timestamp IS NULL DESC, timestamp DESC しかしこの指定では出力結果は変わりませんでした。 他に何か方法などありませんでしょうか?
289 :
287 :2014/02/27(木) 07:48:14.44 ID:PIInT38U
>>288 すいませんでした。
【OS名】FreeBSD
【PHPのバージョン】5.2.17
【連携ソフトウェア】sqlite
【質問内容】
phpでsqliteを使っています。
select文でソートして取り出す時、DESCを指定しているのですが空のカラムが先頭に出てきます。
この空を0より後に出したいのですが、色々検索して調べてみたら以下でできるような記述がありました。
ORDER BY timestamp IS NULL DESC, timestamp DESC
しかしこの指定では出力結果は変わりませんでした。
他に何か方法などありませんでしょうか?
php使ってるだけでsqlの問題じゃねーの
だから
>>1 と
まぁIDも出してなかったけど
データの中身がどんなもので
どういう結果が欲しいのか
最低でもそれ書かないと言葉だけじゃ意味わからんで
291 :
287 :2014/02/27(木) 08:10:17.63 ID:???
>>290 sqliteで調べたんですが、IS NULLを使えばできると書いてあってその通りにやったんですができませんでした。
DBMSによるという記述があったのでPHPが関係しているのかと…
データの中身は数字なんですが、DESCを指定すると以下のように出てきます。
空を最後にしたいです。
空
10
9
8
1
0
先頭の要素を消して最後に付け加える
294 :
287 :2014/02/27(木) 09:05:29.91 ID:???
>>292 すいませんが、291は簡単にしただけで実際は30000件ほどのデータなのでできるだけシンプルな方法にしたいです。
sqliteスレで聞いた方がよさそうですかね?
お騒がせしました。
クエリーだけで期待する結果を出したいのなら sqliteスレで聞いた方がいいよ
296 :
287 :2014/02/27(木) 09:14:48.74 ID:???
297 :
287 :2014/02/27(木) 09:15:29.60 ID:???
>>295 はい、そうしてみます。
みなさんすいませんでした。
>>293 の説明をみると
select * from data where data is null;
でdataカラムの値がnullであるものを取得しているそうだが
>>289 だけのクエリー文だと
「where」と「どのフィールドに対して」という指定が足りないようにみえる
あ 言い方おかしかったな select * from doclist where title is not null; このクエリーで doclistテーブルのtitleフィールドがnullではないものをすべて引っ張ってくる って意味だと思うんだが このクエリーで言うところのwhere,titleがないのでは?
質問を取り間違えていた 失礼
>>296 のやり方でできないのなら
空かそうでないかソートしてからそれらを連結とかなのかな?
とりあえず自分は分からないので頑張ってください
301 :
287 :2014/02/27(木) 09:31:44.41 ID:???
>>299 where句の代わりにorder by句を使ってるって感じだと思うんですよね。
296にあるように
order by num is null asc
でnumフィールドがnullであるものをascで並べるって感じで
order by num is null asc
と
order by num asc
を両方やるのが
order by num is null asc, num asc
って感じではないかと思うのですが…
302 :
287 :2014/02/27(木) 09:33:33.69 ID:???
>>300 あ、いえ親切にありがとうございます。
やっぱり空のものは別に処理するしかないですかね…
処理量が倍になるのでできれば避けたいですがしょうがなさそうです。
ORDER BY timestamp IS NULL ASC, timestamp DESC とか?
304 :
287 :2014/02/27(木) 09:58:13.29 ID:???
>>303 それもやってみたんですが、296同様に並びが変わりませんでした。
すいません、原因がなんとなく分かってきたんですが、そもそも
SELECT * FROM comiclist where timestamp IS NULL
とかの文でtimestampが空のデータが引っ掛かりませんでした…
空なのにNULLではないなんてことあるんですかね?
sqliteのバージョンが2.8.17みたいなんですが、
そもそもこのバージョンではIS NULLに対応してないのかな…
もう完全にsqlの話じゃねーか
そりゃ空ってnullじゃなくて空文字いれたんでしょ そんなのにnull云々って話はないわ
まずは空文字のとこをnullにupdateするんだな それと今後挿入するsqlもnull挿入するように書き変えとけ
NULLと空文字ってsqlでは別の意味なんじゃなかったっけ?
309 :
nobodyさん :2014/02/27(木) 14:43:53.79 ID:B/xz5nFA
スーパーグローバル変数「$_REQUEST」の安全性について質問です。
$_REQUESTを使うことの危険性・脆弱性は何でしょうか?
$_REQUESTは、セキュリティの点で使用すべきではないとの記述を、
以前、書籍等で読んだ記憶があります。
ただ、$_REQUESTを使うべきではない理由についての根拠があいまいで、
$_GET、$_POSTそして$_COOKIEを使えるならそれを使えという主旨でした。
この主旨はわかるのですが、具体的にどう危険なのかをご教示して頂きたいです。
今回、$_GETと$_POSTデータの確認処理を共通化するにあたり、
$_REQUESTを使えたら便利と思い質問させて頂きました。
よろしくお願いします。
http://www.php.net/manual/ja/reserved.variables.request.php
>>309 $_REQUESTはダメ
本の通り$_GETなど使うように
簡単なとこでは、同名のキーがあった場合、どうやって判断するんだ?
どっから送信されたか曖昧だと思わないか?
>>上
なんかスレが進んでると思ったら....
サッサとSQLスレ逝け
同名のキーって普通にコードの設計ミスじゃない?
$_REQUEST使うなは、昔の話っぽいな。 今は request_orderにC入れないし、 予期してないキーの値受け取るなんて論外だし 予定してる値がgetで来ようがpostで来ようが問題ないつくりは可能だし、優先度は決められる。 request使うと問題起こす人がrequestつかなければ問題起こさない根拠はないよね。 と思ってたが、ちがってるなら訂正お願いします。
いちおう、PHP絡めてたから、答えるけど SELECT * from test ORDER BY IF(id is NULL,NULL,id) DESC; かなり自信なし。
自信ないなら試せばいいじゃん バカなの?
sqliteでif使えたっけ? つーか、使えても その式なんも変わらんのとちがうか? というか、そんなIF文、excelの式ぐらいでしか見たことねー ifnull( id , '')とかか?
SQLiteスレいけ バカ共が
>>312 postを想定してるとこにgetできたら弾くのが当たり前だ
2chの書き込みをgetでできたらurlクリックしただけでできてしまうだろ
318 :
309 :2014/02/27(木) 20:00:08.65 ID:ElZBAvnn
レスありがとうございます。とても参考になりました。
$_REQUESTだと
>>317 さんの言うとおり、リンクだけで投稿できる可能性があるのですね。
$_REQUESTで横着せず、きちんと、$_GETと$_POSTで処理を分けたいと思います。
ありがとうございました。
>>317 クリックしただけでPOSTできるだろ。
というか、それぐらいの意味しかない。
まさかそれをセキュリティと言うのではあるまいな。
>>319 誰もセキュリティとは言ってない
単に使い分け。無駄に突っ掛かるな
>>317 post制限ならそんな止め方じゃなくセッション使ったりとかもう少し複雑なことするでしょ
利点は大いに使わなきゃ
間違いなくテストしにくくなる request_methodで切り分けるか全部POST対応しとけばシステム的には大丈夫かもしらんが あと_requestって変数名はおかしいよな
なんかそのサイト使いにくそう
知能の低いゴミクズのお前にとって使いにくかろうがどうでもいいんだよ ぐたらない感想垂れ流してるゴミクズは早く消えれば?
ぶち切れ方が異常だな 同僚や客にも同じこと言われて溜まってるんだろうな
少なくとも、大した理由を上げられてないのは そこらのサイトと変わらんな。 指摘したら逆切れしてる始末だし。
2chのbbs.cgiでいうとメェルアドレェスにGETでNULL送るとキャップ出ちゃうバグ数年は放置されてたな ケツの穴大きすぎとか言われてた
それがPOSTに限定することで回避できちゃうと考えるあたりがマヌケ臭いな POST投げられたら同じじゃん
投げられたらってフォームのデフォがPOSTだと知らんのかなw
あるページに対するGETやPOSTは、送信する側からすればどうとでもできる。 フォームのデフォの意味はさっぱりわかんないけど、 methodのデフォルトは getだ。 requestで受け取ると問題が出ることはない。 ルールとして決めてるならともかく、 考えたり調べずにどっかに書いてあったら使うなといってるような人の方がなにかやらかすことが多いのではないか。
>>329 は?
なんだよこのあたりの常識も知らない超初心者かよ
ちなみにbbs.cgiの話もGETじゃなくてPOSTが正解ね いや低レベルなメソッドの違いと、話題の違いどっちに食いつくのかなと思って
知らなくてもPHPだとプログラム組めるからね
だから尚更危険なんだよな。 経験と共に身に付く安全設計の常識がないから。 えらそうに持論ぶちまける素人ほど会話が噛み合わなくて疲れる奴はいない。
でも見えない敵とだけかみ合ってる人は本当に疲れないのかという疑問は残ったね。
だからさGET POST両方に対応することは簡単なんだけど 自分のサイトにPOSTフォームしかないのにGETを受け入れるのは意味不明なんだってw
そらそーだ。どっちでも良いように作る理由はあんまりないし、 POSTだけを予期したプログラムでgetでも受ける理由は何にもない。 それ自体は誰も異を唱えてはいないだろ。
>>336 意味不明はおまえの頭だよ。
なんで必要性の話にねじ曲げてるの?
>>338 どんな必要性があるの?
テストしやすいから? 本番で禁止するならいいけどw
何で使っちゃいけないの? → 必要性ないじゃん 誰も必要性なんて話 してないだろ →どんな必要性があるの? これが話が通じない人の思考回路か。
>>339 危険性の話をしてたんだろ
なんで必要性の話を突然始めてんだよっての
自身の無知を素直に認められない奴が一番仕事のできない奴 こいつは常日頃から同僚に強いストレスを与えてるんだろうな
仕事の話はじめたぞwww
$_REQUEST「やめて! 私のために争わないで!!」
$_REQUESTは、PHP公式マニュアルだと、非推奨じゃないから、 適切に使うなら、使っても問題ないという解釈もできる。
普段使わないグローバル変数のことで言い合いするなよ
$_REQUEST = $_POST + $_GET; # request_order, variables_order に依存 という事を理解しているのなら好きに使おう 〜おわり〜
使ったことないけどGETで送ってもPOSTで送っても拾えるってこと?
351 :
nobodyさん :2014/03/01(土) 15:36:36.68 ID:n8n41uDi
$_POST['youso1']がnull、もしくは空文字だった場合、"abc"という文字列を入れたいと思いました。 そこで以下の様な関数を作ってみたのですが、 Undefined index: youso1 in <b>C:\xampp\htdocs\friday\chara.php</b> on line <b>69</b><br /> と言われます。 $_POST['youso1']=nullを引数として渡してしまったという原因は分かるのですが、こういう場合どのように作ればよいでしょうか? if(!isset){...}で一個一個見ていくしか無いでしょうか yousoは30〜50個ぐらいになる予定です(自作ブラウザゲームのキャラクターの登録に使用します) function nosettonullstring($a) { if (!isset($a) | $a=="") { return "abc"; } else { return $a; } } $_POST['youso1'] = nosettonullstring($_POST['youso1']); $query = "INSERT INTO ・・・ $st = $pdo->prepare($query); $st->bindValue(1, $_POST['youso1'], PDO::PARAM_STR);
POSTする際にHTMLのほうのnameをyouso[1]にすれば、PHP側では$_POST['youso'][1]、つまりyousoの配列が作れる。 そうすればあとはforeachとかで処理すればいい。 ちなみにyouso[]にすると0から配列を作ることができ。youso[]が複数あると自動的にpushされる。
353 :
nobodyさん :2014/03/01(土) 17:12:03.95 ID:n8n41uDi
$_POST['youso1'] = @nosettonullstring($_POST['youso1']);
postでもgetでもなんて中途半端すぎ
( ´,_ゝ`)プッ
狂ってるわけだ
360 :
nobodyさん :2014/03/02(日) 08:59:50.21 ID:0yNkJzDo
【OS名】win7 32bit 【PHPのバージョン】5.3.5 【連携ソフトウェア】xampp 1.7.4 【質問内容】 $date_beforeにmysqlのtimestampが入っており、 最新の順に並び替えるのを次のようにしてますが、 これが最良の方法でしょうか? もっと他に何か良い方法がありますでしょうか? $t=0; foreach ($date_before as $key => $val) { $index[$t]=$key; $date_after[$t]=$val; $t=$t+1; }
>>360 もっと良い方法というとSQLにORDER BY句を埋め込むのがよさそうだけど、それだとスレ違いになるからここじゃ答えられない
>>361 そうですか。
>>362 for($i=0;$i<5000;$i++){
$image[index[$t]];
}
のように使っているので、
最新:index[0]、古:index[4999]
最新の日付の順に最新の画像を順に画面に出してます。
これで最新の日付順に画像がソートされたことになります。
>>363 361が最良だよ。データ取得時にソートもしておくのが定石。
SELECT something FROM sometable ORDER BY date_column DESC
PHPでやりたければ、
>>363 でもいいけど無駄に近い。
>>363 $date_beforeの順序と、$indexと$date_afterの順序が同じように見えるんだけど
$date_beforeにはどういう順序で入ってるの?
>>360 よく分からんが、そのコードを改良するなら
$index = array_keys($date_before);
$date_after = array_values($date_before);
とするかな。
内部的に2回ループが動くじゃん?という懸念があるかもしれないので、計測したほうがいいかも。
もしくはこう
foreach ($date_before as $key => $val) {
$index[]=$key;
$date_after[]=$val;
}
$imageのインデクスは結局$date_beforeのインデクスをコピーしただけだから、 これで降順になるならもともと$date_beforeはソート済み $imageは未ソートっぽいので、これを日付順にせよというのがクライアントの要求だったようだ
DBを普段使ってる人とそうでない人との感覚の違いだな
371 :
nobodyさん :2014/03/03(月) 17:53:33.06 ID:e1uclpbn
数値の桁数を調べたいのですが、 int(553)は3桁、int(057)は2桁、 float(96.15257)は7桁というように、 桁数というより小数点を抜いた文字数を調べたいのです。 どうすれば良いでしょうか?よろしくお願いします。
echo preg_match_all('/[0-9]/',555); echo preg_match_all('/[0-9]/',057); echo preg_match_all('/[0-9]/',96.15257);
373 :
nobodyさん :2014/03/03(月) 18:56:15.04 ID:e1uclpbn
>>372 ありがとうございます!
これはなんで057が3桁ではなく2桁になるのでしょうか?
0.01234 とかはどうなるのが正解?
>>371 桁数なら分からんでもないが文字数調べてどうすんの?
ソッチのほうが興味あるわ
いや、371の言うのはいわゆる桁数だろう
057がもじれつに変換されるときに0が取れてるから 0で始まるリテラルは8進数なので、5*8^1 + 4*8^0 = 47のふたけた 基数10と8で桁数がずれるときは問題になるだろう 本当に8進数の桁が欲しいのかわからんけど
式typoしたけど察して
>>377 057を文字列に変換?したら、当然 '057' だろ?
>>376 浮動小数点っていうか、実数の桁?
意味あるの?
382 :
360 :2014/03/03(月) 19:43:39.29 ID:???
すいません。 派遣先切られて落ち込んでました。 説明不足でした。 for($t=0;$t<10;$t+=1){ echo("日付: $date_before[$t]"); echo("画像: $file_name[$t]<br/>\n"); } //カウンターのアルファベットは$tとする @arsort($date_before);//日付最新を上に並び替え $t=0; foreach ($date_before as $key => $val) { $index[$t]=$key; $date_after[$t]=$val; echo("$index[$t]<br/>\n"); echo("$date_after[$t]<br/>\n"); $t=$t+1; } for($t=0;$t<10;$t+=1){ echo("日付: $date_after[$t]"); $a=$index[$t]; echo("画像: $file_name[$a]<br/>\n"); }
383 :
360 :2014/03/03(月) 19:45:20.72 ID:pVEl0/Ty
この結果が 日付: 2014-03-02 10:04:09画像: 2014030210040966219.png 日付: 2014-03-02 09:43:17画像: 2014030209431718080.jpg 日付: 2014-03-02 09:43:48画像: 2014030209434853288.jpg 日付: 2014-03-02 09:43:49画像: 2014030209434924738.png 日付: 2014-03-02 09:43:50画像: 2014030209435021928.png 日付: 2014-03-02 09:43:51画像: 2014030209435140509.png 日付: 2014-03-02 09:43:52画像: 2014030209435233766.jpg 日付: 2014-03-02 09:43:53画像: 2014030209435317388.jpg 日付: 2014-03-02 10:04:06画像: 2014030210040694987.jpg 日付: 2014-03-02 10:04:07画像: 2014030210040727698.jpg 0 2014-03-02 10:04:09 9 2014-03-02 10:04:07 8 2014-03-02 10:04:06 7 2014-03-02 09:43:53 6 2014-03-02 09:43:52 5 2014-03-02 09:43:51 4 2014-03-02 09:43:50 3 2014-03-02 09:43:49 2 2014-03-02 09:43:48 1
384 :
360 :2014/03/03(月) 19:46:14.31 ID:pVEl0/Ty
続き 2014-03-02 09:43:17 日付: 2014-03-02 10:04:09画像: 2014030210040966219.png 日付: 2014-03-02 10:04:07画像: 2014030210040727698.jpg 日付: 2014-03-02 10:04:06画像: 2014030210040694987.jpg 日付: 2014-03-02 09:43:53画像: 2014030209435317388.jpg 日付: 2014-03-02 09:43:52画像: 2014030209435233766.jpg 日付: 2014-03-02 09:43:51画像: 2014030209435140509.png 日付: 2014-03-02 09:43:50画像: 2014030209435021928.png 日付: 2014-03-02 09:43:49画像: 2014030209434924738.png 日付: 2014-03-02 09:43:48画像: 2014030209434853288.jpg 日付: 2014-03-02 09:43:17画像: 2014030209431718080.jpg
385 :
360 :2014/03/03(月) 19:51:48.48 ID:pVEl0/Ty
このように、一番上に最新の日付とその日付にアップロードされた 画像がくるように並び替えています。 このほかカラムには、ナンバーがありこのナンバーは 1→2〜10→1とループしていきます。
387 :
nobodyさん :2014/03/03(月) 20:02:57.05 ID:e1uclpbn
>>375 外部サービスのAPIを使うときに、整数でも小数でも8桁までの数字を入れるというルールがあり、
ちゃんと8桁に収まっているかをしらべたかったのです。
ありがとうございました!
389 :
nobodyさん :2014/03/04(火) 04:49:41.72 ID:PNP6rdg1
ダブルコーテーションの中でも変数が有効になることを今知ったのですが、 こういう仕様に名前は付いているのでしょうか? また、他にこういう仕様の言語ってあるのでしょうか? 趣味でプログラムやって来ましたが、10年間気付きませんでした… $a = "abc"; echo "$a"; //abcが出力される
そんなん初歩だろ
最初に書いてるわ
ていうかそれ推奨されてないから忘れたほうがいい
>>3 の5に書いてる通り{}で囲むならOK
あごめん、してたか
394 :
nobodyさん :2014/03/04(火) 10:14:06.26 ID:jWPe5MHZ
{}抜きはやめとけって話じゃないか? これが非推奨だったらPHPのメリットかなり落ちる
396 :
nobodyさん :2014/03/04(火) 10:19:55.91 ID:PNP6rdg1
397 :
394 :2014/03/04(火) 10:29:58.04 ID:jWPe5MHZ
>>395 {}で囲むならOKという話だったのですね。
ダブルクオート内の変数展開自体が非推奨と早とちりしてしまいました。
有難うございました。
398 :
nobodyさん :2014/03/04(火) 10:35:21.43 ID:0dtpeKMr
PHPで文字列を分割する方法について質問です 例えば「"赤 青" 黄色」という文字列があるとして「赤 青」と「黄色」に分割したいです いい方法はあるでしょうか
ルールがいまいちわからん 半角スペースで分割したいがダブルクオーテーションがついてたら分割しないってことか?
>>398 何に注目して分割するかに依るけどその情報がないぞ
先頭のクオーテーション内とその後ってことなのか
クオーテーション外の空白で分割なのか
それとも単に2〜4文字と8〜9文字なのか
1番目なら
$str = '"赤 青" 黄色';
if(preg_match("/^\"(.+?)\"\s*(.+)$/",$str,$mt)){
print_r($mt);
}
401 :
nobodyさん :2014/03/04(火) 11:04:18.97 ID:0dtpeKMr
情報不足ですみません
基本的に半角スペースで分割したいのですが、
ダブルクォーテーションに囲まれている文字列はひとつの塊として分割したいです
>>400 を参考に考えてみました
$str = '"赤 青" "黄色" 白 黒';
if(preg_match_all("/\"(.+?)\"|([^ ]+)/u",$str,$mt)){
$arr = array_merge($mt[1],$mt[2]);
$arr = array_filter($arr);
print_r($arr);
}
これでいけそうです ありがとうございました
var_dump(str_getcsv('"赤 青" "黄色" 白 黒',' ')); CSVの' '版でしょ?
株系のサービスを作りませんか
404 :
nobodyさん :2014/03/04(火) 11:56:16.72 ID:0dtpeKMr
>>402 最近CSVを使っていなかったのですっかり忘れていました
シンプルでいいですね
スレ間違えたさーせん
なるほどなー
>>403 株価のAPIをphpで使いやすい形式で提供している証券会社とかないじゃない。
あったら作ってみたいけどね。
Webサービスで提供されてたらphpでも一発で取得できるべ
staticだらけやな
高度かどうかは知らないけど使い始めて1年2年といったところか staticは別に構わないがコメントの不親切さとエラーチェックの甘さ、リテラルの書き方、 どれだけ長くても関数を改行しない点等が少しイラッとする程度
getTablesStruct()ってSQLの構造を書いてるようだけど何のためにこんなことしてんだろう こんなDBの構造示すようなものコードに書かないほうがいいんじゃ ER図とか別途作成しておくならともかく
>>412 Bind用かテーブルの構築用じゃない?
むしろソースコードが漏れた原因が気になる。
データも取られてるし 単にサーバに入られただけだろ
mt.goxのはどう質が悪いのかも書いてくれたら教材に使えたのにな DBクラスのほうを見てみたいわ
戦争に同盟参戦したときって、「盟主が自国のために和平可能」のチェック入れてる?
すまん誤爆
419 :
nobodyさん :2014/03/05(水) 00:58:11.03 ID:tWUcD/Vu
PHPのmcrypt使って暗号化した文字列を別の言語で復号化しようとしています。
その際に問題になってるのが、暗号化モードがtripledesで24byteの文字列を使わなきゃいけないのに
既存の実装が24byteじゃない文字列をキーにしてました。
mcrypt-generic-initの第二引数のところです。
http://jp2.php.net/manual/ja/function.mcrypt-generic-init.php > キーの最大長は、mcrypt_enc_get_key_size() を コールした際に得られるキー長であり、
> この値より小さな値は全て有効です。
この2行目、小さな値が有効って具体的にどんな処理になっているのでしょう?
パディング処理とかが走っているんでしょうか?
mcryptのソースを見てもC言語なのでよく分からず…。
memmove関数ってところでパディングのようなことをやってるようにも見えるのですが…。
>>420 ありがとうございます。客先で試してみます。
1ヶ月前からHTMLプログラム始めました。 そろそろ他のプログラムもやってみたいです。 パイパンとかルーピーみたいな名前のをすすめられたのですが、 ピーエイチピーをやりたいと思います。 皆さんよろしくお願いします。
423 :
nobodyさん :2014/03/05(水) 15:45:17.15 ID:DePJJDbI
掲示板のように ユーザの入力値をデータベースに格納して読み出してhtmlとして表示する場合 sqlインジェクションとxssの対策はどういう順番で行うべきですか?
>>423 まずプログラムでやらなきゃいけない事を、端的に書き並べてみな
どこでチェックしなきゃいけないかが見えてくるだろ
>>423 a) sqlインジェクション対策・・・入力値をDBに格納する前(直前)
b) xssの対策・・・htmlとして表示する前(直前)
順番は問わない。設計による。
通常は、DB処理を先にして、その後、表示処理をするから、
その場合には、a.b.の順番になる。
426 :
nobodyさん :2014/03/05(水) 16:55:56.66 ID:TcsDhfPg
foreach ($value1 as $key2 => $value2) { print "{$key2}:{$value2}"; } この$key2と$value2をprintではなく 二次元配列として1つの変数に収納していくにはどのようにすればよいですか?
$arr[$key2][$value2] = "{$key2}:{$value2}"; てこと?
$a[$key2]=$val2 ?
今ひとつどういう形にしたいのかわからないな
$hoge[] = "{$key2}:{$value2}"; とか?
$hitotunohensuu[] = [$key2 => [$value2]];
$ret[] = array( $key2 , $value2); かもしれない
433 :
nobodyさん :2014/03/05(水) 17:20:43.00 ID:TcsDhfPg
>>430 これでいけました!
配列を理解しきれてないので、うまく説明できずにすいませんでした。
ありがとうございました。
それ1次元や!と突っ込みかけたけど、Cを少しだけ勉強したことのある初心者なのかもと思った。
それ、2次元とは言わない
二次元配列じゃねえ
自分で書いておいて何だけど1次元やな…
ま、まあ文字列は配列風にアクセスできるから・・・
439 :
nobodyさん :2014/03/05(水) 17:30:43.11 ID:TcsDhfPg
小数点第2位で四捨五入して、常に小数点第一位まで表示したいのですが、 下記だと1000単位の「,」が入ってしまいます。 replaceなりすれば出来るのは判るんですが、流石にアホらしい方法だと思うので 何かいい方法ありませんか? $X = 123456.789; echo( number_format(round( $X * 10)/10 ,1 ) )."%"; 結果:123,465.8
$X = 123456.789; echo number_format($X,1,'.','' ); 四捨五入してくれるよ
$X = 123456.789; printf("%.1f", $X);
なんでそんな無駄なことしてんの? $X = 123456.789; echo round($X, 1);
無駄なことしてんの?(キリッ
namespace Moneyってww こんな汎用的なのつけるならないほうがマシwww マウントゴックス!
>>444 図星で反論できなかったんだね、まぁ元気出せw
>>445 namespaceは後付け臭いんだよなぁ
roundの精度に問題があるからだろ *10/10はどうかと思うが
ってバージョン書いてなかったな 最近のroundはだいぶいいらしい
array() これはもうやだ
うわ随分懐かしいサイトだな まだあったのか
>>452 昔、そこ見て書いたソースがどっかにあるわ…
切捨てじゃなかった、四捨五入ね・・・
>>450 wordpress層を除くとガラッと変わりそうだけど
会社は5.5、外部に出すものは5.4にしてるよ
あのグラフはサーバに入ってるPHPじゃなくて どのバージョンを意識して作ったものかっていう統計? serverじゃなくてwebsitesって書いてるよなあ でもそんなの調べようがないし謎だわ websitesってのはサーバのことなんだろうか
会社が新しいものより安定志向なんで5.3でまったりしてるけど 5.7とか大きく変わった点とかあるの?
5.7とかまだ出てなくね? 5.6はたいした変更点もないような なんかperlっぽくなってる気がする 5.4の配列ショートカット[]と5.5のfinallyサポートはいいな トレイトとかジェネレータとかわからんw
>>459 サンクス、[]は見慣れるまでがキモイかも、無理して使わなくても良いだろうし使い所だね
トレイトは見てみたらこれは結構便利くさい、多重継承が欲しいこと稀にあるから
finallyもあればあったで便利だな
ちょっと5.5試してみる
>>460 トレイトの有無は設計から大きく変えるから
5.4以上に行ってしまうと戻れないな
>>458 5.6でRubyのスプラット演算子やオプショナル引数の配列化みたいな事ができるよ
じゃあ名前付き引数も?ないよそんなもの
function f($a, $b = null, ...$c) { return $c; }
# わかる
assert(f(1) === []); # pass
assert(f(1, 2, 3, 4, 5) === [3, 4, 5]); # pass
assert(f(1, 2, ...[3, 4, 5]) === [3, 4, 5]); # pass
assert(f(...[1, 2], ...[3, 4, 5]) === [3, 4, 5]); # pass
# まぁわかる
assert(f(1, 2, ...[123 => 'v']) === ['v']); # pass
# arrayは順序付き連想配列だもんな、OKOK
assert(f(1, 2, ...[1 => 'a', 0 => 'b']) === ['a', 'b']); # pass
# クソァ!
assert(f(1, 2, ...['k' => 'v']) === ['v']); # Catchable fatal error: Cannot unpack array with string keys
>>464 だけじゃないよ。
そうやっていつも必要な機能を落として怒られてるの?
>>464 常に小数点以下一位を表示できるか
数値を変えて試してみるといいよ
0.05 -0.00が出てきたらアウトだしな
468 :
nobodyさん :2014/03/07(金) 18:23:42.03 ID:Y3p7/jDT
$str = ereg_replace("(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"".TARGET."\">\\1\\2</a>",$str);
上記の処理でコメントされた文字列の中のURLを自動リンクしようとしています。
コメントはimgタグのみ許可しているので、
@
http://aaaa.com A<img src="
http://aaaa.com ">
@のような場合は自動リンクしたいのですが
Aの場合は自動リンクしたくないです。
この場合どのように条件式を書けばいいですか?
469 :
nobodyさん :2014/03/07(金) 18:25:10.67 ID:Y3p7/jDT
$str = preg_replace("{(?<!src=\")(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)}","<a href=\"$1$2\"target=\"".TARGET."\">$1$2</a>",$str); src="に続く場合は除けばいいんだろ? eregはやめようよ。
471 :
nobodyさん :2014/03/08(土) 09:27:18.48 ID:wySctgna
池田小学校の児童八人を殺害した宅間守 宅間守の社会に対する被害者意識は 子供の頃に体験した招集ストーカーによって培われた 当時宅間守の親は近所の創価学会に批判的な人物を 子供を襲う危険な性犯罪者とし 宅間守とその友人に危険人物の顔をお覚えされるなどとして 再三に渡って招集ストーカーを行っていた 宅間守は遊び半分で嫌がらせを楽しみながらも 親からは「お前はいつ襲われるか分からない被害者なんだ」と言われる こうして犯罪を繰り返しながらも被害者面する生き方を教え込まれた
472 :
nobodyさん :2014/03/08(土) 10:07:07.19 ID:vNXlneYe
利用規約の同意→問い合わせフォームという形にしたいのですが、 フォームへの直アクセスを防ぎたい場合、 if (strstr('利用規約のURL', $_SERVER['HTTP_REFERER']) == false) { // エラーメッセージ } とする書き方でも問題無いですよね? 出来ればセッション無しでシンプルにやりたいと思っています。
業務用の作ってるっぽいけど リファラーとか無意味なのはプロなら分かるはずだぜ?
技術的には穴があるけど、むしろ法的に抜け道を通ってきた相手に規約への同意が拘束力あるかが問題になる気もする 抜け穴を通ることで明確な利益を得られるわけじゃないだろうし リファを弄ってきた相手に対する規約の拘束力があるかはさすがにしらん
475 :
472 :2014/03/08(土) 10:20:26.60 ID:???
>>473-474 リファラスパム(偽装)とか考えられますが、
フォームの入力チェックはしているので、
そこまで強固なチェックは必要ないと考えています。
ですので、単純に
>>472 の書き方で最低限(非技術者)に対する
チェックは出来ているのか否かをアドバイスいただければ幸いです。
私見だけど ・サービスレベルの制限ではない(有料コンテンツ等) ・リファラの偽装自体、基本的に悪意がない限りは行わない(XSRFとかで飛ばされる可能性はあるけど) ってあたりでコンシューマ向けの制限としては問題ないんじゃないかと思う
477 :
nobodyさん :2014/03/08(土) 10:34:32.73 ID:wySctgna
池田小学校の児童八人を殺害した宅間守 宅間守の社会に対する被害者意識は 子供の頃に体験した招集ストーカーによって培われた 当時宅間守の親は近所の創価学会に批判的な人物を 子供を襲う危険な性犯罪者とし 宅間守とその友人に危険人物の顔をお覚えされるなどとして 再三に渡って招集ストーカーを行っていた 宅間守は遊び半分で嫌がらせを楽しみながらも 親からは「お前はいつ襲われるか分からない被害者なんだ」と言われる こうして犯罪を繰り返しながらも被害者面する生き方を教え込まれた
>>475 利用規約ページからのリファラーが条件なら、strstrの処理はいらないんじゃない?
単純に、これでよさそう(より制限的になる)。
if ('利用規約のURL' !== $_SERVER['HTTP_REFERER'])) {
// エラーメッセージ
}
あとは、利用規約への同意を、チェックボックスにチェックしてもらって、
それを確認している作りならば問題なさそう。多分。
できれば、ワンタイムトークンとか組み入れた方が良いけど。
リファラを送らない設定をしてる人は問い合わせできないとか。
480 :
472 :2014/03/08(土) 10:40:16.40 ID:???
>>476 ,478
利用規約同意のチェックはしています。
ワンタイムトークンはセッション無しで出来ますかね?
調べてみます。皆さま、アドバイスありがとうございました。
POSTフォームでhiddenでキーを設定すればいいんじゃないの
リファラ挟むのはいらないんじゃね なんでセッションを使うのを拒否するのか・・・ 数行のコード入れて変数を作るだけなのに難しいものでもないでしょう
問い合わせに利用規約の同意が必要なの自体がどうかとも思う
>利用規約の同意→問い合わせフォームという形にしたいのですが、 >フォームへの直アクセスを防ぎたい場合、 この間がPOST処理なら、 POSTメソッドを確認すれば、直アクセスは防げる。
なんか必要があったとしても フォームの送信ボタンで兼ねちゃっても構わないと思いますがね。 問い合わせフォームに規約に同意しないと見られては困るものがあるんですかね。
>>484 だけど訂正
POSTメソッドを確認しても、直アクセスは防げないね。ゴメン。
>>480 >ワンタイムトークンはセッション無しで出来ますかね?
アクセスごとにランダムでキーを生成できて、そのアクセスだけと紐付けした上でフォームへキーを渡す方法があるならいけるよ
自前でセッション実装してるようなもんだな
レッツはPHP4時代の古いコードだからな
PHP厨はム板に来ないでくれ 迷惑だから
逆もまた然り
加齢臭がするから華麗にスルー
495 :
nobodyさん :2014/03/10(月) 10:11:39.87 ID:doEo9Ey2
md5関数によるパスワードの暗号化について質問です。 パスワードにsaltを付加し、md5で暗号化した場合、 復元される可能性はどれくらいあるでしょうか? atwikiでパスワードの漏出・復元が問題となっているようで、 とても気になります。 (こちらはsaltの付加がなかった為、復元されてしまったようです。)
そりゃブルートフォースアタックの確率みたいなもんじゃね 短ければ即復元できるし ながければそれにかけるリソースがもったいないと攻撃者が感じるだろう
>>495 saltが無かったとしても、復元できるのは辞書攻撃とかに弱いパスワードもしくは短いパスワードだったんじゃないのかな。
saltがあった場合、saltが判明していれば、saltが無いのと同じ。判明してなければ判明するまで基本的に無理。
498 :
495 :2014/03/10(月) 12:07:37.27 ID:Z0OipPDv
>>496-497 ありがとうございます。
自サイトで、長めのsaltの付加をしておいて良かったです。
ただ、md5ではなく、sha1とかにしておけば良かったと少し後悔。
saltまで流出すると、復元されてしまうのは怖いですが、
レンタルサーバー自体に脆弱性が有る場合には、対策が難しいですよね。
>>498 だからパスワードは長くしろといわれるんだよ。
文字の種類も混ぜろといわれるでしょ。
安易なパスワード設定は、キャッシュカードの暗証番号に誕生日設定するのと同じような愚かさだから、
設定したユーザにもある程度の責任があるとも考えられる。
昔はパスワードをメモすると笑われたけど メモしないと覚えられないくらいに複雑じゃないと安心できんな
そういう俺は1234だけどなw
前任者から引き継いだ関数をまとめたファイルが100kbyteほどあります。 これをユーザーサイトでinclude_onceしているのですが100kbyteというのは普通なんでしょうか? 読み込むには大きいと感じますし、ユーザーがアクセスするごとに読み込んでいるとなると結構な負担になるのではと思っています。
504 :
nobodyさん :2014/03/10(月) 14:53:10.37 ID:6p2nG/Rd
506 :
nobodyさん :2014/03/10(月) 15:05:08.74 ID:4kaXJqs7
それすらわからないからぺちぱーなんだよ
>>497 >saltが判明していれば、saltが無いのと同じ。
間違ってるぞ
>>508 どの段階での違いの話をしているのか分からん。
質問者が求めてるであろうブルートフォースアタックに対しては
saltが無い場合とsaltが判明している場合に差はないよ。
salt判明したら意味ないだろ
そらそうだw
>>509 >>495 >atwikiでパスワードの漏出・復元が問題
この段階での話
質問者が求めてるのは正しい暗号化の方法じゃないのか
長いsaltつけました、一回ハッシャ化しました、だけじゃ不十分だよっていうのが言いたかった
言葉足らずだったかもしれない、ごめんなさい
ちなみに、5.6から実装されたpassword_hash()とかsalt付きハッシュ返ってくるぞ
わざわざ分けて保存するのか?
ハッシャ化ってなんだ、ハッシュ化だ
514 :
512 :2014/03/10(月) 16:48:13.96 ID:???
>5.6から実装されたpassword_hash() 今調べたら、5.5からでした ごめんなさい
>>512 正しい暗号化の方法を知りたいのか、
>>495 がすでに実装している暗号化手法がどれくらい安全かの確認をしたかったかは不明。
個人的には後者だと予想しているけれど。
で、そもそも疑問文はこれですよ。
> パスワードにsaltを付加し、md5で暗号化した場合、
> 復元される可能性はどれくらいあるでしょうか?
>>497 でsalt無しの場合について書いたのは、saltが無ければいくらでも復元できると思っているフシがあったから。
> (こちらはsaltの付加がなかった為、復元されてしまったようです。)
>>512 の、わざわざ分けて保存するのか?についてはもう何が言いたいのか全然わからないです。
連レスごめん。 > 質問者が求めてるのは正しい暗号化の方法じゃないのか > 長いsaltつけました、一回ハッシャ化しました、だけじゃ不十分だよっていうのが言いたかった > 言葉足らずだったかもしれない、ごめんなさい これに関しては同意です。
517 :
512 :2014/03/10(月) 17:10:46.06 ID:???
>>515 >個人的には後者だと予想
それを理解してる人は
>>495 みたいな質問しないだろ
>そもそも疑問文はこれですよ。
その質問が
>>495 の意図とは限らない。正しいというか安全な暗号化方法をしりたがっているのかもしれない
>>510 これよ
意味あるんだよ。意味ないのは安全な暗号化されてない場合
>わざわざ分けて保存するのか?についてはもう何が言いたいのか全然わからないです。
わけてかくね
518 :
512 :2014/03/10(月) 17:15:50.31 ID:???
わけてかくねってレスを分けるっていうことだから、紛らわしくてごめん
php使う人5.5の実行環境ない人多そうだから例書いておく
password_hash ― パスワードハッシュを作る
http://jp1.php.net/manual/ja/function.password-hash.php コード:
$options = [
'salt' => 'abcdefghijklmnopqrstuv'
];
echo $options["salt"]."\n";
echo password_hash("rasmuslerdorg", PASSWORD_BCRYPT, $options);
結果:
abcdefghijklmnopqrstuv
$2y$10$abcdefghijklmnopqrstuuAEy05HGRP6l80a9Rvt.ZZouqyKwOhX.
↑このソルトを分けて保存するのか?
っていう意味
>>518 おkわかった。
その理解度なら、もう一回勉強しなおしてからレスをしてくれ。
そして脆弱なシステムが生まれないようにするためにも人に教えるのをやめるべきだ。
> 警告
> この関数で使うソルトを自前で設定するのはお勧めしません。 ソルトを省略すれば、安全なソルトをこの関数が自動的に作ってくれます。
最低限この警告がどういう理由で書かれているのかを理解するまでね。
520 :
512 :2014/03/10(月) 17:25:59.66 ID:???
じゃあ、こっちなら納得してくれるんか $options = [ 'salt' => base64_encode(file_get_contents("/dev/urandom", false, null, 0, 22)) ]; echo $options["salt"]."\n"; echo password_hash("rasmuslerdorg", PASSWORD_BCRYPT, $options);
それぞれ前提条件が違う気がする
saltなんて久々検索してみて、何か記憶があるなと思ったら、 昔俺が質問したやつだったw 4年前か... 懐かしいな 今ではPHPも殆ど使っていないが、俺この4年間何してたんだろ...orz
524 :
512 :2014/03/10(月) 18:46:35.86 ID:???
password_hash()は記号入るとぱっと見わからんようになるのな
>>520 無視してくれていいや
>>522 俺もそんな気がする。見返したら
>>516 で全部終わってたわ
暗号化の回数によってはsaltつけただけじゃ不十分であるっていうのと、
saltは秘密であることに意味があるんじゃないよっていうのがいいたかった
525 :
495 :2014/03/10(月) 19:57:44.63 ID:yFyJBN/9
質問が曖昧で大変失礼しました。 自分が実装した暗号化ですが、これは安全でしょうか? <?php //saltのあるファイルの読込 require_once '../init.php'; $pass_by_md5 = md5($password . $salt . $password); ?> ユーザーからのパスワードでsaltを挟んでからmd5にかけています。 $pass_by_md5の文字列とsaltが同時に流出した場合、 元の$passwordはどの位の確率で解析されるでしょうか? また、saltの流出が無い場合は、安全と考えて良いでしょうか?
暗号が破られるかどうかってPHPと関係ないだろ。
もうこの際sugerしとけ そっちの方が安全だ
MD5って、一対一対応がないから、衝突はありえるだろ。 Wikipediaだと、元データは復元困難らしいが。 MD5 - Wikipedia ハッシュの衝突耐性について MD5のハッシュ値については、パソコンレベルで、数10分程度で、同一ハッシュ値の非ユニークなデータ列を生成できる実装が広まっている。 すなわち、強衝突耐性は容易に突破されうる状態にある。 ただし、任意に与えられたハッシュ値に対して、(何らかの別の)データを生成する実装が広まっているわけではないので、弱衝突耐性が容易に突破されうる訳ではない。 また、任意に与えられたハッシュ値に対して、改竄者の意図どおりのデータ列を容易に生成できる訳でもない(もしそうならば、それは既に暗号ではない)。 強衝突耐性の突破とは例えば、同一のハッシュ値を持つ非ユニークな2つのデータ列D1とD2のペアを1つ発見できた、ということである。 なお、この場合D1やD2が意味を持つデータであるかどうかは問われない。
MD5を使用していることがバレたとしても、データ復元は困難で そもそもどういうハッシュ使ってるか分かってない以上、まともには復元できないだろ。 別の予想もつかないような脆弱性を慎重に確認したほうが安全度が高いんじゃないか。
>>525 パスワードに数字1桁のものしか設定できないシステムがあるとするじゃん?
どんなに強固な暗号化方式を用いたとしても、10回の試行でパスワードは判明するよね。
これをあなたのいう「解析」に含めるなら、時間を無視すれば100%判明することはわかる?
だから上でも書かれてるように、パスワードの強度次第ということになるんだよ。
atwikiでパスワードがもれてるのは、パスワードの強度が低いものから順にもれてるの。
総当りだったらすでに暗号理論や暗号強度は関係ないな
533 :
495 :2014/03/10(月) 20:52:48.68 ID:yFyJBN/9
>>529 セキュリティ関連について再確認したいと思います。
>>530 ユーザーに対して、強度のパスを登録するよう注意喚起したいと思います。
>>532 password_hashについて調べてみます。
いろいろお教えくださり有難うございました。
本当に感謝です。
なんかPHPとjavascript勉強すると、言語仕様ごっちゃにならね? Cやってた身としては、Cに似てるのはありがたいのだが…。
それは分かる C、C++、PHP、Python、JavaScript、シェルスクリプト、あとちょっとだけJava使う俺は、暫く間隔開くとストレス感じることある $付け忘れたり varを宣言したりしなかったり
PHPとJavascriptはごっちゃにならないなー。 まあjQuery使ってるからってのが大いにあるけど。
それじゃ話が違うだろ、ハゲ
【OS名】WindowsXP
【PHPのバージョン】5.2
【連携ソフトウェア】Apache
【質問内容】
<?php echo $_SERVER['REMOTE_ADDR'] ?>を仮にファイル名 a.php にして
ApacheとPHP入れた自分のパソコンのWebブラウザから
http://127.0.01/a.php にアクセスすると
「127.0.0.1」と表示されると思うんだけど、ネット接続状態の自分のプロバイダIPを表示させる方法ってないかな?
自分のプロバイダがKDDIならKDDIのIP、SoftBankならSoftBankのIPが表示できるようにしたいんだけど。
外部のサーバにa.phpを置いてそれにアクセスすればいいんだけど、自分のパソコンの中だけで完結させたいんだ。
なんかいい方法ありませんか?「
>>539 わからないけどシステムコマンドに頼るしかないんじゃなかろうか
それに複数のネットワークに接続してたりルータ経由だったり
考える点はいろいろある
ヘアピンNATルーター使うとか 今の環境じゃ無理じゃないかね
>>536 連結演算子なんかは間違うな
PHPだと.だけどJSだと+だとか
大量に書いてから気付いた時には少し凹む
>>543 http://www.telize.com/ >There is no rate limit of any sort at the moment, and the service is free for everyone to use.
商用までいいかとかはわからん。
色々レスサンクスです。
>>541-542 難しそうですかー。
>>540 のサイトみたいに外部のサーバにa.phpを置いて、自分のパソコンのPHPから file_get_contents で取り込んで、
IP部分を抽出するしかないのかな
547 :
nobodyさん :2014/03/11(火) 00:22:28.98 ID:F4Q5KCKh
548 :
nobodyさん :2014/03/11(火) 13:00:36.41 ID:knsPq3qu
【OS名】Redhat 【PHPのバージョン】6.4 【連携ソフトウェア】MySQL 【質問内容】 XSS対策について質問なのですが 現在は出力時にhtmlspecialcharsでエスケープしていますが、データベースに入れる際にhtmlspecialcharsするべきと他の人から言われています。 データベースに入れる際はmysql_real_escape_stringしているのですが、入れる前にhtmlspecialcharsするべきなんでしょうか?
自分で確認した方がいい。 ちゃんと復元できてるのかと、脆弱性を。 BASE64なら完全な文字のテキスト。
>>548 htmlspecialchars二回するの?
普通は、出力時のみだと思うよ
エンコードに使えそうな関数 addslashes urlencode rawurlencode base64_encode convert_uuencode htmlspecialchars htmlentities($str,ENT_QUOTES,'SJIS-win',false) mb_convert_encoding( $str, 'HTML-ENTITIES', 'SJIS-win')
552 :
548 :2014/03/11(火) 13:44:14.46 ID:knsPq3qu
私も出力時のみと思っていたのですが入れる前にするのが常識みたいに言ってきたもので、私のほうがおかしいのかと思ってしまっておりました。 エスケープする場所を移動させるだけと思っているようで、事前にエスケープすると入れる情報の長さもかわることになるので 設計部分から見直す必要性があることもわかっていないようで困っておりました。
使う用途次第で、HTMLをHTMLエンティティに変換して出力する用途が決まっていれば データベースを別のコードでも使うときなどのために変換済みをいれておいたほうがいいことがある。
>データベースに入れる際にhtmlspecialcharsするべきと むしろ、こっちの理由を聞いてみたい。 その他人とやらにおいて、何か合理的な理由があるのだろうか。
取り出したデータが無加工でそのまま使えることを保証するためだろ。
>>556 そんな保証が必要なの?
出力先がHTMLに確実に限られていればわからなくはないが
つねに、出力でhtmlspecialcharsをやるなら、ほぼHTMLだろう。 バイナリデータなどでやったらデータが破壊される。
> 現在は出力時にhtmlspecialcharsでエスケープしていますが、データベースに入れる際にhtmlspecialcharsするべきと他の人から言われています。
保存時はなるべく生データの方が融通聞いていいと思うけどね
DBに保存されるのは無加工の生のデータであるべきである なぜならhttp経由のみで使うとは限らないからである htmlspecialcharsを入れとけばエスケープ忘れがあっても安全という主張があるが html出力時にDBから取り出したデータにhtmlspecialcharsを挟むという PHPのデファクトスタンダードが通用せず第三者からみたらとても不思議で一見まずいコードに見える このような不思議な仕様にすべきでない
HTML以外が入るときのために、変換済みのほうがいいだろ。 バイナリデータに対して出力で変換したら壊れる。
>>563 アホなこといってんじゃないよ
バイナリデータにhtmlspecialcharsなんて使うわけないだろ
つうか画像ならGDとかに突っ込んだり
そのまま出力するにしてもヘッダで指定すんだろ
プレーンテキストとは扱いが違う
DBに入れる際にhtmlspecialcharsすると、出力時にもhtmlspecialcharsをして、 二重にエスケープされる可能性があるから、まずいんだよね。 たとえば、'&' (アンパサンド) は '&' に変換される。 これをもう一度エスケープすると、 '&amp;'になって、 'amp;'という不要な文字がブラウザに表示されてしまう。
出力先にあわせて、適切な処理を行うという常識を無視し XSS等がおきた時の責任逃れをしたいっていう感覚をヒシヒシと感じる
htmlならバイナリデータなんてDBに突っ込まないで 場所だけを記しておくよな
htmlspecialcharsは不可逆変換だしね。 < と < は、 double_encodeの設定で < < もしくは < &lt; のどちらかになるにせよ htmlspecialchars_decode すると < と < になってしまう。
>>548 sanitized_text ってカラム名にしてそこに「も」入れるのが、その、他の人との折衷案になるんでない?
「も」としたのは生データは重要だから失うわけにはいかないという理由。
何この流れw 馬鹿だなぁw DB格納時やらバイナリデータにh()を適用ってw 特にバイナリデータにはウケたw
DBいれる前に不可逆変換すると仕様変更や拡張、 リニューアルの時とかネックになりがちだしなー。 基本は、あくまで「渡す時に適切な処理を」だろ。 あくまで基本だけど。 ところで、なんでhtml文章を格納するのに話題で バイナリにhtmlspecialcharsとか言い出してる馬鹿がいるの?
データベースにHTMLとバイナリが混合していて、 それを見分ける方法などを付けていなければ バイナリに対して加工してしまう可能性がある。
>>572 バイナリをHTML自体、またはその一部として出力するの??
>>572 DBとSQLは1対1で作るんじゃないの?
どこに何が入ってるか分からないものと戦うの?
>>572 見分ける方法が無いまま混在させる状況がよく分からん。
よしんば入れるとして、バイナリが入る可能性があるのなら一律エスケープしないだろ。
自分で設計しといてimage BLOBとtext CHARの区別もつかない開発者とかねーわwww
俺なら出力するときだけだな。DBに入れるのは生データのほうが何かと融通が利く。
他人が設計して共同開発するようなものても 取得するデータがどのようなものかはあらかじめ把握しているのが普通 じゃなきゃアプリケーションなんて作れません
r ‐、 | ○ | r‐‐、 _,;ト - イ、 ∧l☆│∧ 良い子の諸君! (⌒` ⌒ヽ /,、,,ト.-イ/,、 l 入力と検証と保存と出力の話が混ぜこぜになっているが |ヽ ~~⌒γ⌒) r'⌒ `!´ `⌒) 回答する側も初心者だ │ ヽー―'^ー-' ( ⌒γ⌒~~ /| 騙されるな。 │ 〉 |│ |`ー^ー― r' | │ /───| | |/ | l ト、 | | irー-、 ー ,} | / i | / `X´ ヽ / 入 |
話がうつってるだけなのについてこれないからってクソみたいなAA貼るなカス
まあ、DBへの入力時にhtmlspecialcharsするくらいなら、 投稿入力文字列をチェックして、タグ'<>'の投稿を禁止するとか、 入力値チェックの段階で対応する方がよさそう。
>>572 > ところで、なんでhtml文章を格納するのに話題で
> バイナリにhtmlspecialcharsとか言い出してる馬鹿がいるの?
>>583 それも手の一つであるけど、仕様決めのときの
ポリシーの問題であってレイヤーが違いすぎるだろ。
それ言い出すと、WAFいれたらとかそういう話も出てくる。
そも、XSS対策を意図した場合、PHPレベルで解決不可能じゃないだけに
そっちを先に論ずるのも妙だと思われる。
ム板にID入って荒らせなくなったぺちぱー涙目
おおお、ID出るようになったのか。久々にム板いこっと
誰にも相手にされない煽り()
ぎいやぁぁぁぁぁぁぁぁぁぁぁ! しまった! 大変な失敗をしてしまった!! もう俺の人生終わりだァァァ!!
始まってすらない
こっちもID出てくれたらな
お疲れ様でした。次の周では頑張ってください
593 :
nobodyさん :2014/03/13(木) 19:11:56.06 ID:QK76W5wi
ぺちぱーには無理
被害妄想こじらせて見えない敵と戦ってるんだからそうっとしといてやれ
PHPユーザが荒らしてることにしないと困る人キテター
PHP「すら」使えんアフォ荒しは消えればいいのにな
PHPは誰でも使えるくらい簡単だが 作るシステムの適正に合ったコードが書ける人間は意外と多くない
599 :
nobodyさん :2014/03/15(土) 09:39:37.71 ID:B7D/HL0C
すいません、教えてください。 GDを使ってpng画像を作成するプログラムを作っています。 画像を作成して表示することはできたのですが、 右クリックして「画像を保存」しようとすると、うまく保存してくれません。 保存できるようにする方法はありますでしょうか?
表示出来たらそれ以降はブラウザの問題でしょ 拡張子によって保存出来ないとか?拡張子.pngにしてみたら
601 :
nobodyさん :2014/03/15(土) 10:18:54.27 ID:B7D/HL0C
保存しようとすると、拡張子が*.phpになり、うまく保存できませんでした。 ただ、ご指摘いただいた点にヒントを得て、いろいろためしてみたところ、うまくいく場合といかない場合がありました。 IEの場合、デフォルトでpng保存となり、保存した画像を開いたところちゃんと表示されました。 chromeの場合、デフォルトではphp保存となっており、拡張子をpngに変えればうまく保存できました。 ただ、phpのまま保存すると、うまくいきませんでした。 これをpng形式で保存するように事前に指定できればいいのですが・・・ そう考えると、たしかにブラウザの問題となりますね。
>>601 >ただ、phpのまま保存すると、うまくいきませんでした。
拡張子がphpになっているだけで、pngとして保存できているはずだよ
鯖側では、Content-Dispositionを使ってfilenameをつけるのがベターかと
604 :
nobodyさん :2014/03/15(土) 12:50:50.87 ID:/0KFEDAU
<?=$hoge ?>で$hogeの内容を出力すると思われる ソースがあるんですがこれを有効にする方法が分かりません。 「php はてなイコール」「php クエスチョンイコール」 でググってもダメでした。 教えて下さい><
いや、デフォルトで有効だし・・・むしろ無効にする方法を知らないわ
「php ショートタグ」
ショートタグは、コーディング規約で非推奨なことが多いから 使わないほうがいいよ。
ローカルな掲示板の保守頼まれてスクリプト組んだんだけど画像認証がうまく突破できない 4桁の数字だから総当りでもいいんだけど、効率が悪い; phpってまではわかったんだが、どうやってPOSTすれば認識されるんだろう? SPAMの書き込みがあるから何とかなりそうなんだ お前ら力を貸してくれ、ください
その掲示板に保守用のバックドアを作ってもらうぐらいしかない 画像認証の突破方法なんてSPAM屋さんを利するだけだから誰も教えてくれないよ
なぜ保守に画像認証突破が関係あるのか
というか何のスクリプト? なんとなく、「それはそういうやり方でやるもんじゃない」という答えで終わりそうな話だけど
プログラム板の質問スレにも書いてなかった?君 やりたい事がまったくわからん
スパム投稿で保守するってことだろ
保守ってスレの保守かよ こっち関係の板じゃ別の意味に取られるぞ
ああー、そういうことなのか。 なんで自動ポストって言葉を使わないかなぁ。
htmlプロトコルやheader()周りって、どんなのを、どの程度抑えたらいいですか?
620 :
nobodyさん :2014/03/16(日) 13:55:18.87 ID:/7LU/Oeu
html://
あ、素で間違えた...。 Content-Disposition:、Cache-Control: 辺りの頻出するもの教えて欲しいなって この辺って、どの程まで理解してPHPはじめたらいいのか助言欲しいのん ApacheのディレクトティブやPosgreSQLの設定までキリがないお
622 :
nobodyさん :2014/03/16(日) 19:17:58.72 ID:l1xluNFW
複数のファイルを1つにするアーカイブ処理を行いたいのですが、
通常アーカイブ処理は元よりファイルサイズが小さくなる(圧縮される)と思いますが、
PHPで用意されてる関数群は何かしら設定が必要なようなので、
http://www.php.net/manual/ja/refs.compression.php デフォルトで使える方法でアーカイブする方法を模索しています。
今考えてるのは、
file_get_contentsで読み込んでbase64_encodeしたものを、
その他情報とともに(ファイル名、親フォルダなど)テキストファイルに記述していく方法ですが、
この方法だと元のファイルより当然サイズが肥大化します。
アーカイブするのが主目的なので肥大化しても構わないと言ったら構わないのですが、
何か他にこの手の処理にデフォルトで使える有効そうな関数はありませんか?
zipアルゴリズムを実装するとか、フリーのそういう類のスクリプトを拾ってくるってのはなしでお願いします。
なんでデフォルトしかだめなの?
624 :
nobodyさん :2014/03/16(日) 19:37:10.45 ID:l1xluNFW
ないよ
626 :
601 :2014/03/16(日) 20:45:09.55 ID:WUHmbqmd
>>602 ありがとうございます。
遅ればせながら、お礼です。
Content-Disposition: inline; filename=
で問題解決しました。
>>622 exec で zip なり makecab
亀レスだが、hhvmは言うほど早くない。 php 5.5 + 10%だな。 自分の環境のテストではそんな感じだった。
629 :
628 :2014/03/18(火) 12:31:38.79 ID:???
628ですが、亀レスの意味をわからず使ってしまいました。 申し訳ないです。
>>626 ついでにheader()しても先にレスポンスヘッダーにtext/html仕込まれたりするから、
ini_setでdefault_mimetypeを指定しておくと吉。
631 :
nobodyさん :2014/03/18(火) 13:02:21.50 ID:RFZn4Uk4
PHPによるオブジェクト指向プログラミングの学習法について質問です。 実践的なOOPを学習するにはどうしたらよいですか? おすすめの学習法がありましたら教えて欲しいです。 PHPの入門書などを読むと、クラスの書き方には言及していますが、 実際にオブジェクトを使って何か成果物を作るようなものが少ないです。 文法的なことではなく、実践的なOOPを身に付けたいです。 クラスの書き方はある程度覚えたので、例えば、グローバルスコープで、 どうオブジェクトを扱うか等の知識を得たいです。 よろしくお願いします。
そりゃPHPで勉強するってのが無茶あるわ
633 :
nobodyさん :2014/03/18(火) 14:50:00.57 ID:ql50fOB4
データベースの検索結果をyieldで一件ずつ返すのは有りですか
>>631 そこの部分の一般例を覚えたいってこと?
それならば、クラス設計を突き詰めて学んだほうがいい気がする。
どうオブジェクトを扱うかは、結局クラス設計に依存するし、それ次第で変わるから。
そのあたりについて色々書いている人多いから、玉石混交だけど
色々読んでみるといいと思う。
で、課題作って実践する。
>>633 それ「自体」は無しじゃない。
636 :
631 :2014/03/18(火) 15:51:26.19 ID:RyBw1YMD
>>634 具体的には、掲示板でもブログでもアンケートでもいいのですが、
OOPに基づいて、WEBアプリを構築してみたいというものです。
書籍「パーフェクトPHP」で学習したところ、OOPでフレームワークの構築をするとか
敷居がかなり高かったので、入門的に、掲示板などをOOPで作る定番な手法を学習したいのです。
端的には、「クラスを書いたら、後はどうしたらいいの?」という疑問です。
auto_loadして、クラスを読み込んで、オブジェクトを作り、プロパティを設定、
そして、メソッドを実行という流れだと想像するのですが、
全体としては、どのようにコーディングするのか、お手本がなくよくわからないのです。
class 2chLikeBBS { 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 } } ど、どう?
638 :
631 :2014/03/18(火) 16:52:00.21 ID:RyBw1YMD
>>637 コードを示して頂きありがとうございます。
とても分かりやすいコードです。
このクラスを実際に利用するには、どうしたらよいのでしょうか?
グローバルスコープに次のようにすればよいのでしょうか?
<?php
require_once('DB.php');
require_once('2chLikeBBS.php');
$obj = new 2chLikeBBS();
//スレッド作成の場合
$obj->makeThread($_title, $_name, $_mail, $_body);
?>
俺は昔なにかあってautoloadやめて明示的にロードするようになった まぁ勝手にロードとか型なしとかメリットでありデメリットでもあるからね 他人がコード読む際の可読性とか
>>633 使い勝手のためならお好きにどうぞ
メモリの使用量を抑えるためだったら
クライアントライブラリ側で結果セットをバッファリングしてないかも調べとこう
643 :
631 :2014/03/18(火) 17:29:03.73 ID:RyBw1YMD
>>639 ありがとうございます。
このようにクラスを作成した場合、各メソッドごとに処理を記述します。
しかし、グローバルスコープでは、それらの一部のメソッドを使用するだけです。
この場合、使用しないメソッドも、全部を読み込んでいることになります。
クラスに10のメソッドが有る場合に、グローバルスコープで1つしかメソッドを
使わない場合には、効率が悪いように思えるのですが、
OOPでは普通のことなのでしょうか?
647 :
631 :2014/03/18(火) 18:18:38.57 ID:RyBw1YMD
>>646 ありがとうございます。目から鱗です。
メソッドを定義しても実行しなければ、パフォーマンスに影響しないのですね。
これまで、PHPの入門書に従って、使う関数のみを読み込み、
その都度、関数を実行していました。
そのため、関数をそれぞれ別ファイルに保存する方法をとっていました。
OOPだと、その関数を一つのファイル(クラス)にまとめられるのですね。
>>644-645 OOPとMVC、そしてフレームワークは深い関係があるようなので、
もう一度、OOPでフレームワークの学習に挑戦してみます。
ありがとうございました。
648 :
634 :2014/03/18(火) 18:54:20.68 ID:???
PHPのモジュール化されているクラスや関数と ユーザの作成するものじゃパフォーマンスに与える影響は一応違う。 モジュール化されたものは、シンタックスチェックとか入らないから。 ただまぁ、それだけぶっこんどいても実用上そこまで気にならないレベル。 MVCで、躓くところって大体決まってるのでその時はMVACも参考にしてみると面白いかも。 クラスに複数メソッドが〜の部分は、メソッドの書き方に強く依存するけど、 それらを効率的に書こうとすると結構privateメソッドが増えてくることに気付けると思う。
649 :
631 :2014/03/18(火) 19:39:11.61 ID:Dg0Vus48
>>648 ありがとうございます。
参考にさせて頂きます。
650 :
質問です。 :2014/03/18(火) 23:41:47.91 ID: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()するしかないのでしょうか。
何か良い方法があれば教えてください(´・ω・`)
ホスト名だけじゃ接続先のIPはHTTPじゃわからないんじゃない? >いちいちリクエストする前にURLを分解して >dns_get_record()でAレコードかAAAAレコードを記録してから >fsockopen()するしかないのでしょうか。 接続先のIPを知る必要があるならやっぱ明示的に指定しないとだめだと思う
653 :
nobodyさん :2014/03/19(水) 10:24:38.28 ID:iTMSstnB
【OS名】CentOS 【PHPのバージョン】6.3 【連携ソフトウェア】MySQL 【質問内容】 PDOでのエスケープについてご教授いただければと思います。 PDOを使えば自動的にエスケープなどがされると見かけますがこれはbindParamなどをしたときにエスケープされるということでしょうか? それとも普通にexecuteされると自動的にされているということでしょうか? $stmt = $conn_search->prepare("SELECT * FROM user WHERE id=?"); $stmt->execute(array($id)); この場合はエスケープされていないという判断でよいのでしょうか?
>>650 file_get_contentsを使う限りそのリクエストヘッダを知る方法はなかったはず?
ただfsockopenが許されるなら、つまりリクエストヘッダを定義することはOKってことですよね。
微妙な路線なんだけど、file_get_contentsの第三引数でがっちり定義でなんとかなりまへんか?
何か特殊なhttp経由のサービス使いたくてそれ用にきっちりやりたいなら、fsockopenでカチっと書いたほうがいいと思うけども。
httpのプロトコル理解できてるなら、2,3時間のことだし。
>>650 DNSでもIPでもないHTTPだけじゃ無理だ
fsockopen()つかうぐらいなら、あらかじめ名前解決だけしておいて、curl使った方が楽だろ
phpmyadminインストールしたんですけど、 ログインしても画面が真っ白で何も表示されません。 ググったんですが解決法が見つからず困っています。 アパッチログにはエラーらしきものは出てません
知らんがな
解決したんでもういっっす
例えば、phpmyadminを避ける
ケンカすんなって
662 :
650 :2014/03/21(金) 23:28:58.52 ID:omHYYgA0
>>651-652 >>655-656 返信ありがとうございます。
HTTPリクエストヘッダを簡単に取得する方法に淡い期待をしていましたが、
どうやら無いようですので、あきらめがつきました。
結局、parse_url()でパーツに分けてHTTPリクエストヘッダを用意して、
名前解決したIPアドレスへfsockopen()で接続してから、
fwrite()でHTTPリクエストヘッダを送信し、
fread()でレスポンスを繰り返し受信して、
preg_split()でHTTPリクエストヘッダとメッセージボディに分けました。
file_get_contents()なら1行で済むんですが、
細かいカスタマイズをしたければ、
やはり自分で書くしかないですよね(´・ω・`)
>>662 特定IPアドレスへのアクセスをする際の
HTTPリクエストヘッダの簡単に取得する方法だよね?
HTTPリクエストヘッダの簡単に取得する方法だけなら
>>651 が答えている通り
Curlで済むんで。
664 :
nobodyさん :2014/03/22(土) 00:17:21.35 ID:YY11zoAH
【質問内容】 配信サイトのコメントビュアをつくろうと考えています。 ツイキャスで投稿されたコメントはAPIがあるので取得できたのですが、FC2Liveで投稿されたコメントはAPIが無いので取得することができませんでした。 APIの用意されてないウェブサービスにおいて、コンテンツをphpで取得するにはどうしたらいいですか? 初心者ですいません。これらに関するキーワードだけでも教えてもらえないでしょうか?
見た感じツイキャスは単なるポーリングでfc2liveはRTMPでプッシュっぽい 結論から言うと無理じゃね 変態なら作れるかもしれないけど
>>663 彼はRR相手のことを考えてたんだろうけど、それにしたところでcurlですむので、いいと思う。
667 :
663 :2014/03/22(土) 09:21:01.58 ID:???
つーかツイキャスもfc2liveも勝手にコメント取得しちゃいかんだろ 著作権で逮捕されてもしらんぞ
>>665 そういうのってどうやって分かるんですか?
パケットキャプチャですか?
WiresharkとかMS Network Monitorとかのほうがより詳細な情報は得られるだろうけど ぱっとみたいだけならFirefoxアドオンのLiveHttpHeadersとか Chromeは使ってないけど他のブラウザでも似たようなのはあるはず
671 :
650 :2014/03/22(土) 14:52:37.40 ID:ktRnIyxM
>>651 >>656 PHPのマニュアルでcURLをパッ見た時は内容が多過ぎてよくわからなかったのですが、
他の方のブログ記事などを読んで理解できました。
下のようにしろとおっしゃっているんですね。
この方法は知らなかったので、勉強になりました。ありがとうございます。
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE );
curl_setopt( $ch, CURLINFO_HEADER_OUT, TRUE );
curl_setopt( $ch, CURLOPT_HEADER, TRUE );
$response = curl_exec( $ch );
$request = curl_getinfo( $ch, CURLINFO_HEADER_OUT );
curl_close( $ch );
ただ、この方法だと、IPアドレスでURLを開いた場合、
リクエストするHost:を変えられない気がしますので、
当面は
>>662 の方法で様子を見てみたいと思います。
ありがとうございました。
>>671 curl_setopt($ch, CURLOPT_HTTPHEADER, array("Host: localhost"));
せっかちな人だなぁ。マニュアルはきちんと読みましょう。
>>670 あざっす クロームのnetwork recordだけだとうまく行かなったので
それつかってみようと思います
675 :
650 :2014/03/23(日) 17:53:41.96 ID:1kWfhJwo
>>672 >>673 うう、ありがとうございます。
>>662 の方法は1行のバイト数に上限があって
ちょっと気持ち悪いので、さっそくcurlに書き換えたいと思います。
2ちゃんねるも、まだまだ捨てたもんじゃないですね(;´д⊂ヽ
677 :
nobodyさん :2014/03/24(月) 20:33:17.30 ID:x7Llo+Ch
【OS名】CentOS 【PHPのバージョン】6.3 【連携ソフトウェア】MySQL CakePHP 【質問内容】 PHP側からサーバーの転送量などは取得できますか? サーバー監視などがあれば取得出来ることは知っておりますが クライアントからroot権限などがない状態で転送量を測ってくれといわれまして PHPだけで転送量を見ることは可能ですか?
PHPにそんな機能はついてないから、PC、サーバーの機能にアクセスするか、定期的にログを書き出してもらって読みに行く。
/proc/net/dev をfile_get_contentsか何かで読み込む
681 :
nobodyさん :2014/03/24(月) 22:09:48.15 ID:viK+nXYj
ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。 ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。 ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。 ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。 ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。 ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。
PHP+MySQLでアンテナサイトを作っています。 24時間、週間、月間で記事のクリックランキングを作りたいのですが、どうすればいいのでしょうか? アンテナ自体はすでに完成していて、挙動としては、 Cronで一定時間ごとにRSS取得→データベースに登録→CSVに吐き出す→CSVを整形して出力 という流れになっています。 ここに上記の記事ランキングを付け加えたいのですが、どういうことをすればいいのか全然わかりません・・・。
683 :
682 :2014/03/25(火) 00:32:26.92 ID:/ohf3xE7
ID出し忘れました。 宜しくお願いします。
>>682 リンクにクリックをトラックするJSを仕込んで(探せば出来合いのものが見つかる)
クリックカウントをファイルでもDBでも好きなところに保存。
DBならSQLでソートして出来上がり。
ファイルならPHP適当に処理して出来上がり。
出来上がったものをランキングの表示箇所に適当な手段で表示して完成
685 :
682 :2014/03/25(火) 01:20:44.79 ID:/ohf3xE7
>>684 ありがとうございます!
JSだけ探せれば意外と簡単そうですね。
やってみます!
>>682 リンクをそのサイトへの直リンクではなく、自分のアプリケーションを経由するリダイレクトにする。
自分のアプリケーションの中でカウンタをインクリメントさせる。
こんなやり方もある。
687 :
nobodyさん :2014/03/26(水) 05:56:20.37 ID:WEvnT6th
1.jpgと2.jpgを一緒に消したいのですが どう指定したらいいでしょうか? これではだめでした unlink("1.jpg","2.jpg"); よろしくおねがいしますm(_ _)m
勝手に関数作るなよ
1つずつ消す 心配ならis_writableしてからやればいいんじゃね あとはrenameしてtmpフォルダに移動するとか
無理ですか・・・ありがとうございました
>>687 仮に2つ以上同時に消せたとしても、内部的にやってることはforeachとかで回してまとめて消されてるだけの話
$files = array("a.jpg", "b.jpg");
function unlink_multiple($files){
//ファイルが必ず存在していると仮定して未チェック。必要に応じてfileがexistsか、is writableかチェックすること
foreach($files as $file){
unlink($file) or echo "{$file}が削除できませんでした。\n";
}
}
array_map("unlink" ,["a.jpg", "b.jpg"] ); ま、意味はないね。
693 :
nobodyさん :2014/03/26(水) 16:54:48.67 ID:n03wQtbD
【OS名】TurboLinux8 【PHPのバージョン】4.2.3 【連携ソフトウェア】apache 1.3 【質問内容】 テキストファイルのダウンロードをしたいです。chrome firefoxでは 動作しましたがIEはver11,ver8で試しましたが動作しません。 IEの場合、画面に表示されてしまいます。 <?php $filename = "test.txt"; header('Content-Type: application/octet-stream; name=' . $filename); header('Content-Disposition: attachement; filename=' . $filename); print "ABCD\nEFGI\n"; ?> logを見てもphpのエラーはないようです。何か解決の方法、ヒントをいただけないでしょうか。 よろしくお願いいたします。
header('Content-Disposition: attachment; filename=' . $filename); IE11で確認しました。
696 :
693 :2014/03/26(水) 18:23:32.41 ID:n03wQtbD
>>694 テレビ録画に使っていて、新たにごにょごにょするのが面倒だからです。
>>695 すみません、その1行の部分が私と違っているので動作しないということでしょうか。違いが見つけられずにいます。
$filenameとあるので他行を削除というわけではないと思うのですが・・・。
それとも同じで動作確認ができたということでしょうか。だとするとphp.iniの設定でしょうか。
697 :
693 :2014/03/26(水) 18:26:54.94 ID:???
>>695 文字だけだとなんだか詰問口調のようですね。
そんなつもりはないので気分を害したらごめんなさい。
phpあんま関係無いが、、他の環境で試せない?
>>696 1文字違うから良く見てw
これ直したら動いたから。
アタッチェメントになってるな
701 :
693 :2014/03/27(木) 12:11:26.36 ID:oazb6RzA
>>699 >>700 動作しました。こういうところは厳格なのねIE。
アタッチとアパッチのスペルが違うことを学びました。
ありがとうございました。
というか、発音、音節からして違うだよ。
IEが厳格だというより attachment指定がないときのデフォルト動作が違うだけやな
そりゃ「○んこ」だって○一文字違うだけで大違いだもの
>>704 preg_match("^[あいうきちはまわ]んこ$", $word);
デリミタ忘れたわ
め
がてしぱ $word = preg_replace("/.(んこ)/","ま$1",$word);
ぶ ぱ て
産 廃 P H P
711 :
nobodyさん :2014/03/31(月) 22:34:02.22 ID:MfJjHQrV
数字をアルファベットに(26進数で)置き換える方法を探しています。 具体的には、 1をaに 2をbに … 27はaa 28はab … というような感じです。 $arr=array(1=>'a',1=>'b',1=>'b'); のように配列で置き換えるのは有限なので、 簡単、確実に置き換える方法を教えてください、お願いします。
>>711 26で割った商と余りを出して組み立てる
か
base_convertを使う
進数かえるのがあったはず。
714 :
nobodyさん :2014/03/31(月) 22:51:26.49 ID:MfJjHQrV
>>712 >>713 ありがとうございました。
とりあえず、base_convertを使い、その返り値を
pをzに、oをyに…というように置き換えるやり方でやってみます。
>>711 $b = "a";
$n = 27;
for(;--$n>0;$b++);
print $b;
>>711 integerをアルファベットのみの26進で表現すればいいってこと?
bcmathで26進計算して、
出た数値を桁ごとに36進上でa加算でダメかね。
ただ、昔
"0123456789"を"abcdefghij"の二つの文字列を放り込んで
対象とする文字列位置で変換する関数をどっかで見た気がする。
どちらにせよ、一旦ふつうの26進経由になるけど。
718 :
717 :2014/04/01(火) 15:32:11.97 ID:???
719 :
nobodyさん :2014/04/01(火) 16:02:54.18 ID:XHKBRGjO
複数のPHPスクリプトをrequireしてそれぞれ呼び出すようなものを作成しています。 呼び出し元と呼び出し先のそれぞれで必要とされるコマンドラインオプションが異なるのですが、それぞれにPEAR Console_CommandLineが無関係なオプションに対して例外を発行し、とまってしまいます。 例外を発生させず、すべてのオプションをすべてのソースに記述することなく、関係のないコマンドラインオプションを指定できるようにするにはどうしたらよいのでしょうか? ご教示のほどよろしくお願いします。
コマンドラインオプション?
>>719 読み込むPHPスクリプトは、スタンドアロンで動くように作られていて、
それらをつなげて、cliで実行しようとしてるってことですかね。
それだけだとそれぞれのスクリプトが何をどう要求するかとか関係性もなんともなんで、
もう一レイヤー上にかぶせて一個ずつ値返してもらいながら実行したほうがいいんじゃん と…。
か、目的に沿って読み込むPHPスクリプトを書き換えるか、パイプでつなげてそれぞれ実行。
722 :
nobodyさん :2014/04/01(火) 16:26:34.81 ID:XHKBRGjO
>>721 ありがとうございます。
2つの単体で動くスクリプトを無理矢理つなげてる感じです。
元コードの書き換えを最小限かつ一回のプロセスで実行というのが目的です。
複数プロセスがダメならスレッド立ち上げればいいじゃない(マリー
724 :
nobodyさん :2014/04/01(火) 18:07:02.12 ID:lqO10EeA
php.netがハックされてませんか? どのページも数秒ごとにグルグル回転するんですけど
2人で開発するならわざわざフレームワークって要らないかな?
>>724 is_april_fool(date()); //true
回転って DO_A_BARREL_ROLLするのかと思ったけどいつまで待っても回らない
うちも回らないなぁ
730 :
nobodyさん :2014/04/02(水) 14:49:00.93 ID:cY4xaY21
$db_pic = "c_pic"; $a_id = 1; $sql = 'select * from ? where test3 = ? limit 4'; $stmt = $dbh->prepare($sql); $stmt->bindParam(1,$db_pic, PDO::PARAM_STR); $stmt->bindParam(2,$a_id, PDO::PARAM_INT); $stmt->execute(); $row = $stmt->fetchAll(PDO::FETCH_ASSOC); print_r($row); こんな感じでPDOを書いてるのですが、 $rowが取得できません。 原因は、$stmt->bindParam(1,$a_id, PDO::PARAM_STR);のようで、 from c_pic where〜と直接$sqlに書いた時には正常に取得できます。 何が悪いのでしょうか?
型が文字列ならクオートが入るからテーブル名の指定には使えないだろう。 クオート外す手もあるけど、それじゃprepareの意味が無くなるから 名前のチェックしたうえで、文字列の連結で対応するのがいいと思う
>>725 フレームワークは、人数に限った話じゃないよ。
わざわざスクリプト書く前にあれこれ考えなくていいから楽。
ということであったほうがベターに一票。
無くても考えることがないというのなら、もはや言うことはない感じ。
特殊用途、例えばテンプレートとコントローラしか持たず、
外部のバッグエンドをモデルとして使うとかなら話は別だけど。
それでも大概はルーティングがなーとかアクションのかき分けがなー
ということで、既成のフレームワークに頼るけど。
733 :
730 :2014/04/02(水) 16:22:26.78 ID:cY4xaY21
>>731 お答ありがとうございます。
しかしすみません、いまいちわからないのですが、具体的にどういうことでしょうか?
>>733 bindで文字列を指定すると 'str' となる
テーブル名のとこはクオート付けちゃダメ
てなわけでチェックした後 form ' . $db_pic . ' where にするしかない
PHPの開発ってIDEでプロジェクトファイルで管理した方がいいですか? エディタとデバッガとテストツールと用意してゴリゴリファイルを編集した方がいいですか? メリットデメリット教えてください
>>733 >>734 も具体的じゃないからわかりやすく言うと、テーブル名はパラメータ化できない。そういうもの。
>>733 テーブル名はホワイトリスト形式を取れないのであれば
ちゃんとエスケープするようにね
>>735 最近は、project管理もそこそこしっかりしたsublime text editorみたいな
エディタもあるので、とてもなんとも言えない。
ただ、仕事でやるなら場所によってIDEが強制されたりすることもあるから
Eclipseとかも使っておけって感じ。
あとは正直、好み
>>735 IDEを使うかエディタを使うかは、環境云々だけど
デバッガとテストツールはどっちでも使うかと
データベースと連携させてのテストはIDEじゃないと無理?
そんなことない。 というか、IDEをつかうか、IDEに搭載されている各機能を個別に用意するかの違いでしかないじゃん。 前者は、ワンセットになってるのがメリット。 後者は、個別に好みのツールを選択できるのがメリット。 デメリットは楽か面倒か。
ローカルにMySQLなりポスグレなり入れるだけでしょ? 何この質問
>>742 え?ローカル?
大規模開発したことない人?
PHPみたいな低速ごみ言語で大規模開発したことあったらそれこそただの馬鹿じゃん そんな奴は回答者の資格なし
phpって低速だったんだ。何と比べて?
virtualboxのWeb版ってPHPで開発されてんだけど
自分でコードを創作できないコピペ野郎が 必死にスパゲティ書いて遅いつってるだけだな
751 :
nobodyさん :2014/04/03(木) 03:42:08.83 ID:/dGmV7H3
ぺちぱーに常識求めた君の負けさー
752 :
730 :2014/04/03(木) 08:57:30.07 ID:2ZP0tz+B
>>734 >>736 >>737 みなさんありがとうございます。
理解しました。
要はテーブル名に対してbindParamが使えないということなんですね。
自分でエスケープした後に直接ぶち込むと。
ありがとうございました!
速度は静的言語に勝てないよな。そんなもんだ。常識ですよ webに限れば動的言語の中では上位だけども。常識ですよ
>>748 というか、最適化が多層に抽象化レイヤー挟んでもまともに動くように色々気を利かせすぎてるから、
逆にcとか比較的高級言語の中でも低級な言語を学ぶと、マジでくそ言語に見えるのは仕方がない。
マ ジ ク ソ 言 語 P H P
PHP使う人間は、こういうことをしないという事実だけでいろいろお察し。
fbはphpで作られたからなぁ fb程アクセスが無けりゃCに変える必要もないし
煽りももはや無効なほど2chがはやってない()
759 :
nobodyさん :2014/04/03(木) 20:52:53.39 ID:FO6wfUPW
外部から自サーバのフォルダ一覧を参照されたくないのですが、 htaccessで「deny from all 」と書く以外で方法は無いでしょうか?
スレチだけど、Indexesオプションで制御する。 てか、denyしたらコンテンツにアクセスできなくなるでしょ。
761 :
759 :2014/04/03(木) 21:16:55.52 ID:???
>>760 そうなんです。deny from allにすると、画像が表示されません。
Indexesを使っても表示されません。
なので、file.php?f=ファイルのURL
みたいにして表示させるようにしているのですが、
こういう方法以外に手軽に出来る方法が無いかと思い、質問しました。
一番簡単なのは、空のindex.htmlをおくこと
763 :
759 :2014/04/03(木) 21:33:48.09 ID:???
>>762 やはりそれが無難ですね。そうします。ありがとうございました
>>759-763 ルールも守れないゴミクズは来なくていいよ。
お前ら生きてるだけど迷惑だけど自覚はないんだろうな。
>>761 deny from all と Indexesを同時に設定したんじゃないかって思うんだけど。
>>765 なんでageたの?
767 :
nobodyさん :2014/04/04(金) 09:00:58.92 ID:nLQnUNGh
PHPでスレッドフロート型の掲示板サービスを作っているのですが、 ユーザー情報、スレッド情報、書き込み情報、 これらはそれぞれどのようなかたち(datファイル、MySqlなど)で読み書きするべきでしょうか? 処理が速いのが最大条件で、できればmysqlの使用は最低限にしたいです。
回答はしないけど、DBでやってる内容を理解してれば、こんな考え持たないよな。
770 :
nobodyさん :2014/04/04(金) 09:54:34.22 ID:nLQnUNGh
771 :
nobodyさん :2014/04/04(金) 10:04:40.84 ID:wlhCw4pF
会員制サイトの「パスワード忘れ」対応機能について質問です。 この機能の制作にあたりユーザーに入力してもらうべきデータは 何でしょうか? 他のサイトを調べると、メールアドレスの他に、ユーザーIDや 誕生日など、メアド以外のデータを求めるものもあります。 一見、多くの情報を入力させれば、より安全なように思えますが、 メアドは本人しか利用できない以上、他は気休めな気がします。 現在、自分が制作しているものは、次のようにしています。 「1.登録メールアドレス入力」→「2.メール送信(認証キー付)」→ 「3.認証用リンククリック」→「4.認証キー及び新パスワードの入力」 これだけで大丈夫でしょうか?ユーザーIDなども求めた方がいいですか? よろしくお願いします。
PHP関係ないやん・・・
何か「PHPでこうやって見たんだけど上手く出来ない」って話ですら無いのが多いな
>>767 >>771 どちらも設計レベルな話なのでPHP関係ありません。
ただ
>>767 はギリギリPHP言っているので少しマジレスすると
それPHP関係ない。アーキテクチャの話だろ。スレチだ。
どうDBを使うかとかの話まで進められたらDB板いけ。
775 :
nobodyさん :2014/04/04(金) 12:10:00.14 ID:TGYzsB6s
a(); function a() { $ary = [ 1, 2, 3 ]; $func = function ($n) { var_dump($ary); // null return in_array($n, $ary); }; $func(5); } globalがあっても同じです。 $aryはグローバルにできません。 この場合 $func で $aryを参照するにはどうしたらいいですか?
え?
778 :
nobodyさん :2014/04/04(金) 12:26:25.51 ID:TGYzsB6s
>>777 function ($quantity, $product) use ($tax, &$total)
{
$pricePerItem = constant(__CLASS__ . "::PRICE_" .
strtoupper($product));
この書式初めて見た
何やってんのこれ?
どの部分のこと?
PHPってevalみたいな感じで定数呼べるんだ?
783 :
nobodyさん :2014/04/04(金) 15:17:07.96 ID:2qJouDRV
php5.5でpowの結果がfloatのmaxを超えるような場合正常に出ないのですがdoubleで返してくれるpowのようなものはありませんか? ない場合どうしたらfloatを超えるような累乗の計算ができますか?
サイト上の画像を範囲指定して保存するライブラリとかないですよね?
>>786 何をしたいのか知らないけど、その言葉から思いつく範囲のことはできる。
けどそれを1行でやりたいという気持ちでライブラリという言葉を出しているのならない。
>>761 ディレクトリとらばーゆできそうな感じだけど大丈夫?
file.php?f=/etc/passwdみたいなやつ
image関数?とやらでできそうなのでいっぺんやってみますうう
790 :
nobodyさん :2014/04/04(金) 19:09:27.77 ID:Qlf2ysY+
ディレクトリとらばーゆってなんですか?
ディレクトリが転職すんだろ
792 :
nobodyさん :2014/04/04(金) 19:35:26.28 ID:2qJouDRV
>>784-785 ありがとうございます
全く少数を使わない場合でもgmpのほうがいいのでしょうか?
他の言語との互換がある方がいいのですが
>>792 PHPの関数って64bit環境で実行してても一部32bitしか内部的に通さないのとかあるから、それに引っかかってできなさそうなとき、かつ32bitを超える幅が欲しい場合には、任意精度関数に頼っちゃうのが楽ってだけでして。
powがどうだったか覚えてないけど、powダメなら、自分で書くか、既存のものに頼るならgmpあたりかってだけです。
なお、小数のtypoと予測してレスすると、別段精度があがったからといって、小数点下だけが伸びるってわけじゃない。
他の言語と互換性云々言うなら、互換性持たせたい言語のマニュアルでgmpがどう実装されているか等調べてくればいいじゃまいか。
794 :
nobodyさん :2014/04/05(土) 00:58:52.81 ID:6eD+hcIm
>>793 ありがとうございます
どちらも同じ値だったのでそのままpowにします
ありがとうございました
>>791 ありがとうございます。世の中不思議なこともあるもんですね。
796 :
nobodyさん :2014/04/05(土) 14:17:11.03 ID:2SiAoHBr
ずっとローカルにディレクトリ作成→ファイル保存してたんですが、 NAS保存する事になったんで、同じようにmkdirしようとしたんですが、 mkdirで「No such file or directory」になってしまいます。 IP指定だといけるようなんですが、ドライブレターの書き換えだけで すまないんでしょうか? 元々 define('NAS_ROOT' , 'D:/hoge/share'); @mkdir(NAS_ROOT, 0777, true); 変更(エラー) define('NAS_ROOT' , 'Z:/hoge/share'); @mkdir(NAS_ROOT, 0777, true); 変更2(いける) define('NAS_ROOT' , '\\\\192.168.0.100\\\\hoge\\share'); @mkdir(NAS_ROOT, 0777, true);
qiitaで他人の記事のコメントに自分の記事に誘導する人ってなんなの そこまでして売名したいのかと qiitaのphpタグの記事は不快
誤爆
>>796 それを動かしているPCはユーザーがログイン状態なの?
当たり前のことを聞くな
UNCで出来て、ドライブレターで出来ないのって、 それくらいしか考えられないんだけど
もしかして:apacheの仕様 httpdのDOCUMENT_ROOTもネットワークドライブが指定できなかった思い出がある
804 :
nobodyさん :2014/04/05(土) 15:32:43.92 ID:2SiAoHBr
>>799 NAS側はとりあえずEveryoneフルコン
プールのユーザーも実在ユーザーにして、
そのユーザーでZドライブを張ってます。
>>802 ああ、すいません。IIS7、PHP5.3です
セキュリティ設定周りの話なのか
PHPのmkdirの制限なのか情報が見つけられなくて、
どっちの問題なのかなあ…という話です
ローカルドライブ、IP指定、マシン名指定なら行けるのは確認してます
> PHP で使用されるデフォルトのラッパーは Filesystem で、 これはローカルファイルシステムを表します 見るからに仕様だな
つかファイルテーブルがローカルにないしそのネットワークを越えるプロトコルも分からんし。 ENOENTはイミフだけど、叩いてるAPIがそう返してるんだろう。
$ins = new test_ins; echo <<< EOF {test::m_aaa()} {$ins->m_ins()} EOF; ヒアドキュメントでスタティックはそのまま出力される この挙動の違いどうにかなりませんかねー
自己解決しました。先頭に$がないとダメみたいですね
809 :
nobodyさん :2014/04/06(日) 17:10:33.74 ID:nQEJIdXz
810 :
nobodyさん :2014/04/07(月) 18:44:56.32 ID:zX0JJVR6
$_GETや$_POSTのキーについて質問です。 これらに、予定しないキーが渡された場合、どう検出するのが最良ですか? たとえば、$_GET['abc']及び$_GET['def']は受け付けるが、 それ以外はエラーとして検出する方法です。 つまり、$_GET['xyz']や$_GET['イロハ']などの場合には、拒否したいのです。 このためには、一度、array_keysですべてのキーを取得して、 ループで'abc'及び'def'以外のものを探すようにするしかないですか? <?php $keys = array_keys($_GET); foreach($keys => $key) { if ($key !== 'abc' && $key !== 'def') { exit('param error.'); } } また、このように不正なキーを拒否することに意味はありますか? 多くの場合、スクリプト内で無視されるので無意味なのでしょうか? 利用法としては、不正なリンクからのアクセスを拒否したいと考えています。 よろしくお願いします。
やり方はいくらでもあるだろうし、どこまでの要件か知らんけど countなりしてその2個だけ調べるとか…? 調べるキー増やすこと考えたらarray_searchのがいいんじゃない?
少なくとも、不正なリンクからのアクセスを拒否という理由に対しては意味がありませんね。
わざわざ不要なパラメータをつける意味がない
「不正なリンク」てのがどのレベルの話による
動作としては array_diff_keyかarray_diffで比較すればいいけど 意味はないな
>>810 $strict_keys = array('abc', 'def');
if (count(array_diff(array_keys($_GET), $strict_keys)) != 0 &&
count(array_diff($strict_keys, array_keys($_GET))) == 0)) {
exit('param error.');
}
しかし、なんかめんどくさいからこっちのほうがいいかも。
$strict_keys = array('abc', 'def');
$keys = array_keys($_GET);
if (arsort($keys) != arsort($strict_keys)) {
exit('param error.');
}
意味はあるかというと、あまりない。register globalsがonであるような環境も今はない(と思いたい)し。
>>816 なぜに2回array_diffするん?
818 :
810 :2014/04/07(月) 19:55:00.01 ID:oeJdbJD1
>>811-816 ご回答ありがとうございます。とても参考になりました。
$_GETの入力値チェックをしていたところ、不正なキーを持つリンクでも
通ってしまったので気になって質問しました。
http://exaple.com/abc=2014&def=4&xyz=1111111 こういう場合には、弾いた方がセキュリティ的にいいんじゃないかなと。
register globalsがonでないので大丈夫だとして、
キーにJavaScript等の不正値が仕込まれたらどうなの?と少し不安に感じたのです。
入門書でも、値の検証はしても、キーの検証をしているものはなかったので
疑問に思いました。
でも、この検証にあまり意味がない(必要性がない)ということみたいで良かったです。
>>816 のコードも参考にさせて頂きます。
ありがとうございました。
>>817 ええと「過不足」がないことを調べるためにはそうしないとだめ。
array_diffは、引いた残りを出すことしかしない。
って、
>>816 の最初の例は間違えてた。
どちらも != 0にする。
ちなみに、集合が過不足なく一致しているかの検証という意味ではSQLでも同様のめんどくささ(二回引き算)があって。
幸いPHPは配列の比較ができるので、後者の(しぶしぶソートをした上で)集合そのものを比較するコードを書いた。
>>819 不足の話は書いてないけど
そういうことなら演算子が間違ってるだけか
過不足までやるなら
array_intersectで、元のarrayと一致するかで実装しそうだ
すまん、修正入ってた
>>821 array_intersectを使う場合でも結局ソートは必要で、こんな感じになる。
arsort(array_intersect($strict_keys, array_keys($_GET))) == arsort($strict_keys)
で、そうするくらいなら、intersectなんてやらずにこれで十分ということに。
arsort(array_keys($_GET)) == arsort($strict_keys)
集合比較はもっと楽であってほしいよね。
array_intersect($strict_keys, array_keys($_GET)) == $strict_keys
キーと値が維持されるから大丈夫だと思う
>>816 は&&を変えないとダメだね
ヘッポコデスマヌ。
このスレって馬鹿しかいないの?
俺もお前もみんな馬鹿
828 :
nobodyさん :2014/04/09(水) 13:03:06.80 ID:Q3D5DjV1
PHP最近勉強し始めたんだけどHTMLコードって<?PHP?>の外に書くべきか中に書くべきか迷う 視認しやすさは絶対外に書いたほうだと思うんだけどいろんなプログラムのソース見てると $header = <<< HTML 〜みたいなことして最期にechoしてるのが結構あったので気になった 実際どっちがいいの?
フレームワークとかMVCとかあまり理解できてないけどそういうのを真似してる 静的部分をtemplate.htmlとかで保存して、動的な部分だけ[::dynamic_contents::]みたいにして、 $output = str_replace('[::dynamic_contents::]', $dynamic_contents, $source); $output = str_replace('[::page_title::]', $page_title, $output); $output = str_replace('[::hoge::]', $hoge, $output); みたいに置換で埋め込んでいく感じ
>>828 それはやってるうちに覚えていくから今は好きなようにやりなさい
最終的にはテンプレート使った感じになるだろう
832 :
nobodyさん :2014/04/09(水) 13:18:29.92 ID:Q3D5DjV1
テンプレートか、その発想はなかったです ちょっと調べて実装してみる、どうもありがとう
ヒアドキュメントで書かれたテンプレートファイルに、分けたPHPファイルで作った変数を{$hoge}で埋め込んで行けば良くね?
>>829 なんか一周しちゃった感じだね。
HTMLをHTMLとして完全に独立させたかったのかなぁとは思うけど、そこまでする価値はないかな。
ということで、<?= $dynamic_contents ?>どぞ。
>>834 その記法はサーバによっては動かないからダメだろ
記法にいちいち突っ込まないでechoに脳内変換しろよ
もうすぐ、5.3終わるしな
リポジトリから開発サーバや本番にデプロイするのってどういう手段使ってますか?
839 :
nobodyさん :2014/04/10(木) 01:35:22.34 ID:E19cp2WK
git pull svn up cvs up tar zxf tar xfj のどれかだな大体
tarコマンドはどういうことですか?
cap vagrant どっちか
>>835 サーバによっては動かないからダメ?そんな制限課してコード書くなんてドMだね。
ちなみに普段どの環境をターゲットとしてコードを書いてるの?
short_open_tag はデフォルトがころころ変わるからだろw 最新は常にOnだが
5.4以上は常に利用可能になるんだから 使える前提でいいよ
最近はショートタグonでもoffでも使えるで
今のは on/off は <? 〜 ?> の作用だけで <?= 〜 ?> は常に使えるね。
最近 <?=$piyo?>が使えたから、通常部で <? ?> で書いたら動かなくてハマったことあったわ
5.6リリースに合わせてFAQも直したいな
というか削除してしまってもいいんじゃないかな?
> 2. このスレに書き込むときに自分のサイト名を晒したくない
> →
http://example.com/が例文などのために予約されている 。hogehoge.comは使っちゃダメ。
こんなのとか
> 3. ブラウザに何も表示されないんだけど・・・
> → Apacheの設定を見直せ。ファイルの拡張子は何にしてて、その拡張子でPHPを呼ぶようになっているか?
display_errors に触れないとか Apache 限定とか
> 13. $a1, $a2, $a3 ... のような変数名をうまく扱いたい
> 17. CSVやTSVのファイルをスマートに扱いたい
質問の意味が曖昧すぎるとか色々
まぁ時代にそぐわない&みょうちくりんな項目多すぎです
誰も見てないから安心しろ
じゃあ次スレからFAQは不要という事で
FAQの質問が来たときの対処よろしく。
今の2chにわざわざご苦労なテンプレ改変する気合のある人間が残っていない まぁFAQで説明が足りない質問がきたら答えればいいだけだしあれは飾りみたいなもんだ
>>1 のPHPのバージョンが前スレの5.3からあがってるのに今気づいたぐらいだわw
つうか5.5なんて使ってるやつ少数だし5.3が主流だからあそこの変更は早漏だろ。
まぁテンプレなんて守った質問なんてほとんどないし、
質問する時の注意に、OS名やPHPのバージョンなど環境を書けって書いとけばいいと思うわ。
MySQLやImageMagickなんてのはソース見ればわかるしな。
メジャーな言語の質問スレでFAQが存在しているのはPHPとSQLぐらい? ペチパーらしいと言えばペチパーらしい
857 :
nobodyさん :2014/04/10(木) 20:08:19.28 ID:LL77C8YL
php5.5でapcのユーザーキャッシュが使えないのですが 代わりとなる新しいめのライブラリはありますか? Cache_Liteを試したのですがphp4向けらしくPEAR_ どうたらのエラーが出ます 共有サーバーなのでアップロードのみで動作すると嬉しいです
JavaScriptもある Webにほぼ限定されてるから問題になりやすいケースが想定しやすいからだろ
859 :
nobodyさん :2014/04/10(木) 20:49:30.80 ID:E19cp2WK
自分で調べる気のない馬鹿が多いからだよ
ごめん、APCuはpeclだからレンタルサーバーだと多分無理
862 :
nobodyさん :2014/04/10(木) 21:39:53.99 ID:0YSfcrkY
>>857 どこでも動かそうとするならファイルで持つのが無難じゃないかな
Doctrine\Common\Cache\FilesystemCache とか
Zend\Cache\Storage\Adapter\Filesystem とか
Zendは依存するライブラリが多いんで用途によっては逆効果かもね
864 :
857 :2014/04/11(金) 10:02:16.29 ID:6ERCSgiM
865 :
nobodyさん :2014/04/11(金) 13:50:47.95 ID:2gWD1WEG
windowsにPHPをインストールしようとしてるとこです。 Apacheやら何やらの関係でVC11のランタイムを入れたので PHPは5.5系の64bit版が素直な選択肢になると思うんですが このバージョンはまだ実験的であるとなっています。 説明を読むと64bitならではの部分(一部)のことのようですが ちょっと気になります。 windows7(64bit) VC11インストール済みの環境で 5.4系(VC9)や32bit版も選択肢になるんでしょうか?
大人しく32使っとき
867 :
nobodyさん :2014/04/11(金) 17:49:43.55 ID:DmbGkO0r
プログラムというか設計について相談です。 フォームに「住所」という入力項目があって、 郵便番号、都道府県、市区町村などを入力します。 住所が必須でない場合について A:1箇所でも入力があればエラーチェックをする B:全て入力してたらエラーチェックをする 入力していないと、空の値にして入力がないことにする のどちらが適切でしょうか? 普通はAだと思うのですが、Bの「必須項目でないのに間違った入力」 をどう処理するかで悩んでいます。
クライアントと決めろ。そしてPHP関係ない
869 :
nobodyさん :2014/04/11(金) 18:01:56.24 ID:DmbGkO0r
いえ、仕事じゃないです。 フォームの作り方によってPHPの書き方も変わってくるので、質問しました。
なんにせよ仕様策定者が決めること。自分が策定者なら データの重要度や目的による入力の自由度で決める
それぞれ「あったら」チェックするか、幾つかのグループにして チェックするかは好きにすればいいんじゃね? 入力あったもん全部ぶち込んでおきたい派なら 個別にあるものチェックすりゃいいだろうし 郵便、都道府県、市区町村揃ってなきゃ見る価値無いってならスルー
$x = $a ?: 'default'; こんな書き方始めてしったわ
え?それおかしくね?真の場合どうなんの?
エルビスに見える?
$a
へー… 空でも入るかと思った
そこそこ最近できた記法だったと思う。 便利だよね
5.3以降から出来たのか。欲しいなと思いつつ知らんかった
今レンタルサーバで主流なのは5.2〜5.4が選べる感じか とはいえ5.2のままのところも以外に多いし 過去のバージョンは使えず5.5のみのところもあるな
今レンタルサーバではどんどんPHPが外されてるな。 新しくレンタルサーバやるところでPHPを入れてるところはまずない。 今までPHP付きでレンタルしてたところは簡単には外せないから惰性で入れているが、 そういうところでも新サーバを導入するときにはPHPをインストールしないのが常識になりつつある。 完全に未来を閉ざされた言語PHP。 わざわざPHPを覚えるのは時間をドブに捨てるのと同じ。
例えばどこのサーバーで外されたの?
スルーしろ いつもソース出せないたまに現れる基地外だから
>>878 ,879
一見これは!と思うでしょ
実際は他の型からbooleanへの変換仕様がアレなせいで
出番はほとんどないという
booleanの変換仕様ってそんなにおかしかったっけ?
C#のnull合体演算子みたいに使うのがふつーでしょ。
>>885 PHPの変態要素の一つとして有名じゃないか
if (!new SimpleXMLElement('<root />')) { echo 'えっ'; }
<root> </root> にすると表示されないな ていうか改行入れないとだめだな これはなんで
889 :
amiba :2014/04/12(土) 19:36:36.04 ID:7wXnsHq0
【OS名】Windows7 pro 64bit 【PHPのバージョン】php-5.4.26-Win32-VC9-x64 スレッドセーフ 【連携ソフトウェア】Microsoft SQL Server 2012 Express with Advanced Services 64bit版 【連携ソフトウェア】MApache 2.2.27 win64 binary 【質問内容】 SQLサーバ用のドライバが認識されません。 原因と解決方法をご教授願います。
890 :
amiba :2014/04/12(土) 19:37:43.88 ID:7wXnsHq0
■状況
@ドライバーDLL配置
〜〜\php54\ext の中に以下を配置
php_pdo_sqlsrv_54_ts.dll
php_sqlsrv_54_ts.dll
※Microsoft Drivers 3.0 for PHP for SQL Server からダウンロードしてきたDLL
※
http://www.microsoft.com/en-us/download/details.aspx?id=20098 Aphp.ini編集
extension_dir = "〜〜\php54\ext"
extension=php_pdo_sqlsrv_54_ts.dll
extension=php_sqlsrv_54_ts.dll
BSQLServer Native Client存在確認
「プログラムのアンインストール」画面に、
以下の文字列があることを確認
Microsoft SQL Server 2012 Native Client
891 :
amiba :2014/04/12(土) 19:38:45.76 ID:7wXnsHq0
Cphp再起動(Apach再起動) Dphpinfoを確認 項目「PDO drivers」が「no value」となっており、 読み込めていない。 また、タイトル「pdo_sqlsrv」も存在しない。
馬鹿は
>>883 と一緒にスルーするといいよ
スルーするのは個人の勝手だし、それで確実に泣きを見るのもそいつの勝手
895 :
amiba :2014/04/13(日) 08:22:28.12 ID:Oq6/qLs5
>>892 ありがとうございます。盲点だった
大人しくODBCで接続しました
>>894 よう基地外
お前ソース出せっていっても俺は困らないし自分で調べろの一点張りだからな
お前みたいな意味のないやつは邪魔なだけだから消えてくれ
スルーするのも泣きをみるのも勝手ってなら最初から黙ってろってのら
CurlでSSL VersionがNSS/3.12.6.2となっているんですが、 これをOpenSSLに変更したいんですけど、どうすればいいでしょうか? CentOSなんで、yumコマンドで出来ればいいんですが。
PHPを使い続けてるのは
知らずにPHPを使い続けることと、知っててわざとスルーして使い続けることの区別もつかない
>>896 のような基地外が大半だと言う現実
何も知らない初心者を騙して喜んでる
>>896 のようなクズしか残っていない
なんかクズが居着いてるな
嗚呼やっぱりいつものやつか
存在が意味ないから消えなきゃならないということは、
存在が社会にとって害悪でしかない
>>896 はどうなるんだろうな。
よほどくやしかったらしい
同じ事連呼してんのか・・・ アルツハイマーみたいだな
>>903 2chにはちゃんと自己紹介板があるんだから自己紹介は自己紹介板でやれよ
ざっと見たけど、ようは
>>898 を言いたいんだろ?
PHPが流行ってるみたいなこといって初心者を騙してるみたいなこと。
>>880 はPHPがインストールしてあるレンタルサーバで、
どのバージョンが現在主流なのかっていう話で、
PHPが世の中のレンタルサーバで主流とは一言も言ってないのに。
個々には突っ込まないけど読んでて色々主張もおかしいと思った。
結局、ロクに反論もできずに吠えるだけの
>>896 みたいな愚図が住み着いてるせいで、
ただでさえ低く評価されてるPHPユーザーがさらに低く評価されてしまうんだよ。
結局、悪口悪評書かれて困るんだろ、いやなんだろって言ってるだけのアホなんだよね。 ずっと連呼してればいいよ。こまらねーし。
必死すぎ
反論っていうか
>>905 になるのがわかりきってるから相手にすらされてないという事実
PHPインストールされてないレンタルサーバは増えてます!
耳は聞こえません!
STAP細胞はあります!
だけどまともなソースは出せません!
伸びてると思ったらこんなんかよ ループするのわかってんならレス選別するの面倒だからscで続きやってくれ
sc見てきたけどレスが反映されてなくね
scのレス反映はひろゆきのサイバー攻撃だったからな Jimが対策とったのか
896涙目ワロタ
>>896 は効果抜群すぎたな
相手にするのも面倒なほど効き過ぎちゃったようだ
俺のPHPスレで暴れるなゴミども
転載禁止レスで1000まで埋まったりするよね。 ひろゆきがクロールしたときにダミーのdat返すようにしたんじゃない? キャーJimさんすてき!といいたい
>>896 って自分が池沼の自覚あるのかな?
それともないのかな?
opensslの対応は出来てるかい?
負けで良いよ。
927 :
nobodyさん :2014/04/15(火) 16:09:24.55 ID:yfomWSxe
PHP+MySQLなんですが UPDATE `table` SET `hoge`=hoge+1 WHERE `koko`; ってhogeの数値を確かめず+1ってやったとき、そのままhogeの数値を確認する方法ってあります? それとも一々SELECTで調べなきゃならないんでしょうか?
PHPの質問をどうぞ
MySQLにはRETURNING句は無いからな、あきらめろ
論理も糞もない896が悔しかった認定しかできなくなってて哀れ こういう他人の同情を買うことしかできない人ってほんと可哀想
キチガイ言われた
>>894 以外ムキになって反応する意味がないだろw
自演お疲れ様です
ID制への移行、やっぱり必要じゃないかなぁ。
複数人で896を叩いてるように見せかけて実は全部894だからなこれ 特定のレスにいつまでも噛み付くのはこいつの常套手段 何度も繰り返してきて特徴丸出しなのにほんと懲りねえなw
この流れ1000まで続く上に 次スレでもPHP使い煽りレスを数レス以内にしてきて 雰囲気糞なところからスタート 煽りに反応しちゃったやつと300レスぐらいまで下らねぇ言い合い続くから 賢い奴はさっさとスレ離れた方がいい
なるほど、それが目的か
必殺斜め上解釈 ほんと特徴丸出しww
ちなみに俺のレスは 899 901 905 932 934 935 937ね
自意識過剰だね。
どうしても俺を896に仕立てあげたいみたいだから教えてあげただけだよw あとこれ最後のレスにするから
SQLインジェクション対策したいんですが、 $test = $_GET['data']; //エスケープ $test = mysql_real_escape_string($test); $result = mysql_query("select * from aaa where name = '{$test}'"); このようにmysql_real_escape_stringでエスケープしてれば、SQLインジェクションって防げますよね? 防げない場合どういうパターンがあるのか教えてください
マルチだしスレチ
>>941 防げるよ。
だけど、mysql_系は非推奨で廃止予定だから、mysqli_系かPDOを使うべき。
そのselect文なら防げるがname=がid=とかintegerの場合 適切に前後にクオートいれてないとインジェクション出来るよ
945 :
941 :2014/04/15(火) 21:04:16.57 ID:???
>>943 低レベル回答者様ご回答ありがとうございますm(__)m
946 :
nobodyさん :2014/04/15(火) 21:15:14.53 ID:TDuzbORW
windowsで「php.exe」のあるディレクトリを取得できますか
cd c:\ dir /s /b php.exe
全部のドライブ調べればいいがな
950 :
nobodyさん :2014/04/15(火) 21:28:30.82 ID:TDuzbORW
サンクス
>>945 は文字セットについての指摘が欲しかったってことか
大半の人は896が自演で煽りあってるように見せかけてるだけと気付いてる。 phpがどこの鯖にもインスコされなくなりつつあるというのは周知の事実だし。
レンサバ使ってるのって wordpress層が大半だよな ビジネス的に見てわかりやすいもんだな
>>951 prepare使うようにしたほうが色々と楽だよ
亀レスすまんね
/ ̄ ̄ ̄\ /ノ / ̄ ̄ ̄\ /ノ / / ヽ | / | __ /| | |__ | | | LL/ |__LハL | \L/ (・ヽ /・) V /(リ ⌒ ●●⌒ ) | 0| __ ノ | \ ヽ_ノ /ノ インスコされなくなりつつあります! ノ /\__ノ | (( / | V Y V| V )ノ | |_θ_| | / ̄ ̄T ̄ ̄\ |二二二二二二二| | | パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ( )】 ( )】 ( )】 【( ) 【( ) 【( ) / /┘ . / /┘. / /┘ └\ \ └\ \ └\ \ ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ
959 :
nobodyさん :2014/04/16(水) 15:08:23.95 ID:r1C0DTd1
普段はxamppで開発して、本番はcentosのサーバを使用しているのですが、 PHPの環境変数か何かで、サーバがxamppか否かを判定する方法ってないでしょうか? system関数など一部ソースが異なるので、分岐出来たらいいなと思っています。
>>955 念のため確認したいんだけど、それはレンサバ全体の話?
それとも何かしらの限定されたレンサバ?
>>959 OSによって分岐させればいいんじゃないの?
>>961 すみません。たしかにそうですね。
PHP_OS
を使うことにします。ありがとうございました。
>>959 本番ドメイン(host)とその他で分けるとか
Winサーバに移植する日が来ないことを祈ろう。 hostnameおすすめ。
965 :
964 :2014/04/16(水) 15:58:48.95 ID:???
でもconfigとかじゃなくて、ロジックか。 ごめん。
966 :
nobodyさん :2014/04/17(木) 03:42:20.01 ID:VCB2amMZ
俺ならvcs管理外でファイル一つ用意しておくね たとえばtestてファイルがあればテスト鯖でなければ本番
967 :
nobodyさん :2014/04/17(木) 03:46:01.51 ID:4T+A9Zxt
ありえない
動作する環境を2つに限定するとあとで困るぜ。 config 作ればいい話
まぁ、dropboxいれてCentOS環境作れよって話もあるけど。 大概はさしたる手間でもないし。
dropboxも仮想環境を始めたの? できれば詳しく
すまん。突込みありがとう。virtualboxだ。
ざんねん……。
973 :
nobodyさん :2014/04/17(木) 18:10:03.61 ID:0kTNtsmJ
VirtualHostでデフォルトが403とか、、、、Host指定してる?
ブラウザがサーバーに送っているのと同じようにしてやれば取れると思うよ。 分からないのならば、あきらめたほうがいい。
file_get_contents か、、、 3番目のパラメタでヘッダ指定して Host とかいれてやればいいかもしれない。
file_get_contentsはUAが空になるからたぶんそれ
973じゃないけど、手持ちのサーバからtelnetでつないで直接HTTP書いてもダメだったわ。 HostやらUAやらAcceptだとか色々つけてみたんだけど。
>>968 ついでに、処理についても、抽象クラスかインタフェースを作って、OS/環境毎に具象クラスを分ける感じかな。
>>978 w3mで普通につなごうとしても403。
何を仕込んであるんだろう?
981 :
nobodyさん :2014/04/17(木) 23:33:10.86 ID:4T+A9Zxt
なんかしらんがwgetなら取れたよ
>>973 みたいに基礎的な知識もないくせにプログラミングに手を出すゴミの掃き溜めそれがPHP
>>982 素人でもとっつきやすい言語、それがPHP。
そういう点から難癖つけられやすいのもPHP。
phpとrubyは掃き溜め とくにcakeとrailsは掃き溜め 土方と素人が集まるところは仕方ない
IPアドレス直だとブラウザでもwgetでもダメだし、VirtualHostだろ
IPアドレス直ってなんだよ Hostなければ普通はじくだろ
>>985 VirtualHostの問題なのか切り分けを行っているんだろ。
>IPアドレス直だとブラウザでもwgetでもダメだし、VirtualHostだろ それだけの理由で、最初にVirtualHostを疑うこと自体滑稽だわ。
990 :
978 :2014/04/18(金) 16:58:52.38 ID:???
>>973 気分転換にリトライしてみたら、host,connectionヘッダー必須ってだけっぽい。
991 :
忍法帖【Lv=40,xxxPT】(3+0:8) 【Dlivejupiter1387514181219820】 【東電 74.1 %】 【11m】 :2014/04/18(金) 23:44:38.60 ID:g1tDPhPP
IDにPhPキタ━━━━━━(゚∀゚)━━━━━━!!!!!
992 :
nobodyさん :2014/04/19(土) 00:35:14.81 ID:HQIlnmOW
質問失礼いたします。
書き込み初めてなため規則に反していたり、スレ違いでしたらごめんなさい。
「ニューすったー☆」というスクリプトを使って、最新RSSの自動ツイートをロリポップサーバのcronで作りたいと思っています。
「ニューすったー☆」
ttp://www.jeia.co.jp/report/2010/11/05/353/ 実際最新RSS自動ツイートすることは出来るようになりました。
ですが、そのツイートの内容を変更(新着記事という文言やURLなどを加えたり)したいと考えています。
その際「ニューすったー☆」の/twitter.class.phpをイジれば良さそうだと考えたのですが、わかりませんでした。
どのようにすればツイートの内容の変更ができるのかどなたかご教授頂きたいです。
もし他の方法で最新RSSの文言を変更した配信が出来るものがあればそれでも構いません。
PHPを独学で学び始め一週間くらいで知識も浅いのですが、検索しながら頑張りますので、
解答よろしくお願い致します。
993 :
973 :2014/04/19(土) 05:42:59.07 ID:???
みなさま回答ありがとうございました
>>990 指定したら無事に取得できるようになりました
ありがとうございます!
>>984 >土方と素人
素人に失礼だろ
素人じゃなくて基地害
996 :
nobodyさん :2014/04/19(土) 06:39:05.15 ID:u2gMQu1K
sqliteを使ってるのですが PDO より SQLite3 が優れている点はありますか?
いっぱい。
1000!!!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。