PHP質問・雑談スレ 2【初心者お断り(ROM歓迎)】©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん 転載ダメ©2ch.net
2016/10/17(月) 21:44:12.59ID:???初心者お断り(ROM歓迎)と書いてますが、初心者用のスレが用意されているからで、
難しい質問や話題をしなければいけないわけではありません。
PHPマニュアルの読み方を概ね理解していて、関数リファレンスが正しく読める方用のスレです。
PHP未導入の方や、手取り足取りが必要な初心者の方はム板のくだスレへどうぞ。
http://echo.2ch.net/tech/ (【PHP】で板内を検索)
前スレ
http://tamae.2ch.net/test/read.cgi/php/1461283091/
その他リンク
・PHPマニュアル
https://secure.php.net/manual/ja/index.php
・コードテスト・貼り付け用
http://ideone.com/
・プログラミングのお題スレ Part8 (求PHPer参戦)
http://echo.2ch.net/test/read.cgi/tech/1444216746/
このスレで扱う話題
・PHPのコード,設定や設定値に関する質問
・常識的範囲内でのコードレビュー依頼・改良相談
・PECL,PEARに関する質問
・PHP新機能やPHP関連トレンドの話題
(FWや非公式ライブラリの話題や特徴比較は良いが使い方から先の話題は専スレへ)
・PHPのバグ発見報告・公式に報告する前の検証依頼
このスレで扱わない話題
・直接関係ない○○特有の質問(専スレへ)
(HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等)
・PHPの改造
0002nobodyさん
2016/10/17(月) 21:48:16.11ID:???猿
蟹
サル
カニ
ガニ
ゴミクズ
0004nobodyさん
2016/10/17(月) 22:49:19.07ID:???俺が書いたO/Rマッパーの場合、IN句に対応するコードは14行だな。
14行で渡される値がIN句に適切かどうか、SQLインジェクション対策から各種データベースへの汎用対応まで全部やってる。
勿論、ifやforeachみたいなのはちゃんと一行としてカウントしてるよ。
お前が書くコード、どんなことになってるの?
ちょっと説明してくれないか?
なぁ、そろそろ聞いていいか?
お前、越前ガニ君じゃないのか?
これほどのアホが、二人も三人もいる事自体が理解できん。
0005nobodyさん
2016/10/17(月) 22:51:35.98ID:???IN句で渡された値がWhere句に相当する条件でもその通りにクエリビルドする。
それでも14行だ。
エセ関西弁は、一体、どんなクソコードを書いてるんだよ?
0006nobodyさん
2016/10/17(月) 23:03:10.93ID:???暇ならパズルSQL問題出すけど解いてみる?
おまいさんのいうo/rマッパーを使って解けるかためしてみるとええで。
世の中にはo/rマッパーでは到達できないSQLがあるんやで。
0007nobodyさん
2016/10/17(月) 23:04:47.75ID:???0008nobodyさん
2016/10/17(月) 23:10:45.93ID:???>世の中にはo/rマッパーでは到達できないSQLがある
ということと、お前がO/Rマッパーを作れる/使いこなせるという事は全く別の事だとなぜ理解できない?
都合が悪くなったらあっちのスレは無視するお前が、まともにSQLが使いこなせていると
どうして他の人間に説得出来ると思うんだ?
それに、O/Rマッパーは只のクエリビルダーではないから、
通常、ナマのSQLも受け付ける。渡された配列をbindする形でな。
おまえのごたくは聞き飽きたとなんか言わせれば済む?
お前は頭が悪すぎるんだよ、致命的に。まだ気づかないのか?
0010nobodyさん
2016/10/17(月) 23:15:47.33ID:???おまいさんが作ったo/rマッパーの仕様なんか知らんで。
ついでに言うならo/rマッパーを作れる能力があるとして、それが今どこかで役に立つかっちゅーと全く役に立たんで。
クエリビルダーなんぞ今はどのフレームワークにもあるけんの。
しかし、SQLパズルを解ける能力は完全に業務遂行能力と1対1で紐付くで。SQLパズルを自動的に解いてくれるo/rマッパーなんか存在せえへんからな。
やってみる? 意外と楽しいぞ。
0011nobodyさん
2016/10/17(月) 23:24:43.54ID:???どのフレームワークにもあることが、どうして、今の話題に何か関係があると思った?
>しかし、SQLパズルを解ける能力は完全に業務遂行能力と1対1で紐付くで。
そんなゲームが実務とどれほど密接に結びつくと、どうして思った?
O/Rマッパーに必要なのは、
「出来るだけ簡単にクエリビルドできること」
「場合によってはクエリの生成をプログラマに委ねるる事が出来る事」
の二つだ。
お前みたいなゴミクズの出番はねーんだよ、ひきこもってろ、野猿。
>やってみる? 意外と楽しいぞ。
おめーの快楽なんてどーでもいいんだよ。一生一人でオナニーしてろ、サル
0013nobodyさん
2016/10/17(月) 23:31:50.36ID:???(マクドナルドのセットメニューなんかがそう)とか、特定の商品には異なる税率が掛かってお会計が変わったり、
あるいは特定の商品を三つ買ったら千円となったりするようなリアル金勘定と絡んでくるんだよ……!
一度そういう業務をやってみればわかるぜ。マジカルSQLこそが正義であるということに……!
(ここはPHPスレなので全く関係のない話なのだが)
0014nobodyさん
2016/10/18(火) 00:09:10.50ID:???まだ、そえれがO/Rマッパーと関係あると思ってるのか。
おまえ、本当に一回死んだほうがいいよ。向いてない、この業界に。
0015nobodyさん
2016/10/18(火) 00:38:18.88ID:???ORMならまぁわかるが
0016nobodyさん
2016/10/18(火) 01:14:21.67ID:???特に、最新環境にはこだわりませんので、5.x系でも、7系でも良いです
簡単に構築・維持が出来る方が良いです
0018nobodyさん
2016/10/18(火) 03:11:02.71ID:???結局末端までの依存関係を気にしながらrequireすべし派の解説はないままっぽいかな?
0019nobodyさん
2016/10/18(火) 08:20:01.66ID:???0020nobodyさん
2016/10/18(火) 10:13:16.66ID:???場所?
なら、ここ
PostgreSQL RPM Building Project - Repository Packages
https://yum.postgresql.org/repopackages.php
0022nobodyさん
2016/10/18(火) 10:24:38.74ID:???0024nobodyさん
2016/10/18(火) 10:32:22.73ID:???> そんなゲームが実務とどれほど密接に結びつくと、どうして思った?
お前それこれ見ても言えんの?
http://www.geocities.jp/oraclesqlpuzzle/
0025nobodyさん
2016/10/18(火) 10:34:26.77ID:???0026nobodyさん
2016/10/18(火) 11:20:41.64ID:???0027nobodyさん
2016/10/18(火) 13:23:36.08ID:???0028nobodyさん
2016/10/18(火) 14:01:02.93ID:???統計によると、ほとんどが5.3か5.4らしいけど
0029nobodyさん
2016/10/18(火) 14:18:03.74ID:???この統計だと、5.3と5.4あわせても10%未満だな
https://seld.be/notes/php-versions-stats-2016-1-edition
0033nobodyさん
2016/10/18(火) 14:57:38.88ID:???もうそうやって議論内容ではなく人と戦ってる時点で
純粋な議論ではなく人を批判したいとかマウンティングしたいって精神が現れてるんだよ
0034nobodyさん
2016/10/18(火) 15:03:43.35ID:???そういうことしても使えないという意味で言ったわけではないからな
相手の意図をいつまでも理解できない奴のようだが
0035nobodyさん
2016/10/18(火) 15:05:06.45ID:???0036nobodyさん
2016/10/18(火) 15:25:16.76ID:???0037nobodyさん
2016/10/18(火) 16:02:52.15ID:???何言ってるんだ。
0039nobodyさん
2016/10/18(火) 16:41:36.66ID:???お前PDOが何なのかわかってないんじゃないのか?
O/Rマッパーなんか関係ないだろ。
IN句は普通に使える。
0040nobodyさん
2016/10/18(火) 16:42:03.97ID:???>>前スレ764
> しかし現実にPDOはIN句が使えなかったりして
いや、使える。
> そういうことを考えると入れる時にエスケープしておくのが安全かと自分は考えている
SQLインジェクションの可能性があるなら、プリペアードクエリを使えば良い。IN句でも使える。
>>前スレ788
> IN句のやつをorでやればできるけど
この文章で、本当に使えないんだと思い込んでいることがわかるな。
なお、PostgreSQLの場合、プリペアードクエリを使った場合のデータベースサーバプロセスとPHPプロセスの通信回数は、パラメータの個数によらない。
複数のパラメータが1回で送信される。なので、プロセス間通信のパフーマンスにはパラメータの個数はほぼ影響しない。
0041nobodyさん
2016/10/18(火) 16:50:15.88ID:???> 「出来るだけ簡単にクエリビルドできること」
> 「場合によってはクエリの生成をプログラマに委ねるる事が出来る事」
> の二つだ。
O/RM = クエリビルダ であるかのような認識をしているのかねぇ。
0042nobodyさん
2016/10/18(火) 17:44:07.55ID:???クラス群だ
そのクラス内のメソッドなりの標準装備されている機能のみでIN句は使用できないよね?という意図ね
前スレとかのことは今は話していないので忘れて良いよ
そんなのスクリプトで色々やったらPHPで大抵のことはできるだろ
拡大解釈だよ
0043nobodyさん
2016/10/18(火) 17:49:54.10ID:???いや、普通に使えるのだが。
$stmt = $pdo->prepare('select * from user where user_id in (?, ?, ?)');
$stmt->execute(['user1', 'user2', 'user3']);
$rows = $stmt->fetchAll();
どこが使用できないのだ?
0044nobodyさん
2016/10/18(火) 17:55:17.63ID:???それにINを使用するケースって数が膨大だったり使用するプレースホルダの数が未確定だったりすることが多いでしょ
そういう場合に標準のメソッドでは使用できない
0045nobodyさん
2016/10/18(火) 17:58:48.08ID:???> ?のプレースホルダ―は今あまり使用しないからね
それ、IN句が使えるかどうかと関係ないな。
> それにINを使用するケースって数が膨大だったり
膨大になることなんてめったにないが、なったとしてもIN句はつかえるし。
> 使用するプレースホルダの数が未確定だったりすることが多いでしょ
未確定なことなんてありえない。未確定だったらexecute()にパラメータ渡せないし。
> そういう場合に標準のメソッドでは使用できない
いや、できてるでしょ。
0046nobodyさん
2016/10/18(火) 18:03:06.13ID:???select id from foo => 1000行くらいデータ取得
select * from bar where foo_id in (1000個くらいの値リスト)
とかやってるんじゃないだろうな。
0047nobodyさん
2016/10/18(火) 18:18:28.19ID:???JOINってINNER JOINやOUTER JOIN、サブクエリとかの結合のことか?
それなら使いまくってるが
0048nobodyさん
2016/10/18(火) 18:23:24.68ID:???0049nobodyさん
2016/10/18(火) 18:30:49.42ID:???PDOのプリペアドステートメントはデータベースのプリペアドステートメントに1対1で対応しているべきもので, IN句内のプレースホルダ数の異なるSQLは同一のプリペアドステートメントにならない以上はarrayのバインド可能なプリペアドステートメントはPDOとしてはあり得ない。
だからarrayをバインドしたいと主張するならそれはクエリビルダの役割であって, SQLを抽象化しないPDOが行えてはおかしいことだ。
0050nobodyさん
2016/10/18(火) 18:32:57.00ID:???↓
他: プリペアードクエリ使えよ
↓
A: PDOだとIN句が使えないじゃん
↓
他: いや使えるでしょ
という流れ。
あと、
> PDOでプレースホルダも使ってるけど
> 念には念を入れて
エスケープもするとか発言してる。
O''reillyになっちゃうじゃん。
0052nobodyさん
2016/10/18(火) 18:53:15.51ID:???そしてそれを IN が使えないという話にしてはいけないということ。
それ以外の話で IN が使えないというのなら、使えないって人からの追加説明が必要かなと。
0053nobodyさん
2016/10/18(火) 18:54:24.93ID:???$stmt->bindValue(':query', 'select * from foo where bar="baz"', PDO::PARAM_STR);
これがバインド出来ねーって言ってるようなもんだろ
0055nobodyさん
2016/10/18(火) 22:51:36.87ID:???{
foreach($b as $value).... // bを配列として変換済み
}
上の関数を呼び出す時に、下記のようにbをarrayでもintでも可能にしたいです。
testfunc(a, [1,2,3]);
testfunc(a, 1);
どういう風に関数実装すればよいでしょうか
0056nobodyさん
2016/10/18(火) 23:48:00.25ID:???bを配列として何らかの変換を行っているのであれば
条件分けでもいけるのでは?
もしくは引数を配列にするとか
0058nobodyさん
2016/10/19(水) 00:05:25.02ID:???無理筋じゃーねーよ。他の言語のデータベース接続インターフェースとかじゃ割と出来るし、PDOを拡張するだけで一応は実装可能なんだから。
PDOが名前付きプレースホルダ自体に配列が使えないっつーワンサイドハンドドロップダウン仕様なのが問題なんじゃ。
0059nobodyさん
2016/10/19(水) 00:18:28.66ID:???>>49を読んで, その上でそう思うということなのか?
あと, SQLを抽象化しないDBALで"出来る"例を挙げてくれ
0060nobodyさん
2016/10/19(水) 00:28:41.03ID:???知らんけど、同じくDBALを謳う「PDOを拡張したクラス」が山のようにある(そしてそいつらは配列をバインドできる)のはどういうことや?
PDOはRDBMSの種類毎の違いを抽象化してくれてるまではええんやが、プリペアードステートメントのパラメータのバインド部分が貧弱なんだよ。だからみんな拡張するんだ。
ドキュメントにも書いてある通り、「端的に言えば文字列置換してるだけやで」って位だからな。気が利かない。
0061nobodyさん
2016/10/19(水) 00:29:17.31ID:???0062nobodyさん
2016/10/19(水) 00:29:57.71ID:???0063nobodyさん
2016/10/19(水) 00:31:09.84ID:???0064nobodyさん
2016/10/19(水) 00:33:33.91ID:???つうかみんなそこら辺に不満言いながら拡張PDO書くのがphpおじさんたちの仕事だよ。
もっと言うならexecuteした後にfetchさせるのとかもクッソ面倒いから大体そこも拡張っつーかラップするよ。
0065nobodyさん
2016/10/19(水) 00:40:40.11ID:???プリペアドステートメントのバインドが文字列置換だけなわけがない
通常のいわゆる静的プレースホルダではDB側が用意した(PREPARE文で発行した)ステートメントにUSING句でバインドして実行している
DB側でこの機構に対応していない場合(や利用しようとして失敗した場合(今はどうか知らない))にはエミュレーション(いわゆる動的プレースホルダ)としてPHP側が処理を代替する
静的プレースホルダの機能はDB側機能で制約を受ける
PDOは"SQLを抽象化しない""DBへの接続とクエリのみを抽象化する"DBALである以上, SQLを弄らねばならない機能はより上位のレイヤで実装されなければならない
006665
2016/10/19(水) 00:43:28.22ID:???0067nobodyさん
2016/10/19(水) 00:56:34.77ID:???つうても静的プレースホルダに配列を突っ込めるRDBMSは多分存在するよな?
なんで、in句にプレースホルダを入れてそこに配列バインド出来ないのはやっぱりPDO側の怠慢やと思うんや。
エミュモード有効なら結局SQL組み直すやん。
なら配列入れて無効なら展開するような仕様でええ思うんだけどな。(まあ、その仕様入れるとSQL自体がバグる可能性もあるので一長一短だが)
006865
2016/10/19(水) 01:07:02.59ID:???> つうても静的プレースホルダに配列を突っ込めるRDBMSは多分存在するよな?
知る限りないが, ご存知なら挙げてくれ
> エミュモード有効なら結局SQL組み直すやん
プリペアドステートメントが利用可能かどうか結果が変わる仕様はまともではない
少なくともプリペアドステートメントという以上はDBのそれと1対1であるように実装されるべきだし, そうなっている
何度も言うようだけどもその枠から外れるならそれはPDOが目指すものではない
0069nobodyさん
2016/10/19(水) 01:15:52.87ID:???ワイも詳しくないけど、なんかオラクル辺りは配列バインド出来るらしいよ。ODP.netにはそういう機能があるらしい。
それがSQLを破壊してるかどうかまでは分からんけど。
007065
2016/10/19(水) 01:19:10.84ID:???その「配列をバインド出来る」の意味は :array というプレースホルダにARRAY型の値をそのまま置き換えるということだろう
決して :array にバインドするARRAY型変数の中身が展開されて並ぶわけではない
ましてやIN句には括弧が必須なのだから IN :array みたいな書き方をすればコンパイルエラーだ
0071nobodyさん
2016/10/19(水) 01:25:15.44ID:???何言ってるか微妙に分からんが、SQL上で
in(1,2,3,4,5)みたいになっているのは、php上で[1,2,3,4,5]になってるのとは等価だろ。
データの内部形式に違いはあれど配列を扱っていること自体に違いはない。
その配列形式のデータをDB側が受け取れるかどうかじゃねえか。
もっと具体的に言うとmysqlにはSET型もenum型もあるんやから、コレをPDO側で吸収する事は本来は出来るハズやで。postgresにはpolygonとかもあるやん。
ここら辺のデータを受け渡すインターフェースがあってもおかしかないとは思うんやがのう。
0073nobodyさん
2016/10/19(水) 01:30:23.68ID:???0075nobodyさん
2016/10/19(水) 02:23:17.81ID:???IN文の中身に関してはそうだけど、values()の中身とかは実質配列型だろ。
だから配列をぶっこむプリペアードステートメントが存在しても全然おかしくないしmysqlはSET型ぶち込めるし。
やっぱPDOが手を抜いてる説がワイの中で根強いなあ。
0076nobodyさん
2016/10/19(水) 02:27:05.66ID:???0077nobodyさん
2016/10/19(水) 02:28:37.37ID:???プリペアードステートメントだから配列は使えないなんてのはすげえ雑な扱いに思うけどね。
いくらPDOがネイティブ寄りの思想だからって出来ないこと多すぎなんやが。
0078nobodyさん
2016/10/19(水) 02:32:17.19ID:???実質配列型というが, SQLのARRAY型の要素は全て同じ型だ
「だから配列をぶっこむプリペアードステートメントが存在しても全然おかしくない」というのもSQL文との整合性が保たれない(IN句で IN :array は認められない)以上はプリペアドステートメント「のようなもの」ではあってもそのものではない
まるでPDOに特有の問題かのように言うが, 理想的, 或いはPDOよりマシだという実装の具体例を(別の言語でも結構だが)挙げてくれないと比較のしようもない
0079nobodyさん
2016/10/19(水) 02:32:28.64ID:???$st->bind(":in","SELECT 1,2,3")とかやればいいような気がしてきたな。
それもそれで面倒な気もするが。
0080nobodyさん
2016/10/19(水) 02:49:33.98ID:???回答はやはりPDOより上のレイヤーでやるべきだと
https://bugs.php.net/bug.php?id=64852
0081nobodyさん
2016/10/19(水) 02:53:25.31ID:???INは実行前に数がわからない。だから「何なら入れていいか」がわからない。
が、values()とかは数も型もわかる。
数と型が分かるなら、それこそ文字列と同じ扱いにできるやな。
実際にJavaのPreparedStatementクラスにはSetArray()ってメソッドがあるらしいぞ。
使ったことないからどれくらい使えるかわからんが。
0082nobodyさん
2016/10/19(水) 03:02:36.73ID:???> 数と型が分かるなら、それこそ文字列と同じ扱いにできるやな。
VALUES(?, ?, ?)などとしてPHP配列を要素を適切に並べてバインドすればよいとういことか?
最早元の話題から大きく外れているが, どういうAPIで実装すべきと考えているのか
JavaのSetArrayは正しくSQL文中のプレースホルダをARRAY型の値で置き換える
相当するものはPDOにはないからあってもよいとは思うが, IN句やVALUESで指摘された問題の解決にはなっていない(その目的には使えない)
0083nobodyさん
2016/10/19(水) 03:09:34.66ID:???0084nobodyさん
2016/10/19(水) 03:21:09.25ID:???>ここら辺のデータを受け渡すインターフェースがあってもおかしかないとは思うんやがのう。
PDOにしろADO.NETにしろJDBC、ODBC、ADO,OLEDBにしろ、基本はデータベースをベンダによらず
抽象的に扱えるインタフェースを提供するのが目的なんだから、特定のデータベースの特定の
型向けのインターフェースなんて用意しないだろ。
0085nobodyさん
2016/10/19(水) 03:27:06.04ID:???TEXTだったりvarcharだったりをSTRINGに抽象化する程度には纏められるやろ。SET型もpolygon型も実態は固定長の配列やし。それこそarrayで一纏めに出来るはずやで。
0086nobodyさん
2016/10/19(水) 03:27:34.58ID:???具体的に例あげろよ。
0087nobodyさん
2016/10/19(水) 03:29:00.07ID:???そういうのはもう設計してる人に言おうぜ。俺らに
何度言ったって無駄だろ??
それともただのかまってちゃんなの?
0088nobodyさん
2016/10/19(水) 03:30:26.87ID:???0089nobodyさん
2016/10/19(水) 03:30:40.03ID:???ただのかまってちゃんレベルになってきてるぞ。
0092nobodyさん
2016/10/19(水) 03:48:00.91ID:???クエリビルダじゃなくてデータベース接続インターフェースって自分で言ってないか?
話が変わってねぇ?
0093nobodyさん
2016/10/19(水) 04:51:13.91ID:???0094nobodyさん
2016/10/19(水) 06:22:40.53ID:???foreachで楽に組み立てられるだろ
0096nobodyさん
2016/10/19(水) 10:30:47.12ID:???PostgreSQLだと、INの方が速いけどね。
10万件の中から10件を検索(indexが使われる検索)
INを使った場合:
https://explain.depesz.com/s/PpNF
Planning time: 0.141 ms
Execution time: 0.177 ms
ORを使った場合:
https://explain.depesz.com/s/iORg
Planning time: 0.281 ms
Execution time: 0.469 ms
0097nobodyさん
2016/10/19(水) 10:31:49.79ID:???0098nobodyさん
2016/10/19(水) 10:43:30.73ID:???日本在住じゃないのか?
0102nobodyさん
2016/10/19(水) 14:06:53.65ID:???安全のためにね
↓
プリペアードクエリ使え
↓
IN句じゃつかえないだろ
↓
いや使えるし
↓
でもコードを少し書かないと使えないだろ
その意味で使えないと言ったんだよ
そもそもIN句遅いし、OR使えよ
↓
いやIN句の方が速いし
↓
今ココ
0103nobodyさん
2016/10/19(水) 14:14:37.64ID:???PDOはDBへの接続を抽象化するためのものでSQLを抽象化するためのものではない
なぜ全てをPDOに要求するのか?
0104nobodyさん
2016/10/19(水) 14:18:54.42ID:???{
$array = [];
foreach ($variable as $value) {
$array[$value] => [1,2,3];
}
return $array;
}
こういうのって最初に
$array = [];
で初期化する必要ないのかな?
削除するかで迷ってる
0105nobodyさん
2016/10/19(水) 14:19:11.56ID:???0108nobodyさん
2016/10/19(水) 14:37:40.79ID:???> 俺は多分カニ味噌?と言われた人間だが別の人とやり合ってたようだなw
かに味噌がどうこうという流れは無視してたが、最近の流れを追うとそう言われるのも妥当かなと思ったりw
0110nobodyさん
2016/10/19(水) 15:52:44.73ID:???PHPを主体にしてやってるんでしょうか?
0111nobodyさん
2016/10/19(水) 17:11:58.32ID:???0112nobodyさん
2016/10/19(水) 17:12:37.66ID:???0113nobodyさん
2016/10/19(水) 17:17:09.08ID:???柔軟にいろいろ吸収できれば何とかなると思うけど。
0115nobodyさん
2016/10/19(水) 17:25:51.43ID:???0116nobodyさん
2016/10/19(水) 17:34:13.99ID:???> だから配列をぶっこむプリペアードステートメントが存在しても全然おかしくないし
これには同意
$stmt = $pdo->prepare('select * from user where created between ? and ? and status in (?)');
$stmt->execute([$from, $to, ['hoge', 'fuga']]);
って書かしてくれてもばちはあたらんと思うぞ
0118nobodyさん
2016/10/19(水) 18:07:48.96ID:???arrayBind
arrayExecute
とかね
0119nobodyさん
2016/10/19(水) 18:18:24.40ID:???問題ない。
$sql = 'insert into books (tilte, authors) values (?, array[?])';
$stmt->execute(['php is sucks', ['matz', 'larry']);
$array = ['matz', 'larry'];
$stmt->execute(['rtfm', $array]);
0120119
2016/10/19(水) 18:20:48.34ID:???0121nobodyさん
2016/10/19(水) 18:51:55.67ID:???phpはあくまでサーバサイドのコードやからコンマ何秒を求められる事はこれから先も無いよ。
マキシマム数秒は大前提だけど、マキシマム何秒に抑えるのはphpとかの言語を駆使する話ではない。
システム構成とそのアプリケーションの仕様との相談だね。
0122nobodyさん
2016/10/19(水) 18:52:03.03ID:???0123nobodyさん
2016/10/19(水) 18:55:43.49ID:???PDOより上の機能をphp標準が用意してくれないからだろ……
だから名前も分からぬ機能もインターフェースも雑多なr/oマッパーが蔓延るんやないかい。
ワイらはORMなんか別に使う気はなく、クエリを安全にエスケープできればええゆうのに。
0124nobodyさん
2016/10/19(水) 18:56:11.91ID:???そんなもんしかないからな
0127nobodyさん
2016/10/19(水) 19:18:34.73ID:???0128nobodyさん
2016/10/19(水) 19:45:08.74ID:???いくつものjoinによっては可読性を落とし
MySQLのバージョンを理由に、謎のselect連発
だから、PDOなり、ORMなり、クエリービルダーなり、きちんと設計されて
使用されているところのほうが珍しい
0129nobodyさん
2016/10/19(水) 19:46:10.18ID:???実際にPDOを継承したり内包してるDBライブラリが数数え切れない程度にあるこの状況を見てどう思うね。
もうちょい統一してほしい思うやろ。
0131nobodyさん
2016/10/19(水) 19:50:13.31ID:???PDOに持たせなくてもいいから、PDOより上でORMより下くらいの扱いやすいDB操作インターフェース作れや。
今のopenGL直に叩いてるような状況が正しい訳ねえやろ。
0132nobodyさん
2016/10/19(水) 19:50:14.37ID:???0133nobodyさん
2016/10/19(水) 20:15:41.19ID:???一体どんな言語が, 言語の規格に存在しないにも拘らずDB接続の抽象化を超えるような機能をその言語ベンダ自身で提供しているんだ?
その機能を提供するための標準的なAPIの規格でも存在しているのか?
クエリをどうこうしたいなら単にクエリビルダだけを使えばよい(illuminate/databaseのQueryBuilderだけでも使える)
大体ORMレベルまで行ってしまったらActiveRecordとDataModelみたいな設計方針の違いもあるんだから多様性はあって当然
言語ベンダとしては最低限, DBへの接続を抽象化する, その目的はPDOで適切に達成されている
0134nobodyさん
2016/10/19(水) 20:21:05.62ID:???APIは提供したからあとは描画するだけだよ、頑張ってね的なほっぽり投げ具合だから嫌だっつってんだろ。
openGLやってバージョン上がるごとにどんどん抽象化レベル高くなってんねんで。
PDOがそこやってもええやろ。
そもそもプリペアードクエリの?文字も:文字もDBの仕様じゃないのをPDOが拡大解釈しとる話やん。
もっと制御文字増やして拡大解釈しまくるくらいは出来るやろ?
0135nobodyさん
2016/10/19(水) 20:26:01.53ID:???0137nobodyさん
2016/10/19(水) 20:27:48.58ID:???0138nobodyさん
2016/10/19(水) 20:28:15.02ID:???0139nobodyさん
2016/10/19(水) 20:30:38.82ID:???ああ言えばこう言う、でもでもだって
0140nobodyさん
2016/10/19(水) 20:31:18.78ID:???0141nobodyさん
2016/10/19(水) 20:31:29.20ID:???そういうご要望はPHPの公式メーリングリストにでも投げられたら如何か
EloquentもDoctrineもある現状, どの程度合意を得られるかは分からんが, 納得させるのが上手いプレゼンターだ
0142nobodyさん
2016/10/19(水) 20:33:09.84ID:???と思うじゃん? sqliteとか普通にプリペアードステートメントの機能が無いDBもあるじゃん?
そういうRDBMSからすればクエリを破壊してる事にはなってるわけじゃん?
0144nobodyさん
2016/10/19(水) 20:36:24.67ID:???0145nobodyさん
2016/10/19(水) 20:38:30.76ID:???それってつまりはPDOがDBの仕様(というかインターフェース)を決めている事に他ならん訳でな。
「他のDBには無いけどPDOがエミュレートしてくれる」なら周りを気にせずどんどん抽象化できるやん?
0146nobodyさん
2016/10/19(水) 20:42:51.81ID:???0147nobodyさん
2016/10/19(水) 20:43:30.59ID:???"DBに委任出来ることは委任する"のが前提
まぁ, 納得してもらわなくていいけど, 「俺の欲しい機能が公式で実装されてない」という主張, そしてそれを実装しろという要望は, ここよりPHPの公式でぶちまけるべきだ
そしてうまいこと公式の開発者たちを説得してくれ, PDOより上のレイヤは実装されている分には構わんからな
0148nobodyさん
2016/10/19(水) 20:47:59.42ID:???sqliteで思い出したけど、PDOってエミュレートどころか使えない機能を使っても使えたフリだけするパターン(トランザクションとか)がかなりあるで。
ミニマムスペックで汎用なように作ってるつもりでも実態は全然目標とは乖離してるがな!
やっぱPDOは勝手に拡張されていくべきだわ。PDOこそがDB操作の標準になるくらいがええ。
0149nobodyさん
2016/10/19(水) 20:53:09.97ID:???0150nobodyさん
2016/10/19(水) 20:57:21.52ID:???なにも汎用性重視のPDOにそんな要求しなくても
0151nobodyさん
2016/10/19(水) 21:00:08.08ID:???ベンダもそれぞれバージョンアップとかで新機能導入していくんやから、様子見てPDOがメインストリームになりそうなのを抽象化して実装するのが筋やろなあ。
0152nobodyさん
2016/10/19(水) 21:03:14.15ID:???ORMではなく。
phpがそれやってくれると普及すると思うんやけどなあ。
0153nobodyさん
2016/10/19(水) 21:06:08.35ID:???そうだねぇ。だからこそ、IN (?) に array をバインドなんてあさってのことやるよりも前にしないといけないことが多いよね。
メインストリームになりそうとかそんな段階の話は遠いよ。そもそも標準への準拠がまちまちなんだから。
0154nobodyさん
2016/10/19(水) 21:08:03.10ID:???in句にarrayを入れられない(いや、入るのかもしれないけど)のは寧ろアンダー仕様なんやないのか?
0156nobodyさん
2016/10/19(水) 21:11:43.49ID:???混同してねえよ。array型を扱えるRDBMSなら、in句にarrayを入れた場合の仕様くらいはちゃんと決めてるはず。
arrayとarrayを比較するのか、それともarrayの中身を展開して比較するのかとか。
そこをPDOでエミュレートするのは難しいはなしでは無いだろ。仕様があるんやから。
0157nobodyさん
2016/10/19(水) 21:11:58.81ID:???0159nobodyさん
2016/10/19(水) 21:13:17.90ID:???0160nobodyさん
2016/10/19(水) 21:13:35.82ID:???0161nobodyさん
2016/10/19(水) 21:15:20.87ID:???> in(1,2,3,4,5)みたいになっているのは、php上で[1,2,3,4,5]になってるのとは等価だろ。
「微妙に分からんが」の言葉の重さよ
0162nobodyさん
2016/10/19(水) 21:16:11.81ID:???どういう結果になるかは分からんけど、in(
:array)が動かないのは寧ろ不自然やろ。PDOであたい入れてもクエリ壊さへんやん。
0164nobodyさん
2016/10/19(水) 21:19:10.14ID:???IN (:array)
に対して $phpArray = (a, b, c) をバインドして得られる結果は IN (ARRAY[][a, b, c]) であって, INの左側式の値がARRAY[][a, b, c]に一致するという意味になるが?
0165nobodyさん
2016/10/19(水) 21:20:34.72ID:???OS
エディタ
ターミナル
0166nobodyさん
2016/10/19(水) 21:21:10.42ID:???分からんけど、そういう動きするならそこから進んでin(
value_explode(:array))
みたいな書き方で大方の目的が達成できたりするんちゃう?
0167nobodyさん
2016/10/19(水) 21:21:52.19ID:???0168nobodyさん
2016/10/19(水) 21:22:10.46ID:???0170nobodyさん
2016/10/19(水) 21:25:45.33ID:???何より即インストールできるし。
0172nobodyさん
2016/10/19(水) 21:31:28.82ID:???0173nobodyさん
2016/10/19(水) 21:35:50.98ID:???よく分からんけどバインドしたタイミングと実際の読み出すタイミングで値変わることがよくあるからアカンみたいな話?
なら値が変わること覚悟でストリーム渡させるとか色々あるやろ。
なんやあんまり明確とは言いづらい気がするのう。
0174nobodyさん
2016/10/19(水) 21:40:01.64ID:???そんなん自動判別しよるのがPDOさん仕様やん。一意じゃないと困るならbindarray(名前、配列、型)メソッド用意したればいいだろ。甘えんなや!
0175nobodyさん
2016/10/19(水) 21:41:47.75ID:???途方に暮れかけた
> ちゃうわ。
期待したけど、期待するだけ無駄だった。
なぜそのような強気でいられるのか
0176nobodyさん
2016/10/19(水) 21:45:35.82ID:???俺の他にも有益なレスをしてくれてる人もいるのに、全部ひっくるめて無駄にしてる
0177nobodyさん
2016/10/19(水) 21:48:57.36ID:???無駄ちゃうで。考えたプロセスがこうして出力されてることは結構有益やよ。他の人間も辿れるからな。
0178nobodyさん
2016/10/19(水) 21:48:58.52ID:???0179nobodyさん
2016/10/19(水) 21:50:43.03ID:???せやかて言われたままに事実を受け止めてもーたら、それは検証という作業を省くオカルトっちゅー奴になってまうやで。
先ずは仮説から。コレは基本やで。
0180nobodyさん
2016/10/19(水) 21:52:07.18ID:???* PDOの目的に従えば現状のバインド機構は適切
* PDOの目的を変更する必要を感じない
* PDOより上のレイヤのライブラリを公式で作成してくれるなら有り難い
* 但し実用上DoctrineやEloquentで十分なので積極的に後押しはしない
0182nobodyさん
2016/10/19(水) 21:56:01.17ID:???PDOがDB標準を目標としているならarrayはバインド出来て然るべしやから、ワイはPDOの目的はまだ未達と見るで。
0183nobodyさん
2016/10/19(水) 21:57:59.21ID:???地球の端っこに行ってなお「地面は平らでござるよ」って仮説が出てくるかよ。
仮説は勘とイマジネーションから出ちゃっていいんだよ。
0184nobodyさん
2016/10/19(水) 21:58:14.71ID:???そこは認めるよ, Arrayはバインド出来ても良い
しかしそれはIN句やVALUES句の問題を解決しない
0185nobodyさん
2016/10/19(水) 21:58:26.68ID:???その話と IN (?) に [1, 2, 3] をバインドしたら IN (1, 2, 3) になる(なってほしい)という話は別だということは理解できたの?
0186nobodyさん
2016/10/19(水) 22:08:36.54ID:???多分arrayがバインド出来るならarrayを展開する関数も実装されると思うから、そこがPDO標準で存在しないとしても目的達成には充分。
inの中のarrayがどういう動きになるかは仕様の話やしな。
0187nobodyさん
2016/10/19(水) 22:10:41.91ID:???> arrayを展開する関数
ARRAY型をどういう型に展開するのか?
そもそもIN (a, b, c)の (a, b, c) という組が何かの型だとお考えか?
0188nobodyさん
2016/10/19(水) 22:13:19.36ID:???配列型について調べてるのかと思ったらまた思い込みで話をしちゃってる
0189nobodyさん
2016/10/19(水) 22:14:37.10ID:???RDBMSによってはarray_to_string()やその逆のgroup_concat()がある。(いや同じか?)postgresでは集合を返すgenerate_group()関数もあるよな。
だからそっから先はDBごとの仕様に依存することにはなるだろうけど、システム開発的な用途であればそれで十分使える。
0193nobodyさん
2016/10/19(水) 22:18:52.60ID:???仮に配列を複数の文字列にするなら、それはそれで検索条件としては使えるで。比較する方を文字列にしちまえばええんやから。
0196nobodyさん
2016/10/19(水) 22:22:26.11ID:???いや、in(:array)に[1,2,3]を渡して内部的にin('1','2','3')になるなら左の値をキャストすりゃええねんってこった。
0197nobodyさん
2016/10/19(水) 22:26:04.75ID:???>IN (?) に [1, 2, 3] をバインドしたら IN (1, 2, 3) になる(なってほしい)
みたいなのさ、
プリペアドステートメント使った問い合わせが、どうやってRDBに渡されるか分かって「そうなって欲しい」って言ってるの?
(否、分かっているはずがなかろう)
一応、PDOのエミュレーション使うならそうすることは可能だろうが、
SQLiteみたいなRDB側でプリペアドに対応していないDBでもなければ
エミュレーションなんか使わないほうが良い事はわかりきってるだろ。
エミュレーションしないでプリペアド使った問い合わせして、
>IN (?) に [1, 2, 3] をバインドしたら IN (1, 2, 3) になる(なってほしい)
そんな都合のいいbindが出来るわけねーだろ。
つまりそれはPDOのすべき仕事じゃねーって事だろーが。
プリペアードステートメントって何だかわかってんのかよ? 本当に脳みそあんのかよ?
>PDOがDB標準を目標としているならarrayはバインド出来て然るべしやから、ワイはPDOの目的はまだ未達と見るで。
>>180を100回読んでから本当にくたばれ、クソエセ関西弁。
0198nobodyさん
2016/10/19(水) 22:27:47.53ID:???多分listagg関数を使って左右入れ替えてlike文にすれば一応イケるはず。
パズルSQLの領域だけどなw
0199nobodyさん
2016/10/19(水) 22:30:01.78ID:???調べて分かったけど、oracleは普通にその構文通るらしいぞ。その目的通りのinになるくさい。
オプションとかもあって標準ではないのかもしれんが。
0200nobodyさん
2016/10/19(水) 22:31:58.54ID:???0201nobodyさん
2016/10/19(水) 22:34:25.19ID:???group_concat(:array,デリミタ) like 左カラム
ってすればいい。下手したら普通にinするより速くなるかもな。
0202nobodyさん
2016/10/19(水) 22:35:38.11ID:???だから、仮説の状態で置いておけばその内環境持ってる奴が真偽を確かめてくれるだろ?
そーいうこっちゃで。
0204nobodyさん
2016/10/19(水) 22:42:11.21ID:???おめーは上でもarrayの誤読してる前科あるんだから
「くさい」とかほざいてねーでソース出せ。
普通に考えて、そんなことしたらプリペアドの意味がなくなるか、オプティマイザが複雑怪奇になる。
0206nobodyさん
2016/10/19(水) 22:50:19.24ID:???0207nobodyさん
2016/10/19(水) 22:56:53.79ID:???多分目的がすれ違ってるから自分の意見を言っておくけど、「値の数がが不定なものをバインドすることはよくあるからそれが出来ればいい。inで使えると便利」であって、inの構文になるかどうかは割とどうでも良い。SQLの中に配列入れて判定文書けるならそれで正義や。
0208nobodyさん
2016/10/19(水) 22:59:06.03ID:???配列型がbindできるならそれこそ IN でどうにかなんて発想には決してならないので、一旦マニュアル見直してみて。
その上で>>153をもっかい読み直してみて。
0209nobodyさん
2016/10/19(水) 23:03:15.97ID:???よく分からんけど、他に優先度が高そうな致命的なアンダー仕様が存在するんけ?
パッと思いつくようなのは直ぐには出てこないけど、なんかあったっけ。
0211nobodyさん
2016/10/19(水) 23:07:02.24ID:???> 直ぐには出てこない
0212nobodyさん
2016/10/19(水) 23:07:03.80ID:???真面目に、抽象的過ぎるのか、ワイが知らんDBの基礎仕様的なものがあるのか、それともタダのハッタリなのかの区別が付かない。
ヒントをくれとは言わないが、区別出来るようには出来るやろか?
0213nobodyさん
2016/10/19(水) 23:07:56.14ID:???0214nobodyさん
2016/10/19(水) 23:08:28.74ID:???やってるよ。
でも色々調べたら「PDOでも出来ておかしくない」って方向に自分の考えが固まりつつあるんや。
0216nobodyさん
2016/10/19(水) 23:09:34.16ID:???IN (a, b, c) の(a, b, c)は一般に「配列型」の値ではない, というかそもそも型を持った値ではない
SQLの構文要素 () にaとbとcが並べて書かれているだけ
0217nobodyさん
2016/10/19(水) 23:11:51.23ID:???ワイはさっきから「配列を値のリストに変換出来ればええ」ゆうとるが。そしてそれはちょい変なやり方やが出来るやろ。
0221nobodyさん
2016/10/19(水) 23:15:13.62ID:???0223nobodyさん
2016/10/19(水) 23:27:07.20ID:???仮想コードだがこういうこと。
データ[1,2,3]が:arrayに渡されるとする。
実行したいSQL文は
SELECT * FROM T WHERE ID IN (:array);
これをGROUP_CONCAT()で代わりにやるには、
SELECT * FROM T WHERE GROUP_CONCAT(:array,'-') REGEX ID;
ってする。そうすると、仮にTテーブルに「1,3,5,7,9」って順にデータが入ってたとしたら
比較対象 検索ID 比較結果
1-2-3 1 true
1-2-3 3 true
1-2-3 5 false
みたいになって、ID1と3のレコードだけ取り出せる訳だが。
0224nobodyさん
2016/10/19(水) 23:29:37.60ID:???<値1>,<値2> みたいにエスケープをかけて、REGEXの方にも <>を足してやればいい。
何事も工夫です。
0225nobodyさん
2016/10/19(水) 23:36:58.74ID:???0226nobodyさん
2016/10/19(水) 23:39:13.00ID:???SELECT * FROM T WHERE ID IN (:array)
の形のプリペアドステートメントの発行を求めているのに違う形のステートメントを発行するのがまともな実装か?
それが適切な例だと考えているなら話は最初にループするぞ
* PDOはSQLを極力書き換えない
* PDOはDBに委任出来る処理はそのまま委任する
上の前提は当然だと思っていたが, 明記する必要がある?
0227nobodyさん
2016/10/19(水) 23:40:45.74ID:???arrayがarrayとしてbindされる前提だよね?
そしてそれならそんな小細工する必要なんてなくなる。
0231nobodyさん
2016/10/19(水) 23:43:55.34ID:???IN (:array) の :array に $array = [1, 2, 3] をARRAY型としてバインド出来ても動かないでしょ
IN :array ならバインド以前にコンパイル出来ないでしょ
0232nobodyさん
2016/10/19(水) 23:44:44.61ID:???SQLを書くのは人間だよ。「不定の値をバインドしたい」だけが達成できれば要件満たすコードがすげー書きやすくなるって話さね。
PDOがarrayをバインドできるようになればこういったブレイクスルーが起こせるんや。
0233nobodyさん
2016/10/19(水) 23:46:44.22ID:???もちろんそれは動かない、ので、それをどうにかしましょうというのが >>153 で書いた「あさってのこと」で
配列型に対応するのは「前にしないといけないこと」。
で、それ(配列型に対応)がされた前提であるならそもそも IN 使う必要なんてなくなるよという話ですよ。
0234nobodyさん
2016/10/19(水) 23:46:55.79ID:???それならPDOじゃなくてilluminate/databaseのQueryBuilderでも使えば宜しい
0235nobodyさん
2016/10/19(水) 23:47:56.61ID:???arrayがバインドできてもin(:array)だとArray型を比較しようとする仕様だった場合の話をしている。
その場合は今ある関数でなんとかするならこういう小細工になるし、
配列をxargsみたいに解釈してくれる関数が出てくるのならそれを使えばいい。
いづれにしても「できる」ってことやな。
0239nobodyさん
2016/10/19(水) 23:56:24.40ID:???「PDOはSQLを書き換えない」んだろ?
ORMやらクエリビルダやらのPHPと一体となっているSQLではなく、
クエリ文とパラメータだけで編成された、割とピュアなデータ入出力設計ができるようになる訳だ。
結構メリットっちゃメリットだよ。システムがPHPに引きずられなくなる訳だし。
0240nobodyさん
2016/10/20(木) 00:00:08.32ID:???一旦まとめさせてほしいんだけどさ、配列型がbindできるようになったらさ、スッキリするよね。
で、
>IN (?) に [1, 2, 3] をバインドしたら IN (1, 2, 3) になる(なってほしい)
なんて願望はもうなくなるよね。
0241nobodyさん
2016/10/20(木) 00:02:27.96ID:???0242nobodyさん
2016/10/20(木) 00:03:04.90ID:???> SELECT * FROM T WHERE GROUP_CONCAT(:array,'-') REGEX ID;
(とてもスマートではないけれど)こう書けばいいわけだから、 IN (1, 2, 3) になってほしいって願望はもうないよね。
0243nobodyさん
2016/10/20(木) 00:05:45.33ID:???それもよう分からん。配列型が使えるとIN()文が他のものでだいたいできるような話にはならんと思うのやが。
少なからず配列型を使えるようになったらIN(配列)の出番はかなり増すと思うんだが。
>>241
SQL99ではARRAYは型なんだってよ!
0244nobodyさん
2016/10/20(木) 00:08:41.04ID:???ARRAYは型らしいから、通常のロジックで言えばIN(:array)は配列型と配列型比較することになる。
それを回避するためのコードがGROUP_CONCAT()で、SQLパズル的なコードだから「なるべく使いたくない」。
INで動くならINで書くよ。IN(XARGS(:array))でいいならそうするよ。
0246nobodyさん
2016/10/20(木) 00:11:02.88ID:???DB側でSQLパズルしなければならない(例のXARGSのようなものは存在しない)から>>240,242何だと思うけど
0247nobodyさん
2016/10/20(木) 00:15:43.84ID:???もしSQLパズルでしか動かないとしても、クエリビルダを使用しないという選択肢を取れることは結構メリットではある。
基幹系とかデータの寿命が半世紀以上になるような部門だと割とマジで福音になるんじゃないだろうか。
(まあ、そういうところこそもっとスマートではない泥臭いやり方してるもんだけど)
0248nobodyさん
2016/10/20(木) 00:17:54.15ID:???つまり
>>240
> >IN (?) に [1, 2, 3] をバインドしたら IN (1, 2, 3) になる(なってほしい)
> なんて願望はもうなくなるよね。
ということでよろしいか?
arrayがバインド出来てよいことには同意しておくから。
0250nobodyさん
2016/10/20(木) 00:31:18.04ID:???0252nobodyさん
2016/10/20(木) 00:45:45.25ID:???これだと多分文字列のふりしてJsonデータ入れれば配列を入れたことと同じになるくさいから、
もうほとんど目的達成されてるのかも。PDOに頼らずとも。
0254nobodyさん
2016/10/20(木) 01:04:00.18ID:???0256nobodyさん
2016/10/20(木) 01:12:49.83ID:???SET型は64個までしか値持てへんねん。つうことは必然と種類フラグ的な用途でしか使えへんねん。
特定のユーザIDの配列とか渡せないから実質使えへんで。
まあでもJSON実装したんならArrayもそのうち実装されるやろ。
0257nobodyさん
2016/10/20(木) 03:08:40.95ID:???Arrayも、代わりになるデータ型も無いことを知っている上で >>251 を書いたの?
それならPDOよりも先にMySQLに…って>>254が正解だったか。
0258nobodyさん
2016/10/20(木) 07:08:33.92ID:???pdo+mysqlのデフォルト動作ってエミュモードなんねや。
そもそもパフォーマンスを必要とされるmysqlでいちいち複数ステートメントになるネイティヴプリペアードステートメント打つ必要は無いねん。
だから、別にmysqlにarrayが実装されてるかどうかはあんま関係ないねん。
PDOで内部的に書き換えてくれりゃええんやから。
0260nobodyさん
2016/10/20(木) 14:17:15.32ID:???なんでエミュレート切った方がいいのかもわかってないし、
プリペアする理由はSQLインジェクション対策くらいにしか思ってないし、
もう、この関西弁、どうしようもねーよ。
0261nobodyさん
2016/10/20(木) 15:52:42.51ID:???普通じゃない。サルカニの人と同じく、他人と仕事をしないで自分の世界に閉じこもっていてほしい。
0262nobodyさん
2016/10/20(木) 16:36:20.83ID:???ワイの知る限りではmySQLでエミュレーションモードを切る利点もデメリットも無い。
なんか具体的に問題となることあんのか?
「PDOはクエリを改変しない」原理主義的なアレか?
0263nobodyさん
2016/10/20(木) 17:14:39.56ID:???この辺じゃないの?
http://unskilled.site/%E3%81%AA%E3%82%93%E3%81%A7php%E3%81%AFmysql%E3%81%8B%E3%82%89%E3%81%AE%E3%83%AA%E3%82%B6%E3%83%AB%E3%83%88%E3%81%8Cint%E5%9E%8B%E3%81%AE%E3%81%AF%E3%81%9A%E3%81%AA%E3%81%AE%E3%81%ABstring%E5%9E%8B/
0264nobodyさん
2016/10/21(金) 14:50:33.94ID:???0265nobodyさん
2016/10/21(金) 16:56:20.63ID:???>ワイの知る限りではmySQLでエミュレーションモードを切る利点もデメリットも無い。
複文。
くたばれ、クソ関西弁。
0266nobodyさん
2016/10/21(金) 18:13:21.18ID:???数値項目も文字列が戻る前提でコーディングし、なおかつPHPでもJavaScriptでも律儀に"==="を使っていて、ある日数値項目は数値で戻るようになると死ぬ
0267nobodyさん
2016/10/21(金) 18:35:28.79ID:???そんなんで死なないようにO/Rマッパーを作ってラップし、
エンティティの定義で型強制をするわけだが、
>>141の言ってるEloquentもDoctrineって、その辺やってくれるのかね?
俺は昔Doctrineの導入のクソめんどくささに辟易して自分で[クエリビルダ:O/Rマッパー]を作るに至った。
composerとか、まだ普及してなかった時代の話だ。
今はもっとマシかもしれん。
0268nobodyさん
2016/10/21(金) 18:37:53.01ID:???よく考えてみるべきだよ。
0269nobodyさん
2016/10/21(金) 22:03:34.73ID:???pearみたいなもんじゃないの?
0270nobodyさん
2016/10/21(金) 23:23:47.03ID:???とりあえず使ってみれば分かるけど, 依存関係の管理をしてくれる
そしてオートローダ―も自動生成してくれるからプログラマの手間が大幅に減る
Rubyのgem/bundler, Pythonのpip, Node.jsのnpmみたいな。最早必須
0271nobodyさん
2016/10/22(土) 01:21:32.24ID:???ボタンを押したとき、非同期でdata.phpからデータを取得しています。
ページの初期化時もdata.phpからデータを取得するにはどうすればよいでしょうか。
0272nobodyさん
2016/10/22(土) 05:48:24.63ID:???ていうかそれPHPの質問じゃないで
0274272
2016/10/22(土) 06:29:08.38ID:???あ・・初期化ってonload時のことかと思ってそう答えたけど
phpだけですませたいってことか?
home.phpで
・data.phpをrequireして関数を呼ぶ
・ボタン押した時と同じ内容のリクエストをdata.phpに送って結果を取得する
(curlあるいはstream_context作成してfile_get_contentsなど)
とかそのあたり?中身わからんのでなんとも
0277nobodyさん
2016/10/24(月) 14:38:12.28ID:???方法その1: ページロード時にボタンクリックで実行される関数を呼び出す
方法その2: 初期データをページに埋め込んで戻す
var initial_data = <?php echo json_encode($data); ?>;
方法その3:
方法その2に加えて、それを使ったレンダリングをサーバサイドで実行し戻す。
0278nobodyさん
2016/10/25(火) 14:31:47.75ID:9sW4yNavxamppでローカルサーバーを立て、テストしています
テストのローカルコンピュータと、本番のネットワークサーバーで処理を分岐させたいのですが、どういう風に分岐させるのが良いでしょうか?
具体的には、sakuraサーバーでデータベースのアドレスが"localhost"で取得できないために分岐させたいとおもっています。
0279nobodyさん
2016/10/25(火) 15:00:29.28ID:???> 具体的には、sakuraサーバーでデータベースのアドレスが"localhost"で取得できないため
意味がわかりません。
localhostで接続する設定がされてないだけでは?
0280nobodyさん
2016/10/25(火) 15:04:09.42ID:???言ってることがいまいちよくわからんが
>"localhost"で取得できないために分岐させたいとおもっています
てことは別にsakuraとlocalhost(xampp入ってるPC)のDBは同期する必要がないってことでしょ?
なら別に分岐させる必要なんてないのでは
0281nobodyさん
2016/10/25(火) 15:25:08.75ID:9sW4yNavわかりづらくてすいません。
もう少し勉強し直してきます
0282nobodyさん
2016/10/25(火) 16:01:15.50ID:???普通なら、接続先をlocalhostにしてローカルな環境で開発したものを、そのまま本番環境に持って行けばいいだけ。
下手にhostnameで繋ごうとすると、pg_hba.confで接続設定を追加しないといけない。
それとも、ローカルな環境から本番環境のデータベースに接続したいって話?
0283nobodyさん
2016/10/25(火) 16:05:42.39ID:???ってことだと思う
それを防ぐために分岐させたいと言うことだろう
やったことないけどそんな方法あるんかね
0284nobodyさん
2016/10/25(火) 16:57:02.97ID:???$dns = $local_mode ? local : sakura;
$pdo = new PDO($dns);
0285nobodyさん
2016/10/25(火) 17:07:49.84ID:???そのコード、ローカルで実行してもsakuraで実行してもlocal_mode = trueになるよね、、、
レベルで詰まってるのだろうか
0286nobodyさん
2016/10/25(火) 17:28:09.31ID:lqPEVp/h標準では
get_template_part( 'template-parts/content', 'search' );
のコードで検索結果を表示している様なのですが、
この関数で表示されるコードをa href="のhtmlタグのまま表示したいと思っています。
htmlspecialchars()やpreを使っても出来ないので、どうしたら解決出来ますか?
0287nobodyさん
2016/10/25(火) 17:32:14.92ID:???284だけど、俺は質問者じゃないのだが
例えばそういうふうにするって示しただけで
当然本番じゃfalseにしてから使うのを想定してる
0289nobodyさん
2016/10/25(火) 17:46:53.99ID:???> 284だけど、俺は質問者じゃないのだが
いや、わかってるし
> 当然本番じゃfalseにしてから使うのを想定してる
編集するならそんなめんどいことしなくて
$pdo = new PDO(sakura);
ってやればいいし
一つのコードで何かを振り分けたいんじゃないの?
0290nobodyさん
2016/10/25(火) 18:05:16.41ID:???・環境変数DB_HOSTを設定しそれを使う(なければlocalhostとか)
・アプリのエントリポイントを分ける(index.phpとindex_dev.phpとか)
0291nobodyさん
2016/10/25(火) 19:48:51.12ID:???開発環境と運用環境で処理を分けるってのはDBに限った話じゃないだろうし。
0292nobodyさん
2016/10/25(火) 21:52:30.71ID:???>www.php.net の所有者による Web サイトの設定が不適切です。
>あなたの情報が盗まれることを防ぐため、この Web サイトへの接続は確立されません。
>www.php.net は不正なセキュリティ証明書を使用しています。
> 自己署名をしているためこの証明書は信頼されません。
> エラーコード: SEC_ERROR_UNKNOWN_ISSUER
だれかwgetで取ってくるから最新のソースのアドレス頼む
0293nobodyさん
2016/10/25(火) 22:03:53.46ID:???https://help.sakura.ad.jp/hc/ja/articles/206053952--%E3%83%AC%E3%83%B3%E3%82%BF%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E4%BD%9C%E6%88%90-%E8%BF%BD%E5%8A%A0-%E5%89%8A%E9%99%A4
(禁止ワードで張れないからリンク先参照)
のようだからlocalhost指定が出来ないってだけの話だろ
本番に移行するときにDBの接続情報変えればいいってだけの話
0294nobodyさん
2016/10/26(水) 00:17:59.48ID:???…
https://secure.php.net/downloads.php
0296nobodyさん
2016/10/26(水) 10:43:18.97ID:???> 本番に移行するときにDBの接続情報変えればいいってだけの話
それはどうやって実現できますかって話なんだけどね
0297nobodyさん
2016/10/26(水) 13:22:24.63ID:???まず2つの接続情報を書いとかないと実現はできない。
あとは環境変数見て振り分ければ完成。
サーバを移行させたり 使う環境が変わることはあるわけだし、
普通は接続情報は都度直接編集するもんでしょう。
同じlocalhostで通るにしても ユーザ名やパスワードまで普通合わせたりしないし。
そのへん考えなくていいSQLite使えばいいと思うよ。
0299nobodyさん
2016/10/26(水) 14:00:48.25ID:???ワンクリックデプロイといってもやってることは同じでしょ。
0300nobodyさん
2016/10/26(水) 14:28:42.50ID:???> 設定に関する情報がないといけないわけで、
> ワンクリックデプロイといってもやってることは同じでしょ。
書き方が悪かった。
しないのは、「サーバを移行させたり 使う環境が変わること」があっても、「接続情報は都度直接編集」すること。
サーバ毎にユーザ名やパスワードを変更することもしない。
どこでも、localhost接続で同じユーザ名、同じパスワード。
「サーバを移行させたり 使う環境が変わること」やデプロイ先が増えたりしたら、デプロイスクリプトのデプロイ先を変更するだけ。
0301nobodyさん
2016/10/26(水) 14:35:17.91ID:???データベースのマイグレーションツールは使ってる?
そのツールのデータベース接続情報がファイルに記述されてるとして、それはどうやって管理してる?
ユーザ名・パスワード直書き?
0302nobodyさん
2016/10/26(水) 14:48:36.51ID:???これがいけなかったんだな
0303nobodyさん
2016/10/29(土) 17:19:30.19ID:???その他WEBサービス系で必要であろうサーバは整えられるんだけど、
開発できる言語がphpとJavascript、SQLしか使えないんだけど、
その程度の者でもWEB系の開発企業で即戦力になったりしますか?
ちなみに実務は7年で、入社してからずっと時間給で働いてます。
そろそろ先々が心配なので転職or時間単価向上を考えたいと検討してます。
雑談スレと書いてあったので、こういう話は書いても大丈夫でしょうか。
スレ違いだったらROMに戻ります。。。
0304nobodyさん
2016/10/29(土) 17:37:39.55ID:???プログラマ板があるからそっちの方が良いかも?
サーバー管理者は大企業で重宝されるイメージ。一度大きい企業回ってみて、自分の価値を確認するというのはどうだろう
NTTデータとかyahooなどの超大手に、当たって砕けるというより自分の価値を確認するつもりで受けてみてはどうかな
0305nobodyさん
2016/10/29(土) 20:44:28.72ID:???PHP+JavaScript+SQLは、案件が最も多いと同時に、金額が最も安い組み合わせです。
次の仕事を見つけることはできても、それで収入アップが実現できるかは厳しいんじゃないでしょうか。
0306303
2016/10/29(土) 21:55:10.97ID:???多々ご指導くださり、大変勉強になりました、ありがとうございます。
単価にすると時間当たり900円にも届いてない状態で、
流石にフリータと変わらないと最近焦りを隠せなくなっておりました。
せめて実務経験があればと思っていたのですが、
間もなくいわゆる”35歳”を迎えるので実績が仮にあっても
切られてしまうのではないかと気が気ではなくなりつい投稿してしまいました。
スレ汚し失礼しました、ご教示いただきました内容を念頭に置いて新しい言語にチャレンジするなり、
体当たりするなりしてみたいと思います。
ありがとうございました。
0307nobodyさん
2016/10/29(土) 23:18:37.38ID:???がんばってください。
0309nobodyさん
2016/10/30(日) 09:51:33.15ID:???0310nobodyさん
2016/11/01(火) 16:27:31.79ID:???例えば「18:00:00」を「18:00」に変換するとき、どうすればよいでしょう?
ただしPHP側の操作のみで、文字の切り取り以外でお願いします
0311nobodyさん
2016/11/01(火) 17:03:56.16ID:???http://php.net/manual/ja/datetime.format.php
0312nobodyさん
2016/11/01(火) 17:06:19.32ID:???0313nobodyさん
2016/11/01(火) 17:39:20.52ID:???0314nobodyさん
2016/11/01(火) 17:43:30.85ID:???「入力フォームを多用+保護されているけどReaderで保存可なPDF」をテンプレートとして、
ストレスなく扱えるPHPライブラリってあるかしら?
FPDIだと、入力フォームは消えてしまうし、PDFが保護されていたりすると、エラーが出て
読み込めないようで…。
有償、無償は問いません。
どなたかご教示いただけないでしょうか。
0316nobodyさん
2016/11/01(火) 18:27:16.91ID:???ごめんなさい、要は、
> FPDIだと、入力フォームは消えてしまうし、PDFが保護されていたりすると、エラーが出て
> 読み込めないようで…。
これがストレス。
で、書き方を間違えてた。保護は関係ないみたい。圧縮されてるとエラーでした。
0319nobodyさん
2016/11/01(火) 18:41:47.03ID:???0320nobodyさん
2016/11/01(火) 18:42:49.19ID:???0321nobodyさん
2016/11/01(火) 18:46:40.76ID:???ライセンスキー入れなくてもウォーターマークが入るだけで、普通に使えたような記憶があるよ。
0322nobodyさん
2016/11/01(火) 18:47:57.44ID:???FPDI以外試したのか?
ググったのか?(ぐぐりゃすぐに候補はでてくる)
直接PDFを操作する系のライブラリ以外は候補に出来るのか?
調べたか?
使ってみたか?
まず、これこれは駄目でしたって何で言えないんだよ。
0324nobodyさん
2016/11/01(火) 18:50:23.33ID:???これは試したか?
0325nobodyさん
2016/11/01(火) 18:51:30.53ID:hf4qXWjd現在はある会社のHP担当としてアルバイトで働いています。
主にwordpressのループ処理+アクセス解析ばかりで、あまりPHPを覚えたとはいえない状態です。
何か覚えたほうがいいものがあれば、片っ端から教えてください。
現在は以下のことを学習済みです
・型の違い
・if・for・switch構文
・文字列の操作
・日付の操作
・class作成。継承とかはほとんどしたことありません。
・gitは自分でリポジトリを作ってpush、pull、ブランチを作成したり、バージョンを戻したりと基本的な事ができるようになったレベルです
・SQLはコピーペーストでSELECTやINSERTを使えるレベルです
何から覚えるとよいでしょうか?
それともwordpressを極めたほうがいいのでしょうか?
0328nobodyさん
2016/11/01(火) 19:09:47.89ID:???目指すところにもよると思うけど、見てくれの成果を急ぐならフレームワーク使ってなんか作ってみれば?
くれぐれもインクルードガードを理解できないような大人にならないように気を付けて。
0330sage
2016/11/01(火) 19:45:20.09ID:p6F2bD12https://www.youtube.com/watch?v=NJYs5GTmdcg
0332nobodyさん
2016/11/01(火) 20:34:29.15ID:???WEB屋でいつづけるならPHPなんか覚えたって役に立たない。
Wordpressという名の言語を覚えたほうがいい。
プログラマーになりたいならWordpressみたなゴミクズにはできるだけ関わらない方がいい。
>何から覚えるとよいでしょうか?
なにはなくともforeach。
0333nobodyさん
2016/11/01(火) 22:18:22.00ID:???0334nobodyさん
2016/11/02(水) 00:11:25.05ID:SZFpptjMなんでや!阪神関係ないやろ!
0335nobodyさん
2016/11/03(木) 00:14:03.81ID:???webデザイナーとwebプログラマーを混同していました。混同していることがわかっただけでも大きな前進でした。
もう少し自分が何やりたいかを考えてみます。ありがとうございました。
0336nobodyさん
2016/11/03(木) 19:15:34.27ID:2AD8+1ebすぐ隣に防衛省の背広組の官舎があるのですが、
自分の家の窓にUSB接続のwebカメラを貼り付けて、そこの動画を撮影し続け、
学会本部に送っていました。
別に大したものは写っていません。ごみ出しとか奥さんが子供を遊ばせている所とか。
官舎が老朽化して使われなくなってから、
今まで法人税(うちは自営業です)をほぼ払わなくても済んでいたのが、
もう守ってやれないのでこれからは満額申告するように言われました。
納得がいかないと言うと、君は自業自得で餓鬼地獄に落ちる、
朝夕南無妙法蓮華経と三千回ずつ唱えて心をきれいにしなさいと言われ
馬鹿らしくなって脱会しました。
それ以来、どこへ行くにもぞろ目ナンバーの車につけまわされたり大変な日々です。
全部自分の出来心から起きたことで、どこに訴えるわけにもいかないのですが、
なんとかあの人たちと縁を切って新しい始まりを迎える方法はないんだろうか。
0337�@
2016/11/05(土) 01:03:25.46ID:/n6BEXdW.htaccess に以下のコードを書いています。
SetEnvIf Host "^www\.patapata\.net$" hos_ok
SetEnvIf Host "^patapata\.net$" hos_ok
order deny,allow
deny from all
allow from env=hos_ok
0338�A
2016/11/05(土) 01:04:26.00ID:/n6BEXdWwww配下に patapata.net へアクセスさせる為のディレクトリしか
作成していなかったので、これまではこれでよかったのですが
テストコードを直書きしてブラウザからさくらインターネットのサブドメインからもアクセス
できる様にしようと思っていますが。
0339�B
2016/11/05(土) 01:06:34.05ID:/n6BEXdW↓ ブラウザからはこんな感じでアクセスしたいです。
0340nobodyさん
2016/11/05(土) 12:44:54.07ID:???0341nobodyさん
2016/11/05(土) 13:00:22.58ID:???0342nobodyさん
2016/11/07(月) 11:55:19.06ID:???foo;
のように未定義の変数を$なしで記述する方法に名前はありますか?
0343nobodyさん
2016/11/11(金) 00:31:34.65ID:NJy7MIUs0344nobodyさん
2016/11/11(金) 06:21:08.35ID:???まだまだシェアは高いほう
0345nobodyさん
2016/11/11(金) 22:06:51.01ID:???$searchFilter = new $searchFilterClassName();
$searchFilter->filterAll($query, $requests);
こんな感じで呼び出すクラスを動的に変更してるけど、もしかしてバッドプラクティスになる?
0346nobodyさん
2016/11/11(金) 22:10:27.95ID:???命名が気持ち悪い
0348nobodyさん
2016/11/12(土) 08:29:00.73ID:???「直江山城守従五位下藤原朝臣兼続」と律儀に書きそうな所
0350nobodyさん
2016/11/12(土) 09:10:45.07ID:UTGbJvCcPHPも進化しててそう簡単には廃れないと思うよ
フレームワークなんてクラスと継承使いまくるし昔とは全然違う
JAVAっぽい感じすらある
もし他のやるってならrubyかパイソンかJAVAかな
PHPは簡単に始められるということで人によってレベルに差がありすぎる
フレームワークでクラス使えてDBやApacheまで理解して使えるならJAVAプログラマーと変わらないレベル
0351nobodyさん
2016/11/12(土) 09:31:50.95ID:???0352nobodyさん
2016/11/12(土) 10:24:09.54ID:???命名は、スコープを意識した方が良い。
例えば、$searchFilterClassName は目的のクラスをnewする時にしか使わないんじゃない?
そうすると、その変数の必要有効範囲は2行しかない。
もし、他の場所でクラス名を知りたければ
$searchFilter内で定義済み定数 __CLASS__ を使って参照できるから。
そんな、その場限りの変数に仰々しい名前をつけるのは無駄な上に
全く別の人がコードを読む時には
いかにも意味がありそうな命名なので追いかけてみたら、その場所でしか使っていなかったとかで
大して意味が無い余計な情報になってかえってコードが読みにくい。
そんなのは$classNameで十分。
俺は「使い捨てだ」ということを強調するために場合によっては1,2文字変数を使うこともある。
0354nobodyさん
2016/11/12(土) 11:53:15.24ID:???長い開発経験の中で出した、あくまでも俺の答えだから、そうは思っていないやつも居る。
だから「絶対」ではない。個人的意見だと思ってもらって構わない。
ただ、クソコードだなぁと思うコードの半分は
使い捨ての変数に$youAreFuckNSonOfABichみたいな命名をしている特徴がある。
Javaでプログラムを学んだJava脳の奴に多い。
もう半分のクソは本当にただのクソで、いかにもPHPerといったコード。
0355nobodyさん
2016/11/12(土) 12:03:17.81ID:UTGbJvCcうちのリーダーか?笑
使い捨て関数使ってるけど開発効率考えたらそれが良いと思う
使い回して深く追う可能性のあるものだけちゃんと名前付けておいた方が良いね
0356nobodyさん
2016/11/12(土) 12:07:06.42ID:UTGbJvCc自分やその時の現場のメンバーだけ使うものは一文字で良いだろうね
何かしらのツールで共有しておけば良い
0357nobodyさん
2016/11/12(土) 12:43:16.19ID:???他人が書いたコードリーディンングする時、重要なのは「その変数が何であるか」
「何が入っているかが分かる」事のみに着目して長ったらしい名前をつけられると、
ほんの数行先で出てきた変数が、
前に出てきたそれと同じなのか違うのかが把握できない。
大体、1つの処理単位で利用する変数はにた名前になりやすいから
名前が長いと余計わかりづらい。
人間が一目で判別できる文字数は5,6文字が限度だろう。
「その変数が何であるか分かる」ってことと「その変数に何が入っているか分かる」ってことはイコールではなく、
必要なのは「何が入っているかわかる」ことではない。
0358nobodyさん
2016/11/13(日) 01:59:25.88ID:???0359nobodyさん
2016/11/13(日) 09:57:04.08ID:???0361nobodyさん
2016/11/13(日) 14:33:14.76ID:???0362nobodyさん
2016/11/13(日) 15:27:12.88ID:???0363nobodyさん
2016/11/13(日) 16:12:35.87ID:???echo "{$fire}unko"
0364nobodyさん
2016/11/13(日) 19:55:24.39ID:???$c = $a. $b;
echo $c;
カンマは
echo $a;
echo $b;
0365nobodyさん
2016/11/13(日) 21:06:29.54ID:???これって意味あるんですか?
定数がすでにあった場合定義されませんが、期待している値じゃなかったらバグの原因になるだけなので、
逆にエラー出したほうがいいと思うんですが。
0366nobodyさん
2016/11/14(月) 01:32:44.29ID:???0367nobodyさん
2016/11/14(月) 04:03:26.34ID:???そのコード自体ををいじらなくても外側から上書きできるようになるってことだね。
0368nobodyさん
2016/11/14(月) 04:39:52.56ID:???動作結果は同じだけど意味合いが違うから使い分けが大事。
【ドットが適切な場合】
$message = 'My name is ' . $name;
echo $message;
↓省略
echo 'My name is ' . $name;
【カンマが適切な場合】
echo $errorCode;
echo $errorMessage;
↓省略
echo $errorCode , $errorMessage;
ただ、カンマの例の場合
$output = $errorCode . $errorMessage;
という考え方も出来るからカンマを使う場面ってのはそんなに無いと思う。
ってか自分は使ったこと一度もない。
0370nobodyさん
2016/11/14(月) 16:59:18.70ID:???require_onceってのもあるし、二重にrequireすること自体が問題。
0371nobodyさん
2016/11/14(月) 17:14:51.81ID:???requireするのが自分だけとは限らないし
することが可能ならそうされても大丈夫なようにしとけばいいじゃん
インクルードガードも否定派なの?
0372nobodyさん
2016/11/14(月) 19:07:26.76ID:???データベースからデータを引っ張って来て、<li>要素に入れて表示したいとします。
この場合、どういう風に組み立てたら良いでしょうか
functionかclassを作ったほうが良いのでしょうか?
以下のようなコードがどこかに入ると思いますが、どこに入れるとよいのでしょう
$li = "";
foreach($result as $key){
$li .= '<li>'.$key.'</li>';
}
phpはhtmlの前にまとめるのは何となく分かりました。
<?php
$pdo = new PDO(...);
$st = $pdo->prepare(...);
$st->execute();
$result = $st->fetchall(); //$result に結果が入る
$st->closeCursor();
?>
<html><body>
<ul>
//
<li>データをここに表示させたい</li>
<li>データをここに表示させたい</li>
<li>データをここに表示させたい</li>
</ul>
0373nobodyさん
2016/11/14(月) 19:29:21.64ID:???>> (static なメソッドにはアクセスできます)。
こう書いてあるけど、staticメソッドにインスタンス化したオブジェクトからアクセスするのってバッドプラクティスになる?
将来非推奨になっちゃったりとか
0374nobodyさん
2016/11/14(月) 19:51:29.20ID:???その程度の規模でも分離しよう
~~~~index.php
<?php
$pdo = new PDO(...);
$st = $pdo->prepare(...);
$st->execute();
$result = $st->fetchall(); //$result に結果が入る
$st->closeCursor();
include('templates/index.tpl');
~~~~templates/index.tpl
<html><body>
<ul>
<?php foreach ($result as $value): ?>
<li><?= $value ?></li>
<?php endforeach; ?>
</ul>
>>372
スタティックであることを明示出来ない点はデメリットだがそれが問題にならなければよい
あとC++とかでも同様に書けるからdeprecatedにはならないんじゃないかと
0376nobodyさん
2016/11/15(火) 00:44:40.64ID:???publicはメソッドのみ。プロパティには使わない
プロパティは基本privateにして、クラス内メソッドからアクセスする
継承させるつもりならメソッドでもメンバでもprodectedにする
という認識であってますか?
0377nobodyさん
2016/11/15(火) 01:06:52.72ID:???初心者お断りなんだがね・・・・
それは覚えるもんじゃなくて理屈で設定するもんだ
プロパティ間に関連がある(文字列とその長さとか)なら外部からそれぞれ勝手に変えられたら不味い, ならprivateにせねばならん
プロパティ単独で他と関係がなく, 書き換えられても問題ないならpublicなりprotectedなり好きにすれば良い
メソッドは基本的にそのクラスのオブジェクトに対する可能な操作なわけだから, 外部に公開する部分についてはpublicにする他ない
内部だけで利用するようなユーティリティメソッドであればpublicにする必要はない
protectedは「外部には公開しないが継承先クラスからは見えてよい」場合に設定するもの, インスタンス側のスコープからは見えない(publicを包含しない)
カプセル化の原則は「外部から見えるものは最小限に」。
見せても良いけど見せなくても良いなら見せない, privateにすべし。
どうしても必要な場合にprotected, publicと順にアクセス権を広げていく。
0378nobodyさん
2016/11/15(火) 03:25:11.75ID:???0379nobodyさん
2016/11/15(火) 10:05:33.84ID:???0381nobodyさん
2016/11/15(火) 11:52:22.08ID:???特定のクラスからしか操作したくないならprivateかprotectedにするけどさ、
OOPだと、DTOっつうものがあって、こいつはいろんなクラスをたらい回しされる。
そうすっと、仮にセッター作ってもどのみちいろんなところからいじられちゃうわけで、
もはや、privateやprotectedにする意味は殆ど無いし、むしろ、邪魔。
だから、用途に合った設定をすべきで
>publicはメソッドのみ。プロパティには使わない
みたいなステレオタイプな認識しかできないやつは、
そもそもグラマには向いてないのさ。
0382nobodyさん
2016/11/15(火) 12:16:50.98ID:???便利便利じゃないじゃなくてOOPの概念から離れちゃうってことね
とりあえず初心者は量産プログラマー目指して忠実にやったほうがいいと思うよ
実力伸ばすのは基本抑えてからでいい
0383nobodyさん
2016/11/15(火) 13:15:07.23ID:???0384nobodyさん
2016/11/15(火) 13:18:22.00ID:???理由は分からないけど周りに合わせる、なら別にいいある意味方針のカプセル化だ
みんなが好き勝手にコードを書くのが最悪
0385nobodyさん
2016/11/15(火) 13:21:22.86ID:???$users = $stmt->fetchAll(PDO::FETCH_CLASS, 'User');
のUserクラスにも、setter, getterを定義するの?
0386nobodyさん
2016/11/15(火) 13:28:22.94ID:???0389nobodyさん
2016/11/15(火) 14:32:40.91ID:???0390nobodyさん
2016/11/15(火) 14:33:21.93ID:???https://www.ogis-ri.co.jp/otc/hiroba/technical/concept.html
0391nobodyさん
2016/11/15(火) 14:55:04.23ID:???>>383はアホだからほっとけ
>>385
定義すれば型矯正ができるが、PHP様にはマジックメソッドというものがあるので
明示的にgetter/setterは作らない
0394nobodyさん
2016/11/15(火) 15:09:20.45ID:???__set()
0396nobodyさん
2016/11/15(火) 15:24:09.65ID:???https://twitter.com/s_osa_/status/515312406084345856?ref_src=twsrc%5Etfw
「外部に公開するインターフェイスを決定して、そのために必要な変数をプライベートで保持する」っていう感じ。
インターフェイスが先に来ることがわかっていれば>>395のように混乱することはない
0397nobodyさん
2016/11/15(火) 15:33:38.65ID:???別に混乱してないと思うが。
>>394は、
class User {}
と定義して
$users = $stmt->fetchAll(PDO::FETCH_CLASS, 'User');
を実行するという意味だと思うが、それだと
class User {
public $user_id;
public $name;
public ...
}
と同じ事になり、カプセル化に反するのでは?という疑問。
0398nobodyさん
2016/11/15(火) 15:56:55.53ID:???0399nobodyさん
2016/11/15(火) 16:08:24.97ID:???については多弁なんだな
0406nobodyさん
2016/11/15(火) 16:28:38.53ID:???0407nobodyさん
2016/11/15(火) 16:37:12.33ID:???0410nobodyさん
2016/11/15(火) 16:45:53.53ID:???しょうがねぇな、では、真面目に答える。
なんかうまく書き込みできねーから2回に分けてみるが、うまくいくかどうか。
> 385 : nobodyさん2016/11/15(火) 13:21:22.86 ID:???
> $stmt = $db->query('SELECT * FROM users');
> $users = $stmt->fetchAll(PDO::FETCH_CLASS, 'User');
> のUserクラスにも、setter, getterを定義するの?
>>385の流れの質問だったよな。
例えば users テーブルのカラムは
id:int
name:varchar(32)
gender:int
register_date:datetime
とする
0411nobodyさん
2016/11/15(火) 16:47:40.26ID:???この場合の User クラスは
class User
{
private $id = null; private $name = null; private $gender = null; private $register_date = null; public function __get($key){
if(!isset($key)){
throw new Exception("The key you specified is invalid.");
}
return $this->$key;
}
public function __set($key, $val){
switch($key){
case "id":
$this->$key = (int)$val; break;
case "name":
$this->$key = (string)$val; break;
case "gender":
$this->$key = (int)$val; break;
case "register_date":
$this->$key = new DateTime($val); break;
default:
throw new Exception("Invalid parameter has been given.");
}
}
}
こうすれば、fetchした時点で型付けされる。
俺はなんて優しいんだよ。ほかのバカどもは一生俺にひれ伏せ。
0412nobodyさん
2016/11/15(火) 16:48:50.77ID:???__get/__setの使い方はこれでわかんだろ。
0413nobodyさん
2016/11/15(火) 16:49:21.89ID:???興味がある人はそっち探して読むといいよ
例:
「Oh No! DTO!」??オブジェクトとデータ構造Add Star (2004年)
http://kakutani.com/20040227.html#p01
もうそろそろ馬鹿の一つ覚えのように「カプセル化」を連呼するのはやめようぜ (2007年)
http://blogs.wankuma.com/kacchan6/archive/2007/10/12/101603.aspx
0415nobodyさん
2016/11/15(火) 16:58:57.20ID:???0417nobodyさん
2016/11/15(火) 17:03:29.21ID:???>個別のgetter/setterとなんらかわらんわ
うわぁ、サル全開!
getterやsetterで同じこと実装してみろよ。
どうなるか予想つかないのかよゴミクズは。
0423nobodyさん
2016/11/15(火) 17:19:14.05ID:???$this->$key = (int)$val; break;
これが動作することってあるの?
0426nobodyさん
2016/11/15(火) 17:22:56.61ID:???0427nobodyさん
2016/11/15(火) 17:23:55.21ID:???0428nobodyさん
2016/11/15(火) 17:25:12.49ID:???0429nobodyさん
2016/11/15(火) 17:25:33.74ID:???0431nobodyさん
2016/11/15(火) 17:32:07.76ID:???未だにカプセル化で論争が起こっています
0432nobodyさん
2016/11/15(火) 17:34:26.74ID:???>>429-230 PHPマニュアルに記載されていない事なんてしりまっしぇーん
載ってからかたってくださぁい
0433nobodyさん
2016/11/15(火) 17:35:31.85ID:???0434nobodyさん
2016/11/15(火) 17:37:21.98ID:???http://php.net/manual/ja/pdostatement.fetch.php
PDO::FETCH_CLASSはプロパティセット後にコンストラクタ
逆にするにはPDO::FETCH_LATEを追加指定
0435nobodyさん
2016/11/15(火) 17:38:13.86ID:???0436nobodyさん
2016/11/15(火) 17:40:13.19ID:???使ったことがあれば FETCH_LATE が誤記だと気づくし、意図もわかる。
分からないってことは FETCH_PROPS_LATE を知らないし、もちろんそれを前提としてはいなかったってことだ。
0437nobodyさん
2016/11/15(火) 17:40:55.66ID:???対象がすり替わってる話なんか聞く耳もちまっせーん
今までの話に何の関係があるのかもわかりまっしぇーん
論旨をのべてくださーい
ばーか
0438nobodyさん
2016/11/15(火) 17:41:54.06ID:???これかっこいいよね。
0443nobodyさん
2016/11/15(火) 17:43:50.71ID:???つまりコンストラクタ呼び出し前にプロパティがセットされるから, 定義したマジックメソッドの__setter/__getterは呼ばれない
フェッチ時に型固定は実現されない
0444nobodyさん
2016/11/15(火) 17:45:30.85ID:???あほなの?
じゃあ、その後でプロパティ再セットすればいいだけじゃん。それで型強制される。
それがお前の答えだったの? 本当のノータリンだったの?
0446nobodyさん
2016/11/15(火) 17:47:38.73ID:???なんかいい方法無い?ってことで話した話なのに、
FETCH_PROPS_LATE したら 「__set 呼ばれないだろ!」 って、バカ?
呼べばいいいじゃん。てかPDO::FETCH_PROPS_LATE しなきゃいいじゃん
0449nobodyさん
2016/11/15(火) 17:50:19.60ID:???おまえは別のタイプのサルだから黙ってろ、レベル低すぎて話にならない。
何でマジックメソッドがあるのかもわかってない。
0450nobodyさん
2016/11/15(火) 17:51:14.12ID:???なんか答えろよ
0451nobodyさん
2016/11/15(火) 17:52:23.57ID:???0452nobodyさん
2016/11/15(火) 17:52:24.21ID:???0453nobodyさん
2016/11/15(火) 17:52:25.75ID:???0454nobodyさん
2016/11/15(火) 17:54:07.07ID:???429 : nobodyさん2016/11/15(火) 17:25:33.74 ID:???
PDO::FETCH_LATEする前提なんだろうけど
430 : nobodyさん2016/11/15(火) 17:26:26.11 ID:???
>>429
それを知らなかったんでしょう。
>>410 では言及してない
0455nobodyさん
2016/11/15(火) 17:55:08.79ID:???> __setが呼ばれるかどうかはFETCH_PROPS_LATE の有無に左右されない。
呼ばれなきゃ、自前でよべばいいだろ。
呼ばれないこと、自分でわかってんだろ?
わかってねーのか? ノータリン
0456nobodyさん
2016/11/15(火) 17:56:37.64ID:???> $users = $stmt->fetchAll(PDO::FETCH_CLASS, 'User');
してさ、
> __setが呼ばれるかどうかはFETCH_PROPS_LATE の有無に左右されない。
__set()呼ばれないケースって、どんなの?
ちょっとこの無知な俺に教えてくれよ、サル
0459nobodyさん
2016/11/15(火) 18:02:27.86ID:???コンストラクタコール前は無名クラス(stdClassか)オブジェクトなんだから__setは未定義だろう
0461nobodyさん
2016/11/15(火) 18:07:34.17ID:???__construct()が無いことを言ってるのかな?
はいはい、それは正しいね。
掲示板の書き込みで端折った部分だが、君の指摘は正しい。
で、それだけのために、こんなにレス消費したの?
なんか、お前の最初の主張はそうところじゃなかったんじゃなかったっけ?
それとも、お前の趣旨は別のところ?
ちょっと具体的に説明してみなよ。おまえがチキンじゃなければさ。
0463nobodyさん
2016/11/15(火) 18:09:33.54ID:???0464nobodyさん
2016/11/15(火) 18:09:54.09ID:???コンストラクタ未定義だろうが定義済みだろうが指定クラスのインスタンス構築のタイミングより先にプロパティへの代入が行われてる
0465nobodyさん
2016/11/15(火) 18:14:33.34ID:???それが3時間ぐらい続くよ。
0466nobodyさん
2016/11/15(火) 18:20:06.54ID:???__constructとか関係ねーじゃん ふつーにできるじゃん
>>459 こいつ、なんなの? 本当にアホなの
0467nobodyさん
2016/11/15(火) 18:22:02.56ID:???何が主張したかったの?
PHPerって、本当にアホだらけなの?
0468nobodyさん
2016/11/15(火) 18:24:20.84ID:???0470nobodyさん
2016/11/15(火) 18:26:43.68ID:???別に、敷居が低いことはなんとも思わねーよ
問題なのは、さもわかってる風な体で「PDO::FETCH_LATEする前提なんだろうけど」「それを知らなかったんでしょう。」とか
恥ずかしげもなく書く馬鹿だ。
おまえがなんにも分かってねーじゃん。
こいつ、本当にシングルクオートエスケープバカ臭するよ
0471nobodyさん
2016/11/15(火) 18:28:35.38ID:???> 464 : nobodyさん2016/11/15(火) 18:09:54.09 ID:???
> >>461
> コンストラクタ未定義だろうが定義済みだろうが指定クラスのインスタンス構築のタイミングより先にプロパティへの代入が行われてる
やってみればわかるよ、サル
0472nobodyさん
2016/11/15(火) 18:32:50.96ID:???インスタンス出来てないのに、どうやってそのプロパティにアクセスするんだよw
ちょっとそのメカニズムを説明してくれよw
0473nobodyさん
2016/11/15(火) 18:38:16.81ID:???0476nobodyさん
2016/11/15(火) 19:13:37.91ID:???やってみれば良いじゃん、サル
問題点があるならそれを言えば良いじゃん、サル
なんでこう、エテしかいないの?
0478nobodyさん
2016/11/15(火) 19:22:56.40ID:???0480nobodyさん
2016/11/15(火) 19:56:08.76ID:???0481nobodyさん
2016/11/15(火) 20:27:32.63ID:???0483nobodyさん
2016/11/15(火) 22:44:45.13ID:???0484nobodyさん
2016/11/16(水) 21:25:01.78ID:???嘘は書いてないが、間違いはあったので訂正する。
private $id = null;
private $name = null;
private $gender = null;
private $register_date = null;
これを削除して実行してみろ。
ちゃんと呼ばれるから。
0485nobodyさん
2016/11/16(水) 21:32:09.93ID:???全く自分の頭を使わずに「呼ばれないじゃん」と騒ぐバカのためにこんなに優しく教えてやるとは…
>>479は、毎晩俺に感謝の意を表してから寝ろよ。
0486nobodyさん
2016/11/16(水) 21:45:52.76ID:???-------------------------------------------------------
434 : nobodyさん2016/11/15(火) 17:37:21.98 ID:???
>>432
http://php.net/manual/ja/pdostatement.fetch.php
PDO::FETCH_CLASSはプロパティセット後にコンストラクタ
逆にするにはPDO::FETCH_LATEを追加指定
443 : nobodyさん2016/11/15(火) 17:43:50.71 ID:???
>>437
つまりコンストラクタ呼び出し前にプロパティがセットされるから, 定義したマジックメソッドの__setter/__getterは呼ばれない
フェッチ時に型固定は実現されない
0488nobodyさん
2016/11/16(水) 21:56:55.12ID:???class Hoge
{
private $p_id = null;
private $p_name = null;
private $p_gender = null;
private $p_register_date = null;
(略)
public function __set($key, $val){
echo('__set called'.PHP_EOL);
switch($key){
case "id":
$key = "p_{$key}";
$this->$key = (int)$val; break;
case "name":
$key = "p_{$key}";
$this->$key = (string)$val; break;
case "gender":
$key = "p_{$key}";
$this->$key = (int)$val; break;
case "register_date":
$key = "p_{$key}";
$this->$key = new DateTime($val); break;
default:
throw new Exception("Invalid parameter has been given.");
}
}
}
0491nobodyさん
2016/11/17(木) 00:28:35.02ID:???オブジェクトに変換した時点でユニコードエスケープが解除されて
スクリプトが実行されてしまうのですが、
ただの文字列として扱うためにはどうすればいいでしょうか。
-- php
$params = [
'hoge' => '<script>alert(1);</script>'
];
$data = json_encode($response, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
-- javasciript
var params = <?php echo $data;?>
0492nobodyさん
2016/11/17(木) 11:13:34.00ID:???・変なエスケープはしない
・Javascriptとしてのコードを表す文字列でも、そのままやりとりする
・ブラウザに表示する必要があるなら、そのときエスケープして表示する
0493nobodyさん
2016/11/18(金) 16:06:40.72ID:KhlvsXrEclass Foo {
public function method($options) {
}
}
class Bar extends Foo {
public function method() {
parent::method();
}
}
$obj = new Bar;
$obj->method();
としたらDeclaration関係のエラーになるのですが、
・継承先の親クラスに同名のメソッドがあるから
・そのメソッドで$options指定しているのに、子クラスではしていないから
だと思っているのですが、PHP5系では問題がありませんでした。
これは7から変わったということでしょうか?
そして、エラーを表示しない以外で対策はないのでしょうか?
0494nobodyさん
2016/11/18(金) 16:33:26.03ID:???0495nobodyさん
2016/11/18(金) 17:05:55.04ID:???ググったらこういう解決法が見つかったけど、
> if (PHP_MAJOR_VERSION >= 7) {
> set_error_handler(function ($errno, $errstr) {
> return strpos($errstr, 'Declaration of') === 0;
> }, E_WARNING);
> }
class Barを変更できるならそうした方がいいと思う。
0496nobodyさん
2016/11/18(金) 20:24:06.28ID:???この条件は
defined("E_STRICT")のほうがいいんじゃね
0499nobodyさん
2016/11/19(土) 00:10:03.79ID:???やっぱり継承先と同名のメソッドを使うなら引数も同じにした方が良いですね
それが正しい書き方という事でしたらそういう書き方を定着させます
0500nobodyさん
2016/11/19(土) 10:10:40.07ID:WWO/xMNV時代は変わったな
0501nobodyさん
2016/11/19(土) 10:50:25.36ID:???0502nobodyさん
2016/11/19(土) 11:26:28.38ID:WWO/xMNV自分で0から作れるけど仕事だともはやほとんどフレームワーク使うでしょ
フルスクラッチは人によって仕組みに差が出来すぎるから敬遠される
0503nobodyさん
2016/11/19(土) 11:57:33.13ID:???お前らみんな業務でPHP使ってるの?
0504nobodyさん
2016/11/19(土) 12:11:37.67ID:WWO/xMNVwebだし
そして圧倒的人手不足笑
0505nobodyさん
2016/11/19(土) 20:21:47.92ID:???ちょっとしたバッチ処理とか書かないのか。
PHPの良さは、そういう小さいのも手軽に作れることなのに。
0507nobodyさん
2016/11/19(土) 22:40:23.45ID:WWO/xMNVしかし小さいのならVBとかでも良いけどな
windows上で動くし
0508nobodyさん
2016/11/20(日) 01:13:38.10ID:???0509nobodyさん
2016/11/20(日) 01:16:50.12ID:???0510nobodyさん
2016/11/20(日) 07:04:30.67ID:???300行程度だったしいちいちFWなんて使わんよ
0511nobodyさん
2016/11/20(日) 11:44:14.05ID:???0512nobodyさん
2016/11/20(日) 12:07:26.20ID:???0513nobodyさん
2016/11/20(日) 12:09:28.71ID:???0514nobodyさん
2016/11/20(日) 13:41:10.44ID:???そしたらますますFWいらないな
まああっちはPHPのように書くためにFW導入することになるだろうけど
0515nobodyさん
2016/11/20(日) 13:53:01.44ID:uNQTWMm/ここは週末プログラマーが多いのか
そりゃPHPのフレームワークはwebサイト向けのが大半だからそれ以外のプログラムなら使わないわな
0516nobodyさん
2016/11/20(日) 14:52:56.69ID:???0517nobodyさん
2016/11/20(日) 23:37:09.97ID:???てか、PHPとMySQLとJavascript以外でプログラム関係は覚える気はない。
アプリ開発とか必要になったら素直に専門家に依頼する
0518nobodyさん
2016/11/20(日) 23:45:57.16ID:???俺が言ったのはそういうことじゃない。
0519nobodyさん
2016/11/21(月) 02:25:45.35ID:???0520nobodyさん
2016/11/21(月) 22:35:29.33ID:???スペースインベーダーも作れないんじゃないか
0521nobodyさん
2016/11/21(月) 22:53:33.78ID:???勿論態々PHPでそんなことをするぐらいならJavaやC#で書く
0523nobodyさん
2016/11/21(月) 23:19:13.81ID:???0524nobodyさん
2016/11/22(火) 09:19:14.77ID:???0525nobodyさん
2016/11/22(火) 13:36:40.53ID:???0526nobodyさん
2016/11/22(火) 13:52:38.84ID:???0527nobodyさん
2016/11/22(火) 14:39:31.31ID:???0528nobodyさん
2016/11/22(火) 14:57:57.19ID:???0529nobodyさん
2016/11/22(火) 15:11:06.45ID:???もし>>520-522のことならこれは争ってるとは言えんぞ
>>520の知識が足りないだけだ
0530nobodyさん
2016/11/22(火) 15:37:33.79ID:???Piece
Hart
People
だろ!
0531nobodyさん
2016/11/22(火) 15:56:49.59ID:???0532nobodyさん
2016/11/22(火) 16:10:56.20ID:???Harmな
PHPer
0533nobodyさん
2016/11/22(火) 19:59:40.27ID:???0534nobodyさん
2016/11/25(金) 14:03:40.98ID:2qZ3IwqWWindowsクライアントのCSEからデータ抽出する事はできますか?
0537nobodyさん
2016/11/25(金) 15:27:33.11ID:???0540nobodyさん
2016/11/25(金) 16:00:51.35ID:???dbで上手く行ってもphpの制限で使えない事もあるわけだし
0541nobodyさん
2016/11/25(金) 16:04:42.70ID:???0542nobodyさん
2016/11/25(金) 16:06:23.76ID:???> 主に法的や政治的な問題として着目する出来事。
まぁ、事案じゃないわな
0543nobodyさん
2016/11/25(金) 16:10:55.01ID:???0544nobodyさん
2016/11/25(金) 16:18:57.21ID:???0545nobodyさん
2016/11/25(金) 16:22:28.00ID:???別にここで質問してもいいんじゃね
dbで上手く行ってもphpの制限で使えない事もあるわけだし
そいういうもんだいじゃねーーーーーーーーーーーーーーーーーーはげ
0547nobodyさん
2016/11/25(金) 16:51:53.45ID:???534 : nobodyさん2016/11/25(金) 14:03:40.98 ID:2qZ3IwqW
さくらインターネットのDBサーバに
WindowsクライアントのCSEからデータ抽出する事はできますか?
こういう問題だばーーーーか
>質問は好きにしていいと思うぞ
お前の家の鍵が開いてないのでおまえの家の冷蔵庫のハーゲンダッツ食えねーけどどうしたいいの?
って、質問しても良いのか、ばーーーーーーーーーーーーーーーーか
脳みそ腐ってんのかよ、お前
0548nobodyさん
2016/11/25(金) 16:55:57.76ID:???0549nobodyさん
2016/11/25(金) 16:57:41.35ID:???0550nobodyさん
2016/11/25(金) 17:04:48.32ID:???0551nobodyさん
2016/11/25(金) 17:08:44.21ID:???自己主張してみようよ、能無しくん。
0552nobodyさん
2016/11/25(金) 17:21:22.92ID:???脳みそ腐ってんのかよ、お前
0554nobodyさん
2016/11/25(金) 18:54:58.00ID:???0555nobodyさん
2016/11/25(金) 23:39:03.50ID:2qZ3IwqWだが出来た。
0556nobodyさん
2016/11/25(金) 23:45:45.21ID:2qZ3IwqWクライアントソフトから余裕でレンタルサーバのDBに直結できるよw
0557nobodyさん
2016/11/26(土) 01:42:30.52ID:???0558nobodyさん
2016/11/26(土) 02:30:33.51ID:gALCdYf6やっぱり俺天才www
お前ら低スキルだな。
0559nobodyさん
2016/11/26(土) 02:31:18.53ID:gALCdYf6お前あほすぎwwwwwwwwwwできるわwwwwwwww
0560nobodyさん
2016/11/26(土) 07:40:12.32ID:???0561nobodyさん
2016/11/26(土) 12:11:39.29ID:???0562nobodyさん
2016/11/26(土) 12:29:40.05ID:???0563nobodyさん
2016/11/26(土) 12:42:24.59ID:???ありがとうございます
本格的な暗号化にどう使うのかと思ってましたが、使わないんですね。当たり前ですよね。
wikipediaより
雑誌などでクイズの正解を上下逆さまに印刷するが、それと似たようなものである。
0564nobodyさん
2016/11/26(土) 13:39:47.51ID:???どうしようもないくらいクソなプログラムというのは存在する。
0565nobodyさん
2016/11/26(土) 20:31:12.19ID:???>>314
http://php.net/manual/ja/faq.using.php
フリーではない商用ライブラリである PDFLibを使わずに PDFファイルを生成するにはどうしたらよいでしょうか? フリーのもので、外部のPDFライブラリを必要としない ものがいいのです。
PHPで書かれている代替手段がいくつかあります。 ≫ FPDF や ≫ TCPDF などです。
また、Haru 拡張モジュールもあります。 これは、フリーな外部ライブラリ libHaru を使用しています。
0566nobodyさん
2016/11/26(土) 21:38:25.63ID:???0567nobodyさん
2016/11/26(土) 21:42:15.73ID:???0568nobodyさん
2016/11/26(土) 21:59:27.40ID:???http://ethna.jp/doc/
最新のニュース
2012/3/31 Smarty 3.1.8, simpletest 1.1.0 (stable) のパッケージ配布
Ethna 2.6.0 beta4 のリリースに先駆けて、Ethna の PEAR チャネルに Smarty 3.1.8、simpletest 1.
もうやる気ないなら打ち切り!って言ってしまえばいいのにね
0569nobodyさん
2016/11/26(土) 22:10:01.67ID:???dir構造とかオレオレ感溢れすぎだろ
0570nobodyさん
2016/11/26(土) 22:50:53.09ID:???HTML理解できねー奴がプログラム組めるわけねーじゃん。
0571nobodyさん
2016/11/26(土) 23:05:17.29ID:???UIなぞに手間取ってる暇はないってな
0572nobodyさん
2016/11/27(日) 14:08:29.40ID:???0573nobodyさん
2016/11/27(日) 14:47:54.60ID:???コードをいじることなく最新のHTMLに更新される
0574nobodyさん
2016/11/27(日) 16:05:01.56ID:???0575nobodyさん
2016/11/27(日) 17:38:43.47ID:???んなわけねーじゃん。
状況に合わせていろんなフレームワーク使わなきゃいけないのに
特定フレームワークのヘルパーの使い方なんか、いちいち覚えてられるかよ。
0578nobodyさん
2016/11/27(日) 21:55:32.63ID:???そんな突っかかるほどのものでもなかろうに
0579nobodyさん
2016/11/28(月) 00:25:10.38ID:???0580nobodyさん
2016/11/28(月) 02:46:37.95ID:Jo2/Mp4P素人のメモ書き参考にしてどうすんの?
0581nobodyさん
2016/11/28(月) 03:34:03.02ID:???0582nobodyさん
2016/11/28(月) 11:31:56.39ID:???そういうオナニーは一人でやってろ
0583nobodyさん
2016/11/28(月) 11:49:10.27ID:???HTMLヘルパーを使う=1つのFWしか使いません=謎
いろんなFWに学習コストは割けるのに
その一部でしかないHTMLヘルパーに割けれないって矛盾してる
状況にあわせてといいつつ状況にあわせられていない
使うことが必須なわけでもないし覚えたくないなら覚えなくていい
0584nobodyさん
2016/11/28(月) 13:17:07.33ID:???0585nobodyさん
2016/11/28(月) 18:11:00.66ID:???>その一部でしかないHTMLヘルパーに割けれないって矛盾してる
何言ってんだこいつ?
割く必要もない労力を何故割きたがるんだ?
ノータリンの考えかたはわからんな。
>使うことが必須なわけでもないし覚えたくないなら覚えなくていい
使ってあったら必要もないのに調べなきゃならなくなんだろ
迷惑なんだよ、お前みたいなゴミクズ
0587nobodyさん
2016/11/28(月) 18:24:40.63ID:???0588nobodyさん
2016/11/28(月) 18:42:52.73ID:???ホザイてろ、ゴミ
>>587
お前が何言ってるかわからんが、HTMLを記述すればいいだけだ。
ヘルパーとか考えるやつも便利だと思うやつも、センスない。
0589nobodyさん
2016/11/28(月) 18:48:15.28ID:???完全無視推奨
0590nobodyさん
2016/11/28(月) 19:15:15.69ID:???htmlヘルパー
echo $this->Html->image("recipes/6.jpg", array(
"alt" => "ブラウニー",
'url' => array('controller' => 'recipes', 'action' => 'view', 6)
));
出力結果:
<a href="/recipes/view/6">
<img src="/img/recipes/6.jpg" alt="ブラウニー" />
</a>
0591nobodyさん
2016/11/28(月) 19:28:39.69ID:???おまえの脳みその出来が悪いことを俺貶める理由にするなよ。
まだヘルパー()とか便利だと思ってるのかよ、おサルさん。
0592nobodyさん
2016/11/28(月) 22:36:37.48ID:Jo2/Mp4Pサイトにも書いてるけど俺のメモ書きなので
真似してバグってもしらねーよ。
よく使うコードだけどメモっておくとほんと便利だわ。
コピペでスイスイ開発がすすむ。
0593nobodyさん
2016/11/28(月) 22:39:19.39ID:???小規模(フォームとか掲示板とか)のプログラム作るときって
フレームワーク使いますか?それとも使わずに書きますか?
0596nobodyさん
2016/11/28(月) 23:11:21.71ID:Jo2/Mp4P知らん。
ただ、メモっておくとほんと便利。
コード忘れても基本自分のノート代わりにしてるので
検索してすぐ欲しい情報が見つかるからね。
他人が書いたくそメモサイトと違って
自分の言葉で自分が分かる事に特化した記載をしてるのでほんと快適♪
0597nobodyさん
2016/11/28(月) 23:17:13.31ID:???そもそも正規表現で弾くような必要が本当にあるのか問い詰めたい
0598nobodyさん
2016/11/28(月) 23:45:26.94ID:???開いただけで使うかどうかはまた別の話。
タイトルや引っかかった文で目的のものか開いてみるけど、開いたら全然見当違いだったってことは多い。
0599nobodyさん
2016/11/28(月) 23:47:06.69ID:???あなたが書いてるコードがどういうものか分からないけど、そのくそメモサイトの同類になってないなら別にいいと思うよ。
ただ、自分用のメモなら全世界に公開する必要なんてないだろとも思う。
0601nobodyさん
2016/11/29(火) 01:00:04.73ID:???別に>>592が悪いと言ってるわけじゃないよ。
嫌だとも思ってないし。ただ調べものしてるとサイトを開いた回数と、その内容が参考になる回数は大幅に違うってだけ。
0603nobodyさん
2016/11/29(火) 09:25:35.65ID:???公開すると適度な緊張が生まれて微妙に洗練されるんだよな
まぁそれで助かる人もいるだろうしいいんじゃね?
俺は一応エラーと解決方法を積極敵に載せるようにしてるよ。ハマったときが一番きついからな
0604nobodyさん
2016/11/29(火) 10:45:32.56ID:???新着に近い場合は評価も付かないから、リンク開かないと内容がわからん
で、開いてがっかりする
0605nobodyさん
2016/11/29(火) 10:52:03.75ID:???永遠なんて、ないんだよ
0606nobodyさん
2016/11/29(火) 11:07:31.92ID:QC5ddTRE>俺は一応エラーと解決方法を積極敵に載せるようにしてるよ。ハマったときが一番きついからな
うん、これで何度か救われた
>>604
見るなバカ
0607nobodyさん
2016/11/29(火) 15:29:54.33ID:???0608nobodyさん
2016/11/29(火) 16:03:32.57ID:/xcsBLK+0610nobodyさん
2016/11/29(火) 17:05:20.73ID:???同じアホなら見せなきゃ損損
0611nobodyさん
2016/11/29(火) 19:58:25.40ID:QC5ddTREのぞいてんじゃねーよ。変態!
0612nobodyさん
2016/11/29(火) 21:45:24.60ID:???0613nobodyさん
2016/11/29(火) 23:53:26.53ID:???0614nobodyさん
2016/11/30(水) 00:02:30.80ID:J1ZKp0ZYうっせーばか。仕切るな
0615nobodyさん
2016/11/30(水) 03:51:04.75ID:???0617nobodyさん
2016/11/30(水) 18:20:49.91ID:???・関数を3つに分ける
例)photoSmallUrl, photoMediumUrl, photoLargeUrl
・関数の引数で指定させる
例)photoUrl(int $id, str $type = 'small')
どちらがベストプラクティスですか?
0618nobodyさん
2016/11/30(水) 19:37:49.32ID:J1ZKp0ZYお前の脳みそでは無理
がベストチョイス
0619nobodyさん
2016/11/30(水) 20:15:36.96ID:???1案のコードを書いてみると、おそらく3つの関数でほとんど同じコードが出てくる結果になるだろう。
その場合、当然2案にリファクタリングすることになる。
0620nobodyさん
2016/11/30(水) 20:16:49.27ID:???後者
まぁ前者は可変関数なんてのもあるけどな
http://php.net/manual/ja/functions.variable-functions.php
0621nobodyさん
2016/11/30(水) 20:48:32.17ID:???可変にしてもコードが重複するのは変わらんからね。
関数を可変にするのは今回のような場合の為じゃないかな。
0622nobodyさん
2016/11/30(水) 20:54:41.13ID:???0623nobodyさん
2016/11/30(水) 22:28:20.62ID:???0624nobodyさん
2016/12/01(木) 05:11:23.70ID:???だから違和感があってな
0625nobodyさん
2016/12/01(木) 05:11:55.22ID:???まぁさっしてくだし
0626nobodyさん
2016/12/01(木) 17:15:12.06ID:???elseif?
0627nobodyさん
2016/12/01(木) 20:26:43.07ID:aRkR7W4hお前の顔もおかしいよ
0628nobodyさん
2016/12/02(金) 12:55:15.56ID:???http://php.net/index.php#id2016-12-01-3
0629nobodyさん
2016/12/02(金) 13:26:41.26ID:???0630nobodyさん
2016/12/03(土) 13:17:39.70ID:???0632nobodyさん
2016/12/17(土) 09:45:26.51ID:???$fp = stream_socket_client( "tcp://xxx.xxx.xxx.{$i}:1234", $errno, $errstr, 0.3 );
if ( $fp ) {
echo "{$i} OK\n";
fclose( $fp );
}
}
一括サーバチェックコードなのですが、
$iを増やせば増やすほど正常なのにレスポンスが返ってくることが少なくなります。
たまに調子が悪いと漏れますが、1個ずつやれば自分とのやり取りは0.2秒でも問題のない国内サーバ群です。
タイムアウトを3秒ぐらいにすれば問題がなくなるのですが、それだと時間がかかりすぎます。
これは単純にPHPだけの問題じゃない気がするのですが、どこを見なおせばいいでしょうか?
0633nobodyさん
2016/12/17(土) 10:19:26.66ID:???0634632
2016/12/17(土) 11:22:19.39ID:???ありがとうございます。
sleep挟んでみましたが特に効果は見られませんでした。
3秒ぐらいにすると10までしかいかなかったのが20ぐらいになる程度には改善するのですが、すぐに手詰まりになります。
OS(Windows)側でTcpTimedWaitDelayを30秒に変更もしてみましたが、それも特に効果はありませんでした。
一番安定するのはソケットのタイムアウトを0.3秒から増やすことで、それ以外はあまり効果がないようです。
0.3秒でもリスト(上のコードはforですが実際はforeachでやります)の最初のほうに持ってきたIPはポンポン返るんですけどね。
0635nobodyさん
2016/12/19(月) 10:56:38.32ID:???まず何エラーが発生してるのか教えろ
問題の把握&解決法
・tcpをダンプして何が起こっているのか観察する
・スレッドを使える言語にしてタイムアウトを伸ばす
・PHPじゃなきゃ駄目なら、複数プロセスを同時に起動させて対象を分割しタイムアウトを伸ばす
0636nobodyさん
2016/12/19(月) 11:36:42.72ID:???> これは単純にPHPだけの問題じゃない気がするのですが、どこを見なおせばいいでしょうか?
別手段で同じ事やってみて、再現するかどうか試してみたら?
0637nobodyさん
2016/12/19(月) 14:57:55.84ID:???前提として、まず、*.*.*.0と*.*.*.255が同時に使えるということはない。
さらに、*.*.*.256〜は使えない。
それはわかってるのか?
0638nobodyさん
2016/12/19(月) 15:57:55.19ID:???0639nobodyさん
2016/12/19(月) 16:06:34.88ID:???0640nobodyさん
2016/12/19(月) 17:32:46.69ID:???0641nobodyさん
2016/12/19(月) 20:17:26.20ID:???0642632
2016/12/20(火) 15:57:45.40ID:???> 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。
> または接続済みのホストが応答しなかったため、確立された接続は失敗しました。
エラーはこんな感じです。
遅延を伸ばせば期待通りになります。
wiresharkの使い方もよくわからず、tcpダンプとかちょっとレベルが高くて無理なので、
あれから試行錯誤してみたところわかったことが1つありました。
チェックに使うサーバ郡は、応答が返って来ないサーバのほうが多いぐらいなのですが、
その中から返ってきたもののみを抽出して、再度チェックしたところ、
全てのサーバが0.1秒でも問題なく返ってきました。
>>632のコードで全部ifの中を通ってきたということなのですが、
ひょっとしたらfcloseしないことが何か関係しているのでしょうか?
スレッド使えというのはもっともな意見ですね。
とりあえず今回の問題の原因が気になるので、もうちょっと調べてみようと思います。
0643nobodyさん
2016/12/20(火) 16:56:26.59ID:???> チェックに使うサーバ郡は、応答が返って来ないサーバのほうが多いぐらいなのですが
そのサーバは、ポート1234でlistenしているの?してないの?
してるとしたら、サーバ側でログは出せないの?
別手段で試すことはできないの?
0644632
2016/12/20(火) 17:44:20.39ID:???サーバの管理者は自分ではありません。
そのため、今現在各サーバ管理者がlistenしてるかどうかまではわかりません。
サーバがどういうものかよくわかっていないような人でも、
設定不要でワンクリックでWindows上で立てれるような代物なので、
中にはダイナミックなIPアドレスでDDNSを使わず運用してる人もいると思います。
古い情報も多く整理するためにやっているのですが、
今の書き方だと問題のないサーバまで弾いてしまう可能性があるので、
原因がどこにあるのか(PHPの問題なのか)知りたいです。
専用クライアント使って別手段で1個ずつ試すことは出来ますが、時間がかかりすぎる上に手動になるので・・・
0645nobodyさん
2016/12/20(火) 18:14:23.46ID:???> 専用クライアント使って別手段で1個ずつ試すことは出来ますが、時間がかかりすぎる上に手動になるので・・・
少しは調べろ
https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=windows+tcp+%E7%96%8E%E9%80%9A%E7%A2%BA%E8%AA%8D
0646nobodyさん
2016/12/20(火) 18:21:39.38ID:???> 遅延を伸ばせば期待通りになります。
期待通りって何だよ?
> 1個ずつやれば自分とのやり取りは0.2秒
とあるが、>>632のコードのタイムアウトを10秒とかにすると、生きてるサーバは全部0.2秒以内に戻るのか?
0647nobodyさん
2016/12/20(火) 18:51:50.60ID:???0648632
2016/12/20(火) 20:13:02.88ID:???別手段ってそういうことだったんですね。
なんか特別な専用ツールがないかみたいなことを聞かれてるかと思ったので。
>>646
>>641へのレスだったのですが、長めに5秒にしてみたのですが、生きてるものはちゃんと返ってきました。
この生きてるものというのは、0.3秒で10個ずつ分割して、コンソールからやったときに正常に返ってきたものと同じです。
これを10個ずつとか分割しないで、一気に1回でやったら5秒なら返ってきました。
>生きてるサーバは全部0.2秒以内に戻るのか?
生きてるサーバにたいしてタイムアウトを0.1秒にしたら(分割しないでも)全部返ってきました。
>>647
なんか他にいい手段ありますか?
0649nobodyさん
2016/12/20(火) 22:49:27.33ID:???0650nobodyさん
2016/12/21(水) 11:05:46.46ID:???>>648
> これを10個ずつとか分割しないで、一気に1回でやったら5秒なら返ってきました。
と
> 生きてるサーバにたいしてタイムアウトを0.1秒にしたら(分割しないでも)全部返ってきました。
は、矛盾してるが。
> なんか他にいい手段ありますか?
質問の意図は、なんでstreamを使ってるのか、だ。
普通の手段をなんで使わないんだ?
http://php.net/manual/ja/book.sockets.php
とか
http://php.net/manual/ja/ref.network.php
(つか、検索しろよ)
0651nobodyさん
2016/12/21(水) 13:12:59.09ID:???0652632
2016/12/21(水) 15:25:46.59ID:???いくつかのタイトルのゲームサーバです。
>>650
>>632のコードで、0〜255までのうち、偶数は正常で応答があり、奇数は異常で応答がないとし、
これは正常なサーバの状態とします。
stream_socket_clientのタイムアウトは0.3秒に設定されていますが、
これでは、最初の方は正常に応答があるものの(分割した理由はこのため)、ある程度いくと、
正常なはずの偶数のサーバの応答も返ってこなくなります(100%ではありませんが)。
しかし、タイムアウトを5秒まで伸ばしたところ、全て正常に応答が返ってくるようになりました。
ちなみに分割というのは、sleepを挟んでということではなく、
一度スクリプトを終了して、再度スクリプトを起動しています(引数でstartとendを指定するイメージ)。
forのインクリメントを$i++から$i+=2にし、正常な偶数のサーバのみに問い合わせた場合、
タイムアウトを0.1秒にしても全て正常に応答が返ってきます。
教えていただいた関数ですが、上のはクライアント側には使わないと思います。
下のはfsockopenのことを言っているのなら、stream_socket_clientとほぼ同じ関数です。
0653632
2016/12/21(水) 15:41:28.87ID:???使わないというのは語弊があったので、訂正します。
使う必要がないというニュアンスでお願いします。
サーバの仕様がわからないので・・・
0654nobodyさん
2016/12/21(水) 16:38:45.41ID:???0655632
2016/12/21(水) 16:40:31.51ID:???正しくはWindows7+PHP5.4です。
ハード的にいえばWindowsのものよりだいぶ劣っているのですが、
先ほどCentOS7+PHP7の別環境を構築したので(VM上ではなく専用機)、
>>632のコードを実行しましたが、同一回線で問題なく最後まで正常に動作しました。
Windowsのソケットが悪いのか、ハードに問題があるのか、
何が原因かまではわかりませんが、どうも環境依存っぽいです。
環境依存となると、正確な情報が欲しければタイムアウト伸ばしたほうがよさそうなので、
一応Javaでもためそうとおもいますが、とりあえず構築したLinuxで気長にやることにします。
0657nobodyさん
2016/12/21(水) 18:35:56.95ID:???お前らいい加減学習しろよ
0658nobodyさん
2016/12/22(木) 12:51:15.27ID:???0659nobodyさん
2016/12/23(金) 23:24:25.82ID:GYV6CxEoSESSIONなのか、classなのか、それともtmp用のテーブルを作るのか・・・
何か色々作ってみたいのですが、前に勧めません。とりあえずなんでもいいから作って見たほうが良いんでしょうかe?
こういうのは場数を踏むしかないんでしょうか?
0660nobodyさん
2016/12/23(金) 23:58:36.32ID:???IOは別クラスに切り出すと後のストレージ切り替えなんかの変更に強い
が, 考え過ぎて手が動かないよりは最初は手を動かした方が良い
0661nobodyさん
2016/12/24(土) 00:05:01.87ID:Zz5BM5EIありがとうございます
失敗しても何かの糧になると思って、やってみます
0662nobodyさん
2016/12/24(土) 07:51:09.57ID:???だいたいあれこれ考えてると完成までしないで構想で終わるから
0663nobodyさん
2016/12/24(土) 08:43:49.53ID:???そう。あとセキュアも完璧主義になりすぎると、リリースできない。
破壊される前提で設計したら負けない。
0664nobodyさん
2016/12/24(土) 09:02:16.35ID:Zz5BM5EIそれちょっと違うくね
0666nobodyさん
2016/12/24(土) 12:30:40.79ID:???自信ないやつは笑われてもそうすればいいんだぜ
普通じゃないことをさも当たり前のように言わなければ
自分は糞だからそうするって自覚してれば何をしたっていいじゃない
0667nobodyさん
2016/12/24(土) 12:34:40.76ID:???0671nobodyさん
2016/12/25(日) 16:38:23.16ID:???抽象化も下手くそだし、こいつは普段どんなコードを書いているのかというのがひと目で分かるな。
0672nobodyさん
2016/12/25(日) 16:48:34.64ID:k0peFTaNリソースも実質無制限にあるようなもんから速度以外考えない
そりゃ環境に甘えたコードが出てきてしまうだろう
0673nobodyさん
2016/12/25(日) 17:32:25.87ID:???なに!? おまえPHPマスターになにいってんの?
完全なセキュアなんて無いんだが?
オレの手法は免震構造マンションからヒントを得ている。固く守れば逆に崩れる。
ハッキングされようがその力を無力化する。おまえのスペックでは理解不能の次元であることを謝罪する。
0675nobodyさん
2016/12/25(日) 20:58:02.34ID:k0peFTaN尊大さが足りない
0676nobodyさん
2016/12/26(月) 00:08:21.78ID:???0677nobodyさん
2016/12/26(月) 00:18:19.36ID:BpT0k2cTソロだとアホらしいだけだ
0678nobodyさん
2016/12/26(月) 11:20:55.28ID:miFRCdVbhttps://youtu.be/uH-WOOcNZ0s
https://youtu.be/xHx5MbIGEoY
0679nobodyさん
2016/12/26(月) 11:45:29.81ID:BpT0k2cT0680nobodyさん
2016/12/26(月) 12:03:46.34ID:???//
}
$input['q']が存在してなおかつ空ではないことを確認する場合、
上記よりも簡潔な書き方はありませんか?
0682nobodyさん
2016/12/26(月) 15:52:00.20ID:???0684nobodyさん
2016/12/26(月) 22:16:26.19ID:???今知ったけど怖すぎて使えない
gmp_divexact
gmp_divexact ― 正確な除算
GMP gmp_divexact ( GMP $n , GMP $d )
高速な "exact division" アルゴリズムを使用して n を d で割ります。 この関数は、n が d で割り切れることがわかっている場合にのみ正確な結果を出力します。
$div2 = gmp_divexact("10", "3"); // 間違った結果となります
echo gmp_strval($div2) . "\n";
0686nobodyさん
2016/12/27(火) 22:27:51.95ID:???死にたい・・・
以下で半日潰れましたorz
これはマッチしてしまう
var_dump(preg_match('/[あい]/', 'う')); // int(1)
0687nobodyさん
2016/12/27(火) 23:09:25.98ID:???マルチバイト使うのにuオプション付けないお前の頭がクソ
PHPにクソな部分があるのは否定しないがそもそも外部ライブラリ側の仕様持って来るヤツはプログラミング向いてないから早いとこ引退しろ
0688nobodyさん
2016/12/28(水) 01:50:10.42ID:???こっちで回収しておく
0689nobodyさん
2016/12/28(水) 09:04:28.87ID:???0692nobodyさん
2016/12/28(水) 21:36:15.17ID:???PHPでpear::mailを使ってヤフーでSMTP認証してヤフーからメール送れますか?
0693nobodyさん
2016/12/28(水) 21:43:17.54ID:???0694692
2016/12/29(木) 00:28:31.69ID:???ありがとうございました
0695nobodyさん
2016/12/29(木) 22:45:48.26ID:???「はいはい、emptyね」みたいな感じで昔書いたコードを読んでいったら、
そのへんは全部対策してあるのになおも値がとれなくて、
どうなってんだこれ?と思ったら、
keyがアンダースコアとハイフン間違えてて本当にPOSTされてないだけだった。
PHPさん疑ってごめん。でも君は普段から疑わしすぎるんだよ。
0696nobodyさん
2016/12/30(金) 08:33:26.83ID:???PHPStormで、カーソル位置がPHPの関数の文字列にあるとき、
F1 キーを押すとPHP日本語ヘルプでその関数の説明をを表示する
ようにしたいです。
ご存じの方いましたら教えてください。
0698nobodyさん
2016/12/31(土) 09:50:53.91ID:???コマンドラインからphp xxxx.phpで実行出来るようにはなったのですが、
xxxx.phpにpathを通しても、exeのように、
xxxx.phpあるいはxxxxとうつだけでは実行はできませんよね?
0699nobodyさん
2016/12/31(土) 18:38:55.23ID:???0701nobodyさん
2017/01/02(月) 01:05:14.21ID:???インタプリタを関連付ければできそうな気がするが
0702nobodyさん
2017/01/02(月) 13:55:50.76ID:???適当な拡張子をつけてphp.exe(CLI)に関連付けしてみると、
拡張子までうつと実行は出来るようになりました。
しかし$argvがどうも受け取れないようで、意図した動作にはならず、
何をしてもエラー処理部分に常にいってしまいます。
0703nobodyさん
2017/01/02(月) 23:43:58.27ID:???個別のファイルを、実行可能にするには、そのファイルの1行目に、シバン(shebang)を書く
#!/usr/bin/env python
環境変数PATHから、pythonコマンドを探して、そのファイルを実行する。
PATHの順番によって、python2, 3 のどちらが起動されるかが決まる
シバンが書いてあれば、そのファイルを起動するプログラムが分かるので、
python a.py とコマンドを打たなくても、
カレントディレクトリから、./a.py
または、絶対パス/a.py で起動できる。
ただし、そのファイルに実行可能属性が必要
a.py, a.php のようなスクリプトが置いてある場所を、環境変数PATHには設定しない
0704nobodyさん
2017/01/03(火) 02:06:32.04ID:???呑みのお誘いや二日酔い報告にどうぞ!
【ビール大好きくんサマー】
http://らいん.me/S/sticker/1292996
(URLは「らいん」→「LINE」に置き換えてね)
0707nobodyさん
2017/01/05(木) 03:11:52.93ID:???共用サーバーでSMTP認証したらこのようなエラーがでました
Warning: fsockopen() has been disabled for security reasons in (class.smtp.phpまでのパス) class.smtp.php on line 290
class.smtp.phpの290行目にはこのように書いてありました
$this->smtp_conn = fsockopen(//←ここが290行目です
$host,
$port,
$errno,
$errstr,
$timeout
);
この共用サーバーではPHPMailerでSMTP認証できないのでしょうか?
また、PHPMailerでSMTP認証できる共用サーバーをご存知ないでしょうか?
できれば無料サーバーだとありがたいです
0708nobodyさん
2017/01/05(木) 03:50:36.02ID:???0711nobodyさん
2017/01/05(木) 16:14:42.57ID:???http://www.2by2host.com/articles/php-errors-faq/disabled_fsockopen/
0712nobodyさん
2017/01/05(木) 19:45:58.54ID:???以前はDBばかり使っていたのでほとんど気にしていなかったが、
PHPの配列関連のメソッドって本当にマジキチだな。
PHPの不評の大部分(整合性のとれていない引数やメソッド名)って、配列関連じゃねーの?
0713nobodyさん
2017/01/05(木) 19:48:19.67ID:???配列処理増えてきたころって一番文句を言いたくなる時期とかぶるような気もするし。
0714nobodyさん
2017/01/05(木) 22:59:29.94ID:???0715nobodyさん
2017/01/05(木) 23:51:50.16ID:???その引数、$errno, $errstr にエラーメッセージが書いてあるんじゃないの?
それには、何て書いてある?
0717nobodyさん
2017/01/06(金) 19:41:37.74ID:???気に入らなきゃ速度なんて気にせずforでごにょったらいいと思うの
いまならyieldも使えるし
0718nobodyさん
2017/01/07(土) 07:04:16.08ID:???0719nobodyさん
2017/01/07(土) 14:55:16.02ID:???マニュアルに書いてある通りではあるんだけれども
0721nobodyさん
2017/01/08(日) 11:32:12.90ID:???普通はマニュアルなんて見なくてもある程度予想がつく。
0722nobodyさん
2017/01/08(日) 15:36:28.98ID:???[
'a.bc',
'd.ef',
'g.hi',
]
このドット記法の配列データを以下のようにできませんか?
[
'a' => ['bc'],
'd' => ['ef'],
'g' => ['hi}
0723nobodyさん
2017/01/08(日) 19:53:09.56ID:???0724nobodyさん
2017/01/08(日) 20:27:11.49ID:???$new[] = explode [0] => [1]
0725nobodyさん
2017/01/09(月) 00:19:28.37ID:???0726nobodyさん
2017/01/09(月) 00:21:23.01ID:???$test2 = array("a" => "a");
echo $test["a"]."<br>"; // OK
echo "$test[a]<br>"; // OK
echo $test[$test2["a"]]."<br>"; // OK
echo "$test[$test2[a]]<br>"; // SYNTAX ERROR
最後のケースが構文エラーになるのは何故なのでしょうか?
(echo "{$test[$test2[a]]}<br>";とした所うまく動きました。)
0727nobodyさん
2017/01/09(月) 01:30:28.61ID:???マジかよと思ったら本当にこれ動いたわw
0728nobodyさん
2017/01/09(月) 07:11:47.79ID:???$d = "b";
echo "$a[$d]"; //OK
$d = ["e"=>"b"];
echo "$a[$d[e]]"; //NG
$a = ["b"=>["c"=>"d"]];
echo "$a[b][c]"; //NG
$a = ["?b"=>"c"];
echo "$a[?b]"; //NG
ダブルクオテーション内において{}で囲まずに正常に展開される範囲は
1次元の配列まで
かつ
添字部分はシングルクオテーションや配列記号[]を含める記号を入れられない(ただし$から始まるスカラー変数は可能)
ということなのだろう・・・
0729PHPネ申
2017/01/09(月) 12:26:06.49ID:???? echo "$test[$test2[a]]<br>"; // SYNTAX ERROR
◎ echo $test[$test2["a"]];
こうじゃないの?
0731nobodyさん
2017/01/09(月) 17:34:23.33ID:???とりあえず{}で囲むのが基本やとおもう
['a']ならまだしも$test[a]はそのまんまだとエラー出るしなあ
0732nobodyさん
2017/01/09(月) 17:42:55.69ID:???0733nobodyさん
2017/01/09(月) 22:53:04.00ID:bmjPRAajPHPで文字列の文字コードを判別する場合、
この様に引数に予め複数の文字コードを列挙する必要があるのでしょうか?
感覚的には、mb_detect_encoding関数の引数に
調査対象の文字列を入れれば、自動で文字コードが検出されるものかと思っておりました。
0734nobodyさん
2017/01/10(火) 01:43:45.43ID:???2chのバグだろう
書き込み確認画面が出る際、" を使うと、そこで文字列の終了とみなされる。
" の代わりに、\" とエスケープすれば、どうだろう?
それか、書き込み確認画面が出たら、1度キャンセルすれば、確認画面は出ないようになった
>>733
その関数のドキュメントに、使い方は書いてないの?
0735nobodyさん
2017/01/10(火) 01:48:53.38ID:???残念ながら文字コード検出は「難しい」処理で, 一般には一意に決定出来ない
ICUでもiconvでもnkfでも推測は出来ても決定は出来ない
文字の符号化方式は無数に存在するからな
だから候補を挙げておいてそこから選ばせる必要がある
0737nobodyさん
2017/01/10(火) 10:53:00.59ID:???それやらないと文字コードを誤検出してかなりダルイ
// utf-8に変換する時は脳死でこう
$str = mb_convert_encoding ( $str, "UTF-8", mb_detect_encoding ( $str, "ASCII,JIS,UTF-8,CP51932,SJIS-win", true ) );
0739nobodyさん
2017/01/15(日) 17:28:16.80ID:???0740nobodyさん
2017/01/15(日) 17:39:16.09ID:jnaaL6KKバカ発見
0743nobodyさん
2017/01/15(日) 17:52:26.02ID:???誤解を招きそうで怖いけど
0744nobodyさん
2017/01/16(月) 10:18:57.25ID:eoF1W14nファイル情報を取得して判断しようとしても上手く行かないんですが何か専用の関数とかあるんでしょうか?
0745nobodyさん
2017/01/16(月) 10:21:51.42ID:???http://php.net/manual/ja/function.file-exists.php
0746nobodyさん
2017/01/16(月) 10:26:39.45ID:???全ファイルの取得とかは考えないほうがいい
0747nobodyさん
2017/01/16(月) 10:38:44.23ID:eoF1W14n例えば、http://hogesite/movie/hoge.mp4 をfile_exists()で確認しようとすると、どちらもfalseが返ってくるんですよね・・
でも実際は存在するファイルは読み込むことができるんですよね
他にはstat()やheader()でやろうとしてもダメでした
0748nobodyさん
2017/01/16(月) 10:42:39.71ID:???get_headers()
だな
0749nobodyさん
2017/01/16(月) 10:53:20.56ID:???0750nobodyさん
2017/01/16(月) 13:45:22.96ID:???class c {
public $n;
public function __construct() {
$n = new $this;
}
}
(new c());
0751nobodyさん
2017/01/17(火) 21:14:32.74ID:LeG/+lw1セキュリティ画面がなくなって居たのですが
何も設定しなくて良いのでしょうか?
一応mysqlのユーザーパスは変えました
それだけでおけ?
0752nobodyさん
2017/01/17(火) 21:16:12.54ID:???0753nobodyさん
2017/01/17(火) 21:20:49.76ID:LeG/+lw1オレンジっぽい画面で
セキュリティの警告が出たりしてました
そこで何やらゴニョゴニョやった気が…
今はもう大丈夫なんですかね?
0754nobodyさん
2017/01/17(火) 21:28:58.78ID:???あんなの公開鯖じゃないんだしどうでもよかろうもん
0755nobodyさん
2017/01/17(火) 21:32:55.35ID:???0756nobodyさん
2017/01/17(火) 21:37:26.37ID:???あーあれか。いつもすぐに消してたな。
>>751
別に誰か触るわけじゃないからユーザーパスなんて無くて良くないか
それよりもmysqlのユーザーとパスを本番環境に合わせておくといいぞ
rootでテストすると思わぬところでひっかかる、というかひかかった
0757nobodyさん
2017/01/17(火) 22:09:14.22ID:LeG/+lw1そうです。調べた所、なくなったみたいですね。
>>756
私も昔やっちまいました。
みなさんありがとうございます。
0758nobodyさん
2017/01/18(水) 10:03:47.04ID:p0EF6Ec+0759nobodyさん
2017/01/18(水) 23:47:21.59ID:wplrfJOQ普通は、 " ダブルクォーテーションでしょ?
0762nobodyさん
2017/01/19(木) 00:20:28.47ID:???シングルでも書けるが正解
普通はダブルだと思うならダブルを使えばいい
0763nobodyさん
2017/01/19(木) 00:22:12.50ID:???0764nobodyさん
2017/01/19(木) 00:24:08.99ID:HOa0/OpmPerl は嫌い
>>761 >>762
もともとC#から入ってる俺からすると生粋のPHPerが ' で文字列を括るのに
本当に嫌悪感を感じる。
また
if ( true ){
}
じゃなくて普通は
if( true )
{
}
じゃないか?
0765nobodyさん
2017/01/19(木) 00:28:38.25ID:???if ( true ){
}
functionはこう
function()
{
//foo
}
0766nobodyさん
2017/01/19(木) 00:30:46.07ID:???PHPはPerlからの影響もかなり強い
C#と違ってな
あとコーディング規約でしかないことを必要以上に押し付けるのは宗教の押し売りと変わらんぞ
0767nobodyさん
2017/01/19(木) 00:42:20.14ID:???コーディング規約なんてどうでもいいだろ
Javaの影響が強いEclipse使ってれば上になるし
C系の影響が強いVS使ってれば下になる
PHPもPEARコーディング規約は上でZendコーディング規約が下と分かれてるし
PHPerに人気のPhpStormも下だから下の書き方のやつは多い
0770nobodyさん
2017/01/19(木) 11:55:42.84ID:???0771nobodyさん
2017/01/19(木) 11:56:43.28ID:???0772nobodyさん
2017/01/19(木) 12:27:11.30ID:HOa0/OpmDBからデータを検索しようとしています。
例えば社員IDが 3,5,7
の3つを検索しようとした場合
PHPで文字列編集を行ってSQLを
EMPLOYEE_ID IN ( 3 , 5, 7)
と組み立てて実行してますが、もっとスムーズにやる方法はありませんか?
0774nobodyさん
2017/01/19(木) 14:50:03.82ID:???0775nobodyさん
2017/01/19(木) 15:27:39.67ID:HOa0/Opmあー、cakePHP使ってる時には確か検索した対象データを
配列に詰めて渡せば、内部的にINに組み込んでくれるっていう便利な機能があったはずなんだけど・・・・
プレーンなphpじゃないか。やっぱりFW使っておいた方が良かったかな。
0776nobodyさん
2017/01/19(木) 16:30:05.73ID:???> あー、cakePHP使ってる時には確か検索した対象データを
> 配列に詰めて渡せば、内部的にINに組み込んでくれるっていう便利な機能があったはずなんだけど・・・・
その程度、自分で実装しろよ
0777nobodyさん
2017/01/19(木) 18:29:18.38ID:???0778nobodyさん
2017/01/19(木) 19:46:23.77ID:???0779nobodyさん
2017/01/19(木) 20:17:56.32ID:???もっと伸びると思ってたんだけどなぁ
0781nobodyさん
2017/01/20(金) 02:52:58.31ID:???if( true )
{
}
じゃないか?
この時点で強そうじゃないのはわかるでしょう。どこの畑で育つとこうなるのか
0782nobodyさん
2017/01/20(金) 03:30:32.80ID:???0784nobodyさん
2017/01/20(金) 11:14:45.43ID:???http://php.net/manual/ja/functions.user-defined.php
phpマニュアルは以下のようになっている
if() {
}
function()
{
}
phpマニュアルに合わせているよ
functionはエディタで見やすくなるって聞いたけど、ifブロックがなぜこうなっているかはよくわからない
0785nobodyさん
2017/01/20(金) 13:07:11.97ID:???if() {
}
なってないでしょ
0787nobodyさん
2017/01/20(金) 14:25:18.33ID:???確認しやすいようにURLまで漬けてんだから見てくれよwwww
あとなってない場所を教えてくれ。修正しとくわ
0788nobodyさん
2017/01/20(金) 14:50:46.62ID:???0789nobodyさん
2017/01/20(金) 15:51:26.02ID:???http://php.net/manual/ja/function.curl-setopt.php
ここにデフォルトはあれあれ通常はこれこれと書いてあるものもあるけど
大半は記述がないのでどうしてくれようかと
0790nobodyさん
2017/01/20(金) 16:02:55.09ID:???コーディングスタイルはカーリーブレースの位置を決めるだけじゃないよ
>>783に対しては安価をつけてないでしょ。
同じ意味で、>>781を書いた。(これはもちろん >>764 の引用。)
0791nobodyさん
2017/01/20(金) 16:21:48.17ID:???0792nobodyさん
2017/01/20(金) 16:44:19.89ID:???0794nobodyさん
2017/01/20(金) 16:58:41.09ID:???0795nobodyさん
2017/01/20(金) 17:19:57.45ID:???・ちょっとググったけど情報が見当たらない
・コードは見られる
なら、コード見るのが最速だよな
0796nobodyさん
2017/01/20(金) 22:02:41.88ID:???が最速
0797nobodyさん
2017/01/21(土) 02:15:46.19ID:???https://github.com/php/php-src/blob/master/ext/curl/interface.c
これ読んでから
https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
この辺を見る
0798nobodyさん
2017/01/21(土) 15:57:48.07ID:3TMSiFF1}
→と書く奴の低能率の高さは異常
if (true)
{
}
→と書く奴には有能な奴が多い。
0799nobodyさん
2017/01/21(土) 16:55:26.91ID:7J/ZXd+Hフラットデザインのほうが見やすいと思う方で
Opeta、Firefox、Chromeで拡張機能のStylish入れてる方は
気が向いたら使ってみてください
https://userstyles.org/styles/137945/flat-php-manuals-php
ソースが汚いので、他の方がカスタマイズしやすいように整理する予定です
0801nobodyさん
2017/01/21(土) 19:01:39.43ID:???オレはワンライナーだな。
0802nobodyさん
2017/01/21(土) 19:12:06.25ID:???読んでて陰鬱な気分になる
0805nobodyさん
2017/01/21(土) 21:42:16.74ID:???0806nobodyさん
2017/01/21(土) 22:35:26.24ID:???これでいいな。
ただ、一言いわせてほしい。
適当でも動く。それがこの言語の唯一の世界最高の部分を忘れないでほしい。
0807nobodyさん
2017/01/21(土) 22:43:09.24ID:???PHPで特筆すべきところはelseifのところじゃないか
elseifでもelse ifでもいい
0808nobodyさん
2017/01/21(土) 22:51:48.20ID:???0809nobodyさん
2017/01/21(土) 23:34:06.55ID:???if 〜〜〜 else
if 〜〜〜 ということだったような
結果生成されるアセンブラ的にジャンプ回数が後者のほうが多い=重いとか
0810nobodyさん
2017/01/22(日) 00:17:50.98ID:???}else{
この書き方でelseが窮屈なのと、
if()だと制御構造じゃなくて関数呼び出しみたいに感じるからだわ。
echo ""
print("");
の違いにも言えることだけど。
0811nobodyさん
2017/01/22(日) 00:18:49.55ID:???}
こう書けるのが一番なんだけどね。
0812nobodyさん
2017/01/22(日) 00:22:15.82ID:???ワンライナーにしよう
0813nobodyさん
2017/01/22(日) 08:01:35.50ID:???0814nobodyさん
2017/01/22(日) 08:24:32.05ID:???とか出来る日は来るのだろうか
0815nobodyさん
2017/01/22(日) 08:49:06.15ID:???それいいよね
あとtrueでもTRUEでも
boolean true扱いなのが良い
Cか何かは大文字だけだったはずで、
define TRUE true
かなにかを毎回入れてたな。めんどくさかった
0816nobodyさん
2017/01/22(日) 12:05:06.34ID:Bh2I+8hl0817nobodyさん
2017/01/22(日) 12:07:04.02ID:Bh2I+8hl{
}
という風な書き方をする奴はいけてる。自己紹介してみた。
0819nobodyさん
2017/01/22(日) 12:52:14.70ID:Bh2I+8hl可読性が高い
0820nobodyさん
2017/01/22(日) 13:02:10.82ID:???0822nobodyさん
2017/01/22(日) 13:08:26.34ID:???>>>とか>>だとEOFとの兼ね合いやビット演算の関係でダメなんだろうけど
:>これじゃダメなの =>や->よりは絶対書きやすいんだが
0823nobodyさん
2017/01/22(日) 13:14:23.08ID:???0824nobodyさん
2017/01/22(日) 15:10:18.11ID:???「POSTやGETのパラーメーターは必ずサニタイズしろ」
「改行、特殊文字のエスケープ、ヌル文字や/../排除」
「ホワイトリスト作って、適切なリクエスト以外ははじけ」
「アクセスできる場所に重要なものを置くな。置くなら.httpdや.htaccessではじけ」
「フォームを作るならワンタイムトークン」
これが原則よな
最低限これだけやってりゃだいたい大丈夫っぽいじゃん
0825nobodyさん
2017/01/22(日) 15:17:46.81ID:???ログイン機能が無ければ楽勝
極論ユーザーからの送信は
「ホワイトリスト作って、適切なリクエスト以外ははじけ」
これだけで何とかなる
でもログイン機能を作ると途端にセキュリティホールだらけになるゾ
楽しいゾ〜^^b
0826nobodyさん
2017/01/22(日) 15:59:59.37ID:???0827nobodyさん
2017/01/22(日) 18:51:35.53ID:???0829nobodyさん
2017/01/22(日) 19:18:37.65ID:???$array = [
MyClass::class => '...'
];
みたいなkeyの指定って大丈夫ですか?
0830nobodyさん
2017/01/22(日) 19:20:35.19ID:???0831nobodyさん
2017/01/22(日) 19:53:38.91ID:???0832nobodyさん
2017/01/22(日) 20:00:57.23ID:???これどうなってるの?
連想配列は分かるけど、staticなプロパティで$外してもエラー起こらないの?
Myclass::classで何でクラス名が返ってるの?
0833nobodyさん
2017/01/22(日) 20:24:38.89ID:???http://php.net/manual/ja/language.oop5.basic.php
0834nobodyさん
2017/01/22(日) 21:03:16.72ID:???ありがとう!
しかもこれclass定義しなくても使えたのね。ビックリ
::class
PHP 5.5 以降では、class キーワードでクラス名の解決ができるようになりました。 ClassName クラスの完全修飾名を文字列で取得するには、 ClassName::class とします。 これは、 名前空間つきのクラスと組み合わせると特に便利です。
0835nobodyさん
2017/01/22(日) 23:46:19.23ID:???0836nobodyさん
2017/01/23(月) 01:10:26.38ID:???0837nobodyさん
2017/01/23(月) 01:58:05.38ID:YCqPaICU0838nobodyさん
2017/01/23(月) 22:57:06.46ID:???だれか修正してちょ
http://php.net/manual/ja/regexp.reference.assertions.php
ここ
> (?<=\d{3}...(?<!999))foo
>は、999 でない 3 桁の数字とさらに 3 文字の後に続く "foo" にマッチするパターンです。
これおかしいなあと思って原文見たけど、やっぱり誤訳だった。
「3桁の数字と、999ではない3文字の後に続く"foo"」が正解ですね。
よろしくお願いしますー
0839nobodyさん
2017/01/23(月) 22:59:20.26ID:???マッチしない例
123999foo
abc123foo
マッチする例
123abcfoo
999abcfoo
こういうことです
よろしくおねがいしますー
0840nobodyさん
2017/01/23(月) 23:01:06.80ID:???メイン記事のフォントを太くしました
そのほうが見やすいと思ったので。
メイン記事のフォントの種類とトップのヘッダの色も変えられるようになりました
0841nobodyさん
2017/01/23(月) 23:44:22.72ID:???右上の edit
anonymous login
修正
保存
これぐらいは出来るようになっておいたほうが良いぞ
0843nobodyさん
2017/01/24(火) 11:57:54.39ID:???「すべてのファイル」ってのクリックすりゃいいのね
0844nobodyさん
2017/01/24(火) 12:19:47.00ID:???0845nobodyさん
2017/01/24(火) 14:07:46.91ID:???今そのバグが再現可能かどうかはわからないけど
0846nobodyさん
2017/01/24(火) 20:37:54.16ID:???0847nobodyさん
2017/01/24(火) 21:50:49.60ID:KZ0F5F3Wそれをネットでリアルタイム配信
仲間という人間に対する盗聴盗撮生ネット配信の会
しかけたカメラの映像
乗っ取っているPCの画像をリアルタイムで生配信中
集団で仲間の私生活を覗いて楽しんでいる
そんなことが今この国では行われています
仄めかしの隠語は
猫 穴 水 仲間
0848nobodyさん
2017/01/25(水) 13:25:36.75ID:???array(1,2,3), array(4,5,6), null, array(7,8,9), null,
array(10,11,12), array(13,14), array(15,16,17), array(18,19,29,2000)
);
これをnullを境にぶった切って始点・終点の目印をつけて
次レスのように変えたい
どうやるのが良いか、先生お願いします
泥臭いけどループごとに1つ前の要素を見て判断させるのが一番なんでしょうか
0849nobodyさん
2017/01/25(水) 13:27:52.99ID:???array(
'start'=>true, 'end'=>false,
'data'=>array(
array(1,2,3),
array(4,5,6)
)
),
array(
'start'=>false, 'end'=>false,
'data'=>array(
array(7,8,9)
)
),
array(
'start'=>false, 'end'=>true,
'data'=>array(
array(10,11,12),
array(13,14),
array(15,16,17),
array(18,19,29,2000)
)
),
);
わざわざ配列に組み直してるのは、互いに統合できない2つ以上の別々のところで
分割したものをもとに処理したいからです
0850nobodyさん
2017/01/25(水) 13:48:15.96ID:???>>849が目的じゃなくて手段なら、SplDoublyLinkedListを使うのがいい。
$list = new SplDoublyLinkedList();
$list->push(['abc', 'def']);
$list->push(['ghi']);
$list->push(['jkl', 'mno', 'pqr']);
print_r($list);
0851nobodyさん
2017/01/25(水) 13:57:58.30ID:TQsts9Pu$result = array(
array(
array(1,2,3),
array(4,5,6)
),
array(
array(7,8,9)
),
array(
array(10,11,12),
array(13,14),
array(15,16,17),
array(18,19,29,2000)
)
);
0852nobodyさん
2017/01/25(水) 14:02:31.89ID:???自分でもアレだとは思うんだけど、元の配列の最初([0])ではじまってる塊か、最後で終わる塊か、
に意味があるので手段じゃなく目的になるます
0853nobodyさん
2017/01/25(水) 15:03:00.65ID:???ちょっと意味がわからないんだが。
> 自分でもアレだとは思うんだけど、元の配列の最初([0])ではじまってる塊か、最後で終わる塊か、
> に意味があるので手段じゃなく目的になるます
目的=元の配列の最初の塊か最後で終わる塊かを知りたい
じゃないのか?
それを実現する手段が>>849のコードじゃないの?
0854nobodyさん
2017/01/25(水) 15:05:21.62ID:???Cはどうすればいい?
というようなことだったら、Bじゃなくて別手段がいいんじゃなないのというお話。
0855nobodyさん
2017/01/25(水) 15:30:59.78ID:???目的は最初に書いたように「nullを境にぶった切って始点・終点の目印をつけ」ることです
852で元の〜〜は手段じゃなく目的だと書いたのは、
始点・終点の目印を省く提案をされた>>850-851の方々に対して、いや必要なんですよ、と返す意図です
始端・終端の把握のためとはいえ、いかにもって感じのフラグ設定はどうかとも思ったのですが、
わかりやすさを優先してフラグ設定として書いてあります
アレだと思う、と書いた意図はこのようなことだったのですが今読み直すと意味不明ですね、すみません
854は申し訳ないけど意味がわかりません
0856nobodyさん
2017/01/25(水) 16:17:04.24ID:???> 泥臭いけどループごとに1つ前の要素を見て判断させる
というのがどういうコードを想像しているのかわからんけど、foreachで回してnullかどうかでアレコレすればいいだけだろ
くだらん質問する暇があったらコード書け
0857nobodyさん
2017/01/25(水) 18:01:04.15ID:???0858nobodyさん
2017/01/25(水) 18:24:52.58ID:???それはそうとして、$hoge->fuga($array)に3つの塊を渡して、fuga()の中で
$array['start'], $array['end']を参照して処理を振り分けようと思ってるなら
それは筋が悪い
0859nobodyさん
2017/01/25(水) 21:45:59.66ID:???白い背景だと目が疲れるという方もいると思うので
黒背景バージョンも作りました
https://userstyles.org/styles/138132/darker-flat-php-manual-php
拡張機能のStylishを導入している方で、需要があればご利用ください
0860nobodyさん
2017/01/25(水) 22:44:31.53ID:???> 目的は最初に書いたように「nullを境にぶった切って始点・終点の目印をつけ」ることです
何かをするために目印をつけるんじゃなくて、目印をつけたら終わりってことなのね。
0861nobodyさん
2017/01/25(水) 23:39:57.48ID:???0862nobodyさん
2017/01/26(木) 00:18:55.89ID:???0863nobodyさん
2017/01/26(木) 00:33:38.12ID:???前の要素を参照するとか意味分からんけど, 別にO(n)でもO(n^2)でも構わんのでしょう?
助言としては作るデータ構造はなるべく汎用データ構造かその拡張にしたほうが便利よ, とだけ
0864nobodyさん
2017/01/26(木) 01:29:38.46ID:???おまえら、アホだな
0865nobodyさん
2017/01/26(木) 01:32:19.82ID:???0867nobodyさん
2017/01/26(木) 12:53:41.57ID:???って感じにしてくれ、今後は
0868nobodyさん
2017/01/26(木) 14:11:35.81ID:UAQktabA0869nobodyさん
2017/01/28(土) 00:36:58.68ID:???(new MyClass)->method()
0870nobodyさん
2017/01/28(土) 00:49:13.21ID:???0871nobodyさん
2017/01/28(土) 10:24:13.32ID:???0872nobodyさん
2017/01/28(土) 11:22:54.14ID:???0873nobodyさん
2017/01/28(土) 15:44:19.19ID:???トレイトとしてメソッド分割してok?
0874nobodyさん
2017/01/29(日) 02:48:03.36ID:???0875nobodyさん
2017/02/01(水) 15:32:36.08ID:???0876nobodyさん
2017/02/01(水) 16:29:08.11ID:???0878nobodyさん
2017/02/01(水) 19:18:55.57ID:???マニュアル読む癖をつけたほうがいい
http://php.net/manual/ja/function.isset.php
isset() は何らかの値が渡された 変数の場合のみ動作します。そうでない場合、パースエラーとなります。 もし 定数 が設定されているかどうかをチェックする場合は、 defined() を使用してください。
注意: これは、関数ではなく 言語構造のため、可変関数 を用いて コールすることはできません。
注意:オブジェクトのアクセス不能なプロパティに対して isset() を使用した場合は、もしオーバーロードメソッド __isset() が宣言されていればそれをコールします。
0879nobodyさん
2017/02/01(水) 19:19:30.82ID:???他の言語もそうなの?
0880nobodyさん
2017/02/01(水) 19:41:06.22ID:???0881nobodyさん
2017/02/03(金) 14:28:22.41ID:???ありがと
マニュアルは目を通したつもりだったんだけど注意のところ見逃してたごめん
可変変数もダメなんだなあ
0882nobodyさん
2017/02/03(金) 15:14:11.12ID:BPtags4A0883nobodyさん
2017/02/03(金) 23:04:39.09ID:???0885nobodyさん
2017/02/03(金) 23:22:23.40ID:???0886nobodyさん
2017/02/03(金) 23:30:45.78ID:???0887nobodyさん
2017/02/03(金) 23:39:02.33ID:???0888nobodyさん
2017/02/04(土) 01:31:34.47ID:Rj9LF3nc嘘つくんじゃねーよ。沖縄県民
0889nobodyさん
2017/02/04(土) 01:34:05.86ID:???0890nobodyさん
2017/02/04(土) 08:46:43.40ID:???日本人が一番嫌がるレッテル貼りは「南朝鮮人」もしくは「在日」。しかしあまりに使いすぎたので効果が薄れてきた
最近基地問題で流行りの「沖縄人」を使ってみたが、リゾート地、朝鮮人の市民団体、中国人の市民団体とイメージが広すぎる
結論を言うと、煽りやレッテル貼りとしては失敗。もう少しイメージが絞られたものにするべき
そういう意味では「南朝鮮人」に勝るものはないと言えるだろう
0891nobodyさん
2017/02/04(土) 09:47:53.23ID:???0892nobodyさん
2017/02/04(土) 11:49:01.40ID:QsE+sxbw0893nobodyさん
2017/02/04(土) 21:14:54.28ID:???[2,1,4,3]
上のような配列順序がバラバラでもtrueを返したいのですが、どのような比較方法があるでしょう
0894nobodyさん
2017/02/04(土) 21:21:25.15ID:???0895nobodyさん
2017/02/04(土) 21:26:02.13ID:???>>894 みたいな回答がすらっとでてくるのは脅威
0896nobodyさん
2017/02/04(土) 21:57:52.05ID:Rj9LF3ncみたいな意味不明な質問が出る事がゆとり教育の弊害
0897nobodyさん
2017/02/04(土) 23:42:29.34ID:???0898nobodyさん
2017/02/04(土) 23:49:40.69ID:???0899nobodyさん
2017/02/05(日) 00:14:30.88ID:jA2houVQ間違いなく、コミュニケーション能力の低さ故に仕様確認で喧嘩になりそう。
なんでプログラマって言語障害者が多いのかな?
0900nobodyさん
2017/02/05(日) 00:17:57.77ID:???・testUnkoMan(接頭辞にtestでキャメル)
・it_unko_man(接頭辞にitでスネーク)
どっちの形式が良いか悩ましいんだけど、ベストプラクティスみたいなの書いてる記事ないかね
0902nobodyさん
2017/02/05(日) 00:20:44.15ID:jA2houVQ0905nobodyさん
2017/02/05(日) 08:44:02.70ID:yhK5jENS共有レンタルサーバー サクラを契約しています
デフォルトで、下記の内容でパーミッションが割り振りされています。
705: /home/username/
そこで、サイトを公開するにあたって、ドメイン名ディレクトリを作る必要があります。
/home/username/www/ドメイン名/
このドメイン名のディレクトリのパーティションを 777 に変更しました
そこで質問なのですが
同じサーバー内の他のユーザが、このドメイン名のディレクトリにアクセスできちゃう なんてことはありますか?
自分の認識では /home/username/ の段階で弾かれると思っています この認識で大丈夫でしょうか。
また ドメイン名ディレクトリを 777 にすることで何かセキュリティ的にまずいことはありますか?
0906nobodyさん
2017/02/05(日) 09:43:44.06ID:JQZvwDcv0907nobodyさん
2017/02/05(日) 11:16:50.78ID:???0908nobodyさん
2017/02/05(日) 11:30:51.61ID:jA2houVQ0909nobodyさん
2017/02/05(日) 20:53:05.34ID:???IQ低いのに偉そうじゃん
俺はパッと見て何言ってるかわかったし>>894もわかったし・・・
0910nobodyさん
2017/02/05(日) 20:55:08.48ID:???配列の操作の関数だけは最初で暗記しようね
0911nobodyさん
2017/02/05(日) 21:01:50.63ID:???似たような関数があったり、使わなくていいものとか多くて困る
0912nobodyさん
2017/02/05(日) 21:53:01.64ID:???暗記しないでもいい、必要なときに必要なビルトイン関数があるか調べればいいだけ
どうせよく使う関数は自然と覚える
0913nobodyさん
2017/02/05(日) 22:01:19.05ID:???関数を組み合わせれば出来る
もっとベターな方法があるなんてのは
知らないから使わなかっただけなんだから気にすんな
0914nobodyさん
2017/02/05(日) 22:21:39.40ID:???0915nobodyさん
2017/02/05(日) 22:53:03.52ID:???array_diffの1番目の引数は数が多い方にしないと、正確な結果がとれないからそこだけ注意。
数多くなければsortしてそれ比較するのも直感的にわかりやすくてありだと思う。
片方の配列の値を1個ずつもう片方の配列にarray_searchかけるなんて手法もある。
最悪計算量はsortするのと同じぐらいだけど1週目でfalse判定も可能。
0916nobodyさん
2017/02/05(日) 22:58:04.19ID:???読点はつけるのに句点はつけないやつ=盛り上げてると思ってる自演キチガイ
0919nobodyさん
2017/02/05(日) 23:11:19.94ID:???0921nobodyさん
2017/02/05(日) 23:15:10.57ID:???なんでもサクッと作れて良い
0922nobodyさん
2017/02/05(日) 23:20:02.68ID:???JavaSsciptかじってればWindowsアプリなんか楽勝だし
Webアプリしか出来ないとか言ってるお前らにも作れるよ
0926nobodyさん
2017/02/05(日) 23:49:29.62ID:???融通がきかず口数少ないコミュ障の典型的なプログラムオタクだなお前wwww
もう寝るしまた遊びに来てやるからせいぜい自演しとけやwwwwww
0927nobodyさん
2017/02/06(月) 00:01:31.34ID:sbN7DgFTマジキチは黙ってろ
0928nobodyさん
2017/02/06(月) 00:41:32.55ID:fRp1AG0N真正キチガイのお前がいっても説得力ないよ。
0929nobodyさん
2017/02/06(月) 11:23:10.10ID:???キーボードショートカットで移動できる拡張機能作ったけど需要ありますかね
上のリンクだけじゃなくて、サイドバーのメニューにも移動できて、
下へ辿っていくこともできます
金が無いのでストアじゃなくgoogle driveでの自主配布になるんですが・・・
(ただ自主配布の信用できない拡張機能はセキュリティ上問題があることが多く・・・)
0930nobodyさん
2017/02/06(月) 11:34:30.15ID:???とりあえず俺は使わないかな・・・
後、検索したらこういうのがあるらしい
http://thesaibase.com/chrome/autopagerize
0931nobodyさん
2017/02/06(月) 11:41:24.51ID:???それだとできないから自分で作ったんで・・・
ま、いいです
0932nobodyさん
2017/02/06(月) 14:17:46.07ID:???>>905
> 同じサーバー内の他のユーザが、このドメイン名のディレクトリにアクセスできちゃう なんてことはありますか?
ある。
> 自分の認識では /home/username/ の段階で弾かれると思っています この認識で大丈夫でしょうか。
間違い。
> また ドメイン名ディレクトリを 777 にすることで何かセキュリティ的にまずいことはありますか?
まずい。
0933nobodyさん
2017/02/06(月) 22:31:50.67ID:???「users/1」のアクセス数をアナリティクスからapiで取得してjavascriptでグラフ化…とか可能ですか?
0934nobodyさん
2017/02/06(月) 22:33:07.98ID:???0935nobodyさん
2017/02/06(月) 22:37:46.12ID:???できるけど、アナリティクスの機能に頼ったほうが良い
自動レポート機能もあるからわざわざapiとか覚えなくても良いよ
0937nobodyさん
2017/02/07(火) 00:40:19.36ID:???0938nobodyさん
2017/02/07(火) 00:43:36.62ID:???そうか、がんばれ
v3でいけるならv3使ったほうが良いぞ。v4はうまく動かなかった。今思えば重かっただけなのかもしれんが
0939nobodyさん
2017/02/07(火) 12:29:03.90ID:LoqCooPa判定したいのですがどう判定すればよいでしょうか?
この要件を満たすWordPressのプラグインがあるので
どうやって判定しているのか気になってます。
0940nobodyさん
2017/02/07(火) 12:41:06.44ID:???テキトーに要素の間に広告入れて、要素間がくっついてたら広告ブロック入ってる
あとはajaxで検知したデータを取得すればok
0941nobodyさん
2017/02/07(火) 14:10:41.31ID:LoqCooPaサンクス!!
そーいう判定をしてるのね。
0942nobodyさん
2017/02/07(火) 16:04:18.38ID:PKNwz2mK1回のprint_r( $array, true )の結果を出力しただけのテキストファイルを、
phpから読み込んで、配列とかに格納してくれる関数とかってあります?
0943nobodyさん
2017/02/07(火) 16:12:27.32ID:???普通はシリアライズするんだがな
0944nobodyさん
2017/02/07(火) 16:23:00.90ID:???0945nobodyさん
2017/02/07(火) 16:23:57.32ID:???さんきゅー今から見る
いやあ後で使う予定じゃなかったから普通に出力して溜め込んでチェックして終わってたんだ
0946nobodyさん
2017/02/07(火) 16:25:24.73ID:???0947nobodyさん
2017/02/07(火) 16:31:45.54ID:???理由は忘れた
0948nobodyさん
2017/02/07(火) 16:51:59.11ID:???パーサ書きたくないと思ってたとこだったので非常に助かった
0949nobodyさん
2017/02/07(火) 21:26:33.39ID:???メーカーとかの詳細情報もいちいち従業員が入力してる…っていうのはさすがに無いか
0950nobodyさん
2017/02/07(火) 21:55:56.79ID:???あれだけ大手ならメーカーからどんどん情報が来ると思う
0951nobodyさん
2017/02/07(火) 22:20:56.61ID:???価格comとはwin-winだしそういうデータを提供してもらってんじゃね
そういうコネがないところは人力だと思うけど
0952nobodyさん
2017/02/08(水) 19:44:36.27ID:???となってるけど、なんでそうなったのか歴史的経緯を知りたい
0953nobodyさん
2017/02/08(水) 19:50:15.04ID:???0954nobodyさん
2017/02/08(水) 20:22:25.81ID:???なんで廃止したのかの理由が知りたい
$_SESSION直接いじるのと関数経由するのとで なんか違うの?
0955nobodyさん
2017/02/08(水) 20:33:30.90ID:???1. 読み込む前にそのファイルが存在するか読み込み可能か調べる
2. @でエラー制御をする
3. set_error_handlerでエラーをErrorExceptionに投げてcatchブロックで対応する
2と3はエラーになる可能性承知でって感じですが
毎度色々エラーになるの考慮して実装してたら大変だしコード長くなるので
2.3もありかなと思うのですがどうでしょう?
0956nobodyさん
2017/02/08(水) 20:38:30.28ID:???それ除外で
0957nobodyさん
2017/02/08(水) 20:50:54.34ID:???歴史的経緯ってどうやって調べるんだろうね、俺も知りたい
ソースの見方までは分かるんだけどコメントってどこに書いてるんだろう
0958nobodyさん
2017/02/08(水) 20:54:05.08ID:???> session_register() は、その変数名のグローバル変数を現在のセッションに登録します。
0961nobodyさん
2017/02/09(木) 18:43:39.42ID:???ブラウザから送ってきたHTTPリクエストヘッダを表示して接続を切るっていうコードを書いたんですが
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock, '127.0.0.1', 80);
socket_listen($sock, 5);
while ($con = socket_accept($sock)) {
echo socket_read($con, 2048);
socket_close($con);
}
これってコード間違ってます?
>echo socket_read($con, 2048);
この部分がいっぱい表示されてしまいます
マニュアルはソケットの仕様を知ってる人向けの簡素な説明でよくわからなくて
0964nobodyさん
2017/02/10(金) 10:56:01.73ID:???(new Class)->method()
みたいな小技集ないのかね
0965nobodyさん
2017/02/10(金) 11:20:52.49ID:???0966nobodyさん
2017/02/10(金) 13:52:39.73ID:???何をしてもsocket_close($con)に達すると
echoした文字列が複数回表示されます
数からしておそらく\r\nの数分表示されてる気がします
0968nobodyさん
2017/02/10(金) 16:06:20.73ID:???$conで接続したクライアントに対して
こちらがsocket_closeするまでデータ来るのを待ってる感じだと思うのですが
socket_readで長さみて一定の長さまできたらsocket_closeしても
その一定の長さまで切り詰めた文字列が複数回表示されるだけです
0969nobodyさん
2017/02/10(金) 16:55:17.09ID:???試しにちゃんと応答してからsocket_closeしてみましたが
こちらがちゃんと応答すれば正常な動作になり
コンソールに1度だけ表示されるようになりました
うーんよくわからない・・・
0970nobodyさん
2017/02/10(金) 17:01:03.60ID:???一応コードです
while ($con = socket_accept($sock)) {
echo socket_read($con, 2048);
socket_write($con, $res = "HTTP/1.1 200 OK\r\n\r\n", strlen($res));
socket_close($con);
}
0971nobodyさん
2017/02/10(金) 20:22:12.24ID:???0972nobodyさん
2017/02/10(金) 21:37:46.81ID:???while (true) {
$buf = socket_read($con, 2048);
if (strlen(trim($buf)) > 0) echo $buf; break;
}
socket_close($con);
}
>>971
こういうことでないならば
すみませんがコードで示していただけますか?
0973nobodyさん
2017/02/10(金) 21:40:27.10ID:ajYu3lk80974nobodyさん
2017/02/10(金) 22:20:54.93ID:???0975nobodyさん
2017/02/10(金) 22:51:48.16ID:ajYu3lk8例えば、 hogeword.com/search_word=さくらんぼ
といったアクセスを想定して、その検索ワードをDBに保存しています。
すると、↓の様な不自然な検索が行われている様です。
これって攻撃を受けてますか?
最悪サイト自体は個人情報は何もないのですが、、、
999999.9 /**/uNiOn/**/aLl /**/sElEcT 0x393133353134353632312e39--
999999.9) /**/uNiOn/**/aLl /**/sElEcT 0x393133353134353632312e39,0x393133353134353632322e39 and(0=0
0976nobodyさん
2017/02/11(土) 00:35:41.84ID:???文字列を連結して、SQL文を作っていれば、やられる。
相手は「;何とかかんとか;」とSQL文をつなげてくる
0979nobodyさん
2017/02/11(土) 06:36:00.12ID:???わざととは何がですか?
外側のループでbreakしろってことですか?
それはサーバが止まるってことなのでだめです
0980nobodyさん
2017/02/11(土) 06:57:28.29ID:???ブラウザに応答しない限りはいっぱいechoされます
ひょっとしたらブラウザがリクエスト再送してるのかもしれませんね
0981nobodyさん
2017/02/11(土) 07:03:14.01ID:???すみませんお騒がせしました
応答せずsocket_closeしたらFirefoxの場合10回ぐらい再送してるようです
ヘッダの数とたまたま同じぐらいだったので錯覚していました
ちゃんと別のブラウザでも確かめるべきでした
0982nobodyさん
2017/02/11(土) 08:52:47.81ID:???0983nobodyさん
2017/02/12(日) 11:46:10.30ID:???if($baka=="baka"){$aho="aho";}else{$aho="tonma";}
もしかしてPHPでは"は'にしないとダメなんですか?
0984nobodyさん
2017/02/12(日) 11:58:18.02ID:???0986nobodyさん
2017/02/12(日) 13:12:32.94ID:???今モバイルのエンジニアなんですが、バックエンドも自分でやりたいので
ちょくちょくPHP使い始めたのですが、皆さんは普段どういった開発環境でコードを書いてますか?
昔はZendFrameworkにSmartyを使ってました。
私がやりたいのはHerokuのpostgreに保存を出し入れ
JSONで吐き出すぐらいなんですが、とりあえず
Git,PHPUnit,DBUnit,idiormを使ってます。
個人的にテスト回りがさっぱりでして
皆さんちょっとしたコードを書くときの定番ライブラリ教えて頂けると助かります。
0987nobodyさん
2017/02/12(日) 13:57:51.85ID:???後は自前のライブラリ
0988nobodyさん
2017/02/12(日) 14:53:57.26ID:???vimでいじってたんですが、phpstormとAtomで迷ってます。
Android Studioとそっくりなんで使いやすかったですが
高くてビビりましたw
0989nobodyさん
2017/02/12(日) 14:58:03.83ID:???高いけどそれだけのものがあるんだよなぁ
atomはPCか他のアプリとの相性が悪くて、すげー重かったわ
0990nobodyさん
2017/02/12(日) 15:04:08.30ID:???そうですね。AndroidStudioが無料だったので悩んじゃいます。
見た目や性能も同じなんですよね。
何もいじらなくても高性能なのが素晴らしいです。
Atomはvimとにてプラグインで拡張していく感じで
デフォルトでは使い物にならないって感じです。
0991nobodyさん
2017/02/12(日) 23:51:03.86ID:???他にいいのあるから探しなよ。
金もかからず、かなりいイイ感じで使えるのがあるから。
0992nobodyさん
2017/02/13(月) 00:09:57.57ID:???今どうなってんのかは知らんけど
0993nobodyさん
2017/02/13(月) 01:08:22.95ID:???0994nobodyさん
2017/02/13(月) 12:37:51.45ID:???次スレはこちらです
vimはプラグイン導入がめんどくさいよね
0995975
2017/02/13(月) 15:56:53.50ID:33fWrUffどうもSQLインジェクションをやろうとしている様なのですが
何か良い防御コードはありませんか?
0996nobodyさん
2017/02/13(月) 15:59:00.22ID:???0999nobodyさん
2017/02/13(月) 16:58:45.51ID:33fWrUff高いからNG
1000nobodyさん
2017/02/13(月) 17:24:37.19ID:???対策できてるなら心配する必要はないし
変なリクエストが来るようなら無視するか弾くしかないだろ
つうかスレチな話題ばっかだな
次スレじゃPHPの話題頼むよ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
life time: 118日 19時間 40分 25秒
10021002
Over 1000Thread運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。