[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 12/03 04:20 / Filesize : 272 KB / Number-of Response : 1009
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【PHP】下らねぇ質問はここに書き込みやがれ 5



1 名前:デフォルトの名無しさん mailto:sage [2016/05/11(水) 21:46:50.27 ID:e/4BOK4y.net]
PHPに関する下らない質問用避難スレです。
まず読むこと【PHPマニュアル】
www.php.net/manual/ja/

前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 4 [無断転載禁止]©2ch.net
echo.2ch.net/test/read.cgi/tech/1457792733/
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

669 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:30:39.02 ID:rc3AwP02.net]
>>661
DBならそういう心配しなくていいと思ってるからお前禿げてるんだろ?

670 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:34:32.72 ID:vIdecit0.net]
>>659
オープンと無ければ作成は同時にできる。
そこで取得したハンドルを flock すれば何の問題も無い。

でも、ロックファイルと本当に読みたいファイルは分けておくと何かといいと思う。
ロック方式を変える場合とか、データファイルの読み書きに fread じゃなく fire_get_contents とか include とか使いたいとか、
いろいろと融通が利くようになるから。
一度やれば面倒なんてことはないから、たったそれだけのために DB に走るのはまだ早い。

671 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:40:53.02 ID:vIdecit0.net]
たったこれだけ。

$lock = fopen('.lock', 'a');
flock($lock, LOCK_EX);

<排他されたコード>

fclose($lock);

排他されたコードとして、データファイル読んで操作して更新する処理を書けばいい。
更新の仕方を工夫すると、共有ロックと排他ロックを使い分けて同時アクセス時のパフォーマンスも上げられる。

672 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:02:26.63 ID:U0YLx5iK.net]
>>666
DBはそういうこといちいち考えなくても大丈夫な仕組みがいっぱいあるんだぬー
そんな事もわからないからおまえは666とか不吉な数字なんだぬー
おまえみたいなとんちきはオジー・オズボーンと一緒に田舎のババアから十字架持って追いかけられるといいんだぬー
アホが治るぬー

673 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:05:21.79 ID:U0YLx5iK.net]
>>668

> fire_get_contents とか

あうあうあうあうあうあうあうあうあう…

やばいよやばいよやばいよ… いろいろやばいよ…

674 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:06:01.45 ID:rc3AwP02.net]
>>669
その大丈夫な仕組みが>>668みたいなコードなわけだけど
DBとファイルでやってることが根本的に違うわけでもなしに
言ってることもキチガイじみてるし病院いったほうがいいよ^^;;

675 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:06:40.55 ID:U0YLx5iK.net]
やばくないか… 酔っ払ってるから何言いたいのかよーわからん
後で読み返す。

676 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:07:43.11 ID:U0YLx5iK.net]
>>671
だったらおまえはずっとファイル操作でしこしこやってたらいいんだぬー

677 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:09:52.19 ID:vIdecit0.net]
>>670
燃えそうw



678 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:10:00.47 ID:rc3AwP02.net]
酔っ払ってるを言い訳にするぐらいなら書くなよ
だからお前のコードはデッドロックばっかおこしてるんだぜ

679 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:14:29.55 ID:U0YLx5iK.net]
>>675
デッドロックなんて気にしてるってことがおまえがアホみたいな事やってる証拠なんだぬー
俺様はそんなしんぱいしなくてもいいようにシステムを作るので全く無縁の話なんだぬー

680 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:16:52.88 ID:U0YLx5iK.net]
>>667がどんなアホかと思ったけど、よく読んでみたら
ファイルをロックしていても読める関数使えって事らしいから、
本物のアホではないみたいだぬー

ただ、やってることが旧時代的でアホらしくてやってられないんでぬー

681 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:19:18.72 ID:vIdecit0.net]
>>676
排他する対象がひとつの DB の内容だけにとどまっていれば適当にやってもそうそうデッドロックしないかもしれないけどな。
余所の DB やシステムと連携したり限られたデバイスやリソースを共有するとか、排他は奥が深いぞ。

682 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:24:19.64 ID:U0YLx5iK.net]
>>678
その事と本件が何の関係があるんだぬー
ファイルロックしてれば他所のシステムと連携した場合でも簡単に排他できるのかぬー?
よっぽど大変になるのが目にみえてるんだぬー

おまえが物事の深さを語るのは108年早いんだぬー

683 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:25:50.01 ID:vIdecit0.net]
>>679
ファイルロックがあれば基本的になんでも排他できるだろ。
セマフォとか知らないか?
あれも実装によってはファイルロックだぞ。

684 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:30:10.44 ID:vIdecit0.net]
なんでもは言いすぎだったな。
でもいろんな応用をするための基礎だからやっとけって。

685 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:36:56.47 ID:U0YLx5iK.net]
>>680
「なんでも排他できるだろ」っておまえはアホかぬ?
排他する事だけがシステムの目的みたいになってるアホ発言だぬー
そんなにはいたいなら医者行けばいいぬー

ファイルで取り回すよりDB使ったほうがやれることがはるかに膨大なんだぬー
排他なんてそのうちのほんの1メリットだぬー
だったらDB使っちゃったほうがお得だぬー

とか言ってると、「DB使えない場合はどうすんだ」とか言うアホがでてくるんだぬー
だから今のうちに言っとくぬー

一般的でないケースの事なんか知るかハゲ!

686 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:38:31.55 ID:U0YLx5iK.net]
>基礎だからやっとけって。

DBは今時常識だからやっとけって。

687 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:41:00.34 ID:c3/xDSGs.net]
>>668
if (flock($lock, LOCK_EX)) { ... }
という風に失敗した場合の分岐を用意しよう
また新しいPHP(5.3.2以降)では手動でflock($lock, LOCK_UN)する必要があるらしい



688 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:42:44.74 ID:vIdecit0.net]
>>683
DB 使うなとは言ってないぞ。
手持ちのカードが多ければ好きに使い分けられるだろ。
お前はアクセスカウンター作るにもDB使うんだろうが、その選択しかできないのであれば潰しがきかないぞ。

689 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:43:06.58 ID:U0YLx5iK.net]
ほら、なんかいろいろとめんどくさい情報がくっついてきたぬー

おまえら、人生楽しそうだぬー

690 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:45:16.50 ID:U0YLx5iK.net]
>>685
ファイル操作にこだわってるお前のほうが潰しきかないから他人の心配してる暇ないんじゃないかぬー?

691 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:46:22.53 ID:vIdecit0.net]
>>684
LOCK_UN 必須の件は初耳だったけど、それ本当?
この辺の機能は OS の機能をそのまま使ってて、そんなに差がでる部分じゃないというか、ハンドル閉じてロックだけ残るってどういう事情だよって感じだが。
ハンドルを複製してるケースとかかな?

692 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:49:14.38 ID:U0YLx5iK.net]
>>688
おまえが調べてQiitaにでもまとめといてくれぬ。
必要になった時に見てやるぬ。
それまでは俺様は優雅にDB使ってるぬ。

693 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:53:03.18 ID:vIdecit0.net]
>>684
5.3.3 で試したけど、少なくとも >>668 の使い方では LOCK_UN の明示は要らないね。

694 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:55:02.40 ID:c3/xDSGs.net]
>>688
ついさっき確認したら変更履歴にそう書いてあったからであって、俺は検証してないよ
php.net/manual/ja/function.flock.php

どうなるのか想像でしかないが、解放しないと2度目からFALSE返すとかじゃね

695 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:57:05.92 ID:U0YLx5iK.net]
圧倒的な人柱感

696 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:58:16.03 ID:U0YLx5iK.net]
そういう、ファイルシステムの影響モロに受けそうな処理を平気でやる人たちって、
結局心が強いんだろうな。

オレはチキンだから無理だぬー

697 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:18:34.99 ID:a1oB3JFl.net]
まーた馬鹿が暴れてるのかー



698 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:24:21.01 ID:U0YLx5iK.net]
まーた馬鹿が戯言だけホザくのかー

699 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:29:21.37 ID:U0YLx5iK.net]
本当に、まともな思考力のある人間はいないのかねぇ…

700 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:39:42.63 ID:a1oB3JFl.net]
え?自分がまともな思考力もってると思ってんの?

701 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:46:49.83 ID:7IE41uX0.net]
>>668
ロック用ファイルを別に用意するんですね
ありがとうございます
ちなみにやたらdbを推してる狂人がいますが
今書いてるのはなるべく他のプログラムを使いたくないものなので、
今のところdbは考えていません

702 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:54:08.42 ID:U0YLx5iK.net]
>>697
自己紹介乙

このスレの参加者は自己紹介だけは得意だ

703 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:55:15.54 ID:U0YLx5iK.net]
>>698
なんか修行でもしてるんだ。学生は暇でいいね。

704 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:57:12.43 ID:U0YLx5iK.net]
PHPerはとにかく何でもPHPでやりたがるというのは本当だな。
脳みそが崩壊してる。

705 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 15:36:01.25 ID:a1oB3JFl.net]
ノウミソ崩壊って自己紹介はやめろって!

706 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 15:43:02.88 ID:U0YLx5iK.net]
オウムさん餌でもついばんででください

707 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 15:45:49.48 ID:U0YLx5iK.net]
人間、いないねぇ…



708 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 15:59:10.40 ID:a1oB3JFl.net]
低収入オッサンやめろよ
ここはストレス発散のはけ口じゃないんだよ!!!

709 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 16:05:51.89 ID:U0YLx5iK.net]
うん、ここはお前らの低能をなぐさめあう場所でもない。わかってるだろ?

710 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 16:06:40.12 ID:U0YLx5iK.net]
あと、さすがに酔いがまわってきたから突然落ちるよ。

711 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 16:08:50.21 ID:a1oB3JFl.net]
低能低能いうけどお前レベル低いからな(笑)自覚しろよ!!!

712 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 16:11:06.58 ID:ZgIjL8Zc.net]
最初flock絡みでデッドロックやらかした時は
スクリプト止まらないしエラー吐かないしで何が悪いのか全然わからなくて立ち往生状態だった

>>698
serializeほど楽じゃないが別途db用デーモンを起動させとかなくていいsqliteは便利
そういや手軽なdbの話じゃ最近berkeley dbの名前を全然見ないな…なんでだ

713 名前:デフォルトの名無しさん [2016/06/11(土) 16:11:26.13 ID:BbMy6dfc.net]
PHP使ってるのなんてみんな底辺だから仲良くしようや

714 名前:668 mailto:sage [2016/06/11(土) 16:16:02.35 ID:0LrYNLoc.net]
>>698
>>684 の情報により、fclose の前に flock($lock, LOCK_UN) を入れてね。
あと flock 使った排他で重要なところは、処理が終わってもロックファイルを消しちゃダメということ。
ロックファイルの存在確認式なんかだと処理が終わったらロックファイルを消す必要があるけど、flock式はそうじゃない。
同一のファイル(パスではなく inode)をオープンすることでロックをかけるから、消して作り直しても同じファイルにはならずその間でのロックがかからない。

あと、NFS 領域に対しては flock が使えない場合があるから、それは制限事項として覚えておいて。

といった具合に説明すると長くなるけど、コードはシンプルだから覚えておいて損は無いよ。

715 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 16:24:29.25 ID:ZgIjL8Zc.net]
>>691
いや違う、falseを返すとかじゃなくてデッドロックを引き起こす
延々とロック取得待ち状態になってkillしなきゃいけなくなる

716 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:09:00.14 ID:U0YLx5iK.net]
お前ら、人生楽しそうだな。
俺は頭痛い…

717 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:12:41.27 ID:U0YLx5iK.net]
おっかしいな… なんでこんなに頭いたいんだ?



718 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 21:39:16.03 ID:vIdecit0.net]
>>712
マニュアルに書いてあることにケチつける気は全く無いんだけど、
Linux の 5.3.3 と Windows7 の 5.6.22 で実験しても、LOCK_UN が必要だと思われる挙動が認められない。
fclose だけでロックは外れるし、同プロセス内で同じハンドルに対してアンロックも fclose もしないまま 2重にロックを掛けてもデッドロックしない。
どういうケースで LOCK_UN の明示が必要なんだろう?

実験コードはこれ。

$lock = fopen('lock','a');
echo "start\n";
if(!flock($lock, LOCK_EX)) {
echo "fail 1\n";
exit(1);
}
echo "locked 1\n"; // ロック成功

if(!flock($lock, LOCK_EX)) {
echo "fail 2\n";
exit(1);
}
echo "locked 2\n"; // 二重ロックでもデッドロックしていない

fgets(STDIN); // ENTER が押されるまで待つ

fclose($lock); // アンロックせずクローズ
print "unlocked\n";

sleep(5); // プロセスの終了を引き延ばす(ロック残り状態があるならそれを維持する)
print "end\n";

719 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 22:15:24.50 ID:ZgIjL8Zc.net]
>>715
すまんが712は単純に「LOCK_EXされたファイルへのLOCK_EX」の挙動を書いただけ
flockの仕様から同一プロセスからの多重flockは後に指定したLOCK_**に上書きされるだけ、なのも確実(winは知らん)

で、記憶掘り返しながらこっちでも試してみたけど>>715の言うとおり
同一プロセス内でも、別プロセスでも、fopen->flock->fclose->fopen->flock でデッドロックしなかった
flock($fh, LOCK_EX)絡みでデッドロックになってハマった記憶が確かにあるんだがなあ…しかも1プロセスで
昔書いたソースとメモを読んでるけど該当箇所が見つからん

720 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 22:25:33.55 ID:U0YLx5iK.net]
具合悪い… 吐きそう…

721 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 22:43:11.56 ID:vIdecit0.net]
>>716
アンロックも fclose もせずに fopen からやり直したに一票。

$lock = fopen('lock','a');
flock($lock, LOCK_EX);
echo "locked 1\n";

$lock = fopen('lock','a');
flock($lock, LOCK_EX);
echo "locked 2\n";

それは置いといて、仕様変更の事情が気になったので PHP のソースを読み始めた。
読んで分かるかは分からんけど、とりあえずソースを flock で grep したところから辿ってる。

722 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 22:53:40.15 ID:U0YLx5iK.net]
排他的に内容更新したいだけなのにお前ら何やってんだよ…

723 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 23:21:54.93 ID:u5pRtWh9.net]
僕の友達に「ゲームプログラムを兄から頼まれてよくやってるー」などと言ってる奴がいます。そいつにどんな言語使ってんの?とかきいてもいろんな言語使ってるから意識したことないわwとか誤魔化したり、c言語は難しくてよくわからんとか言っているのです。
なんか嘘くさいんで掘り下げてやろうと考えてます。

もしゲームプログラムするならこれは知ってて当然みたいな知識あったらそいつに仕掛けて反応見てみたいので教えてください。

724 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 23:27:06.01 ID:u5pRtWh9.net]
各場所間違えてました
ごめんなさい

725 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 23:36:10.98 ID:ZgIjL8Zc.net]
>>718
そんな感じがしてきた。(だが718のコードだと$lockを上書きしちゃってるからデッドロックは起きない)

同一のファイルを二重に開いて別々にファイルハンドルを保持し別々にflockしたとき
片方だけでもfcloseしたら両方LOCK_UNされることの対策か、とも思ったけど
実際に下記を手元のwin-5.2.0とlinux-5.1.6とlinux-5.6.8で試してみたら、どうも違うようだ
$file = './flock.lock';
$fh1 = fopen($file, 'a'); flock($fh1, LOCK_SH);
$fh2 = fopen($file, 'a'); flock($fh2, LOCK_SH);
fclose($fh1);
$fh3 = fopen($file, 'a'); flock($fh3, LOCK_EX); // いずれもここでデッドロックが発生

わからん

726 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 23:46:33.60 ID:vIdecit0.net]
>>722
上書きしてるから起こるんだよ、オブジェクトみたいに変数上書きしたら参照が無くなった方が勝手に破棄されるんじゃないから。
でも本質は、一つのハンドルには何度繰り返しロックをしてもスルーされるけど、一つのファイルでも別個の 2つのハンドルを取得しちゃった場合、
その両方にロックを掛けたらそりゃ 2度目の方はブロックされるという点。

意図せずこのバグを引き起こすケースとしてはこんな感じじゃね。

$lock = fopen('lock','a');
flock($lock, LOCK_EX);

<なんかの処理、でもうっかり $lock の値を壊してしまう>

fclose($lock); // ロックを解放したつもりだけど、$lock が正しいハンドルを示していないから失敗、ハンドルリーク

$lock = fopen('lock','a');
flock($lock, LOCK_EX); // 二度目のロック、同じファイルだけどさっきのロック取得済みのハンドルとは別ハンドルになるからロックを取得できない
:

727 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 23:50:10.54 ID:vIdecit0.net]
>>723
ごめんうそ言った。
ハンドルを上書きしたらクローズされてるみたいね?
なので >>723 は忘れて。



728 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 23:57:31.23 ID:ZgIjL8Zc.net]
>>724
気にすんな
しかしこうなると真面目に手動LOCK_UNの意味・有効な場面がわからなくなってくるな
というかfclose/flock仕様変更の前後の差異がわからん

729 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 04:10:30.87 ID:p2hTIoUv.net]
懐かしい話を掘り起こしているようで
tumblr.tokumaru.org/post/37141017115/

730 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 04:35:52.53 ID:jxNAYoxL.net]
オブジェクト指向はアクセス指定子や抽象クラスなどで
やってはいけないことや守るべきことをコードの中で示すことができますが
フォークすることによって起きる事態に対しては無力だと思います
たとえば、プロセスidを入れ込んだファイルパスは、
その都度getmypidを呼んで生成しなければいけない、
というようなことを、コードのシンタックスによって示すことは出来ませんよね
コードのどこかでフォークしているということに気付かずに
いちいち毎回作り直さずにキャッシュすればいい、と思うことはありそうです
いい方法はないでしょうか?

731 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 07:55:29.22 ID:4xmbllsr.net]
>>726
参考になった。ありがとう。
でもこれ、system関数のバグなんじゃね?
内部で fork した後、親プロセスから継承したハンドルを閉じてないんじゃ?
そこのデッドロックのサンプルだと、デッドロック中はロックファイルの lsof は子プロセス側に 2件ある。
5.3.2 での改修ポイントが間違ってたんじゃないのかなぁ…
少なくとも OS のシステムコールレベルではハンドルを閉じればロックも否応なく外れちゃうし、これは Unix系も Windows も一緒なはずだが。

732 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 08:18:59.24 ID:4xmbllsr.net]
検証した。
やっぱ子プロセスが継承したハンドル持ちっぱなしだよ。
当然マルチプロセスの処理を書く時にはそれを意図的に利用したいことはあるけど、PHP だったら内部で exec系を行う前にはスクリプトで開いたハンドルは全部クローズするべきなんじゃないのかね。
ただ現象が起こる理由は分かったから、それに基づけば明示的なアンロックが無くても影響があるところはほとんど無さそうだと判断するけどな。

733 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 13:06:26.58 ID:0JopogCG.net]
そもそもflockシステムコールはもともとマニュアルに書いてあるように

flock() によって作られるロックは、 オープンファイル記述 (open file description) (open(2) 参照) と
関連付けられる。 したがって、ファイルディスクリプターの複製 (fork(2) や dup(2) などにより作成
される) は同じロックを参照し、 これらのファイルディスクリプターのどれを使っても このロックを
変更したり解放したりできる。 また、ロックの解放は、 上記の複数のファイルディスクリプターの
いずれかに対して 明示的に LOCK_UN 操作を指示した場合か、これらのファイルディスクリプターが
すべて 閉じられた場合に行われる

というもので、phpのfclose関数の中でわざわざLOCK_UNしてたのは余計なお世話
で本来の動作を阻害していたから5.3.2でやめたって理解でいいんだろうか。

734 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 13:26:47.31 ID:4xmbllsr.net]
>>730
うん、よくよく考えると
> というもので、phpのfclose関数の中でわざわざLOCK_UNしてたのは余計なお世話
ということが正しいと思う。
元々マルチプロセスなプログラミングで自動で複製されるファイルディスクリプタの扱いはプログラマが意識する必要があって、複製の後始末をせずにロックが残ることがあるのはそもそも設計ミス。
こういうことをフォローするために PHP では fclose でのついでに自動でアンロックが走るようにしていたけど、そうると親子プロセスの一方で不要になったディスクリプタを閉じただけでロックまで外れちゃうという問題を引き起こす。
だったらリソースの管理はやっぱりプログラマに任せるって判断が妥当なんだろう。
互換性の点でも、そもそもディスクリプタの複製が行われるケース(恐らく PHP では fork を伴う何か)と関係無ければ fclose だけでロックは解放されるから問題は無いし、
複製が行われるような処理ではアンロックの必要性についてはプログラマが意識していてしかるべきだから、
結局のところ fclose にアンロックを合わせこむのをやめるのが正解だな。
ただ system をはじめとするシェル系の関数は気軽に使いがちだから、子プロセスのハングアップでロック残りが起こる可能性は身近かもしれないね。
これまでアンロックせず動いてたスクリプトを無理やり改修する必要までは無いけど、これから書くならアンロックは明示しとけってことだな。

久々に勉強になった。

735 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 14:20:54.54 ID:QWuFqOwW.net]
>久々に勉強になった。

使う機会あるといいけどな。

736 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 14:39:38.95 ID:Y/PMYUAu.net]
別に子プロがハングしようとLOCK_UNには関係ないんじゃないか
execしたphp以外のプロセスがロックしててもphpのロックには関係ないし
どんなプロセスでもプロセスが終わればロック解放されるんだから

737 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 15:10:09.70 ID:3j0TR14y.net]
>>733
ハングして終了しなければ殺すまでロックしっぱなしだろ



738 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 15:21:03.49 ID:3j0TR14y.net]
説明が足りないか。
PHPでファイルを開きロックをした状態で、例えば system で別プロセスを起動したとする。
このプロセスは、PHP で開いていたファイルディスクリプタの複製を持つ。
ディスクリプタが複製されても取得しているロックはひとつで、このディスクリプタのいずれかでアンロックすればロックは解放される。
誰もアンロックしなかった場合、そのロックに紐付く全てのディスクリプタが閉じられた場合に解放する。
つまりディスクリプタの複製を持った子プロセスがそれを閉じないままハングした場合、親プロセスがディスクリプタを閉じてもロックは解放されず、子プロセスを殺すまでロックされたままになる。
ちなみに子プロセスがPHPかどうかは関係無い。

739 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 15:29:21.61 ID:jxNAYoxL.net]
ファイルパスを正規化するにはどうすればいいですか?
realpathで出来ると思っていたのですが
まだファイルが存在しない時点では結果がfalseになるので駄目でした

740 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 16:09:50.68 ID:hcrF9o1u.net]
>>736
標準関数にはない。
Packagistには恐らくあるだろう。

741 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 17:23:27.51 ID:jxNAYoxL.net]
>>737
ありがとうございます
packagistというところから辿ったらありました
https://github.com/perchten/php-truepath/blob/master/src/truepath.php

742 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 17:28:53.54 ID:pWHiM9s7.net]
とりあえず話が収束したらまとめとして残してくれる?
ここまで議論しといて残さなかったらPHPerとして恥だし

743 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 17:51:52.67 ID:SdG9GRKe.net]
他力本願こそPHPerとして恥だぞ

744 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 18:52:27.13 ID:Y/PMYUAu.net]
>>734-735
あるファイルをphpで有効にLOCK_EXしても別プロセスで起動したviには何も影響しないと認識していたが?

だからphp以外をexecしてロックが生じてもphpの記述には関係がない=fclose前のLOCK_UNに関係ない
ある.php内であるいはexecで呼び出した.phpでファイルロックが起きてもmax_execution_timeの縛りで強制終了すればロックは解ける
ゆえに「ロック残り」とやらで掴みっぱなしになることはそうそうない、そう認識していたんだが

745 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 18:52:38.31 ID:QKWa7och.net]
で、お前らぴーえいちぱーって読んでんの?

746 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 19:03:36.38 ID:4xmbllsr.net]
>>741
flock によるロックって別のプロセスからのファイルアクセスを禁止するわけじゃないから。
同時にロックを取得できないだけであり、それによって「ロックを取得しようとするプロセス同士」を排他するわけ。
ロックを取得しようとしないプロセスはロックされたファイルであろうとアクセスし放題だよ、例えば vi とかね。
Windows では他のプロセスからのファイルアクセスを禁止することもできるけどな。

747 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 19:06:30.53 ID:QKWa7och.net]
ピーチクパーチク、ピーエイチパーチク
ヨー、チェケラッチョー



748 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 19:15:10.09 ID:Y/PMYUAu.net]
>>743
あれviってflock使ってなかったっけ?まあいいや他のなんでもいいんだが
本旨はphpにおける明示的flock($lock,LOCK_UN)の必要性だろう、それが他プロセスとどう関わるんだ
結局どういうときにLOCK_UNしないと「ロック残り」が起こるんだ

749 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 19:35:01.71 ID:4xmbllsr.net]
>>745
>>726 の実験コードで再現できるよ。
デッドロックのメカニズムはこう。

まず a.php でファイルを開き、ロックする。
そして system で b.php を開く(別に PHP である必要は無い)。
この段階で b.php は、a.php が開いていたファイルの fd(ファイルディスクリプタ)の複製を継承する。
b.php は継承した fd とは別に自前でファイルを開き、ロックしようとする。
ロック済みのファイルに対してロックしようとするから、これはブロックする。
この間 a.php は処理が進み、fclose が走る(*1)。
プログラマーの意図としてはここでロックも自動的に解放されると思っているが、このロックを共有する fd を b.php が閉じずに持っているので、まだロックは解放されない。
a.php は終了するがロックは解放されないので、b.php のブロックが解けることも無くデッドロックする。

このスクリプトをデッドロックさせずに走らせるためには、*1 の前に LOCK_UN するのが一案(PHP においては唯一の手段)。
これにより b.php は継承した fd を開かれたまま持ってはいるが(ある種のリソースリーク状態)、ロックは a.php により解放されるので、b.php が自分で開いた fd に対するロックを取得でき、処理が進行する。
もう一案は、PHP では実現不能だと思うけど、b.php が走り出した直後に継承した fd を閉じること。
PHP からは継承した fd の存在が見えないし、fd を知ることができたところで何もできないから詰むけど、fd を操作できる処理系ではそれが可能だし、むしろ常套手段。

ようは、何かのファイルをロックしたまま子プロセスを立ち上げ、その子プロセスが同じファイルのロックを取得しようとするかなり限定されたケースでは LOCK_UN が必要。

750 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 19:43:46.46 ID:4xmbllsr.net]
ついでにもう少し、>>746 のようなケースであれば、5.3.2 よりも前のように flose で LOCK_UN してくれりゃいいじゃんと思うかもしれない。
多分 PHP の設計者もそう思って、そうしていたんだろう。
でも pcntl_fork なんてことができるようになると、それじゃ問題が出るケースにぶち当たる。

通常 fork してもやっぱり親が持っていた fd は子プロセスに継承されるし、pcntl_fork に関して言えば継承された fd はファイルハンドルの形で PHP から操作できる状態で見えている。
通常マルチプロセスの処理は、親が持っていた fd はじめいろいろなものを継承してしまうので、子にとって不要なものを閉じてしまうというのが最初にやること。
親がロックを取得した fd をそのまま親と子で共有するなんてことはめったに無いから、親なり子なりでその fd を閉じる処理を書くことになる。
この時 LOCK_UN が自動的に走るようになっていると、そのロックを必要としている方のプロセスが持つロックまで解放され、非常に具合が悪い。
だから fclose で勝手に LOCK_UN するなんてのは余計なお世話以外の何物でもない。

というわけで、fclose で LOCK_UN しないようになったと、こういうことだよ。

751 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 19:49:34.59 ID:4xmbllsr.net]
>>747
> 親がロックを取得した fd をそのまま親と子で共有するなんてことはめったに無いから、親なり子なりでその fd を閉じる処理を書くことになる。
ちょっと誤解を招くかもしれないから捕捉。

親がロックを取得した fd をそのまま親と子で共有するなんてことはめったに無いから、
その fd はどちらか一方にとっては不要であるから、そちらのプロセスでは最初にその fd を閉じる処理を書く。

752 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 19:58:20.79 ID:p2hTIoUv.net]
>>745
プロセスが生きている間においては「ロック残り」が発生するが、どうせ死ぬから問題ないというスタンスだとすれば、
max_execution_timeを0にした場合や、(初期値が0である)CLIの場合は生き続けるよ。

753 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 20:37:09.64 ID:SRdEl8UG.net]
HTMLとは
ハイパー テキストマークアップ ラングアゲ

754 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 21:40:22.72 ID:ETS5lku+.net]
ランゲージ

755 名前:デフォルトの名無しさん mailto:sage [2016/06/13(月) 09:32:27.21 ID:Mgx0zrpD.net]
今phpをステップ実行できるデバッガで便利なのってどのあたり?
ステップごとにそれぞれの変数の中身がどうなってるか簡単にわかるとうれしい

756 名前:デフォルトの名無しさん mailto:sage [2016/06/13(月) 13:49:19.06 ID:XIduanRK.net]
array_filterで関数に他の引数も与えたい場合はどうしたらいいですか?

757 名前:デフォルトの名無しさん mailto:sage [2016/06/13(月) 14:23:37.32 ID:TYgkMCrQ.net]
>>753
コールバックにオブジェクトメソッドを指定して、オブジェクトに他のパラメータを持たせるとか?



758 名前:デフォルトの名無しさん mailto:sage [2016/06/13(月) 14:36:57.48 ID:TYgkMCrQ.net]
あんまやったことないけど、クロージャでやる方が簡単なのかね?

function my_array_filter(array $input, $param)
{
return array_filter(
$input,
function($var) use($param) {
return $var <= $param;
}
);
}

$a=array(1,2,3,4,5);

print_r(my_array_filter($a, 2));
print_r(my_array_filter($a, 4));

<実行結果>
Array
(
[0] => 1
[1] => 2
)
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)

759 名前:デフォルトの名無しさん mailto:sage [2016/06/13(月) 15:15:41.61 ID:XIduanRK.net]
>>755
phpもクロージャ出来るようになってたんですね
ありがとうございます

760 名前:デフォルトの名無しさん mailto:sage [2016/06/13(月) 16:04:29.44 ID:poUAr+t+.net]
Array→アレイ→アレ?→あれれ?
という発想が頭から離れなくて頭が基地外になりそうなんだけどプログラミングは向いてないよね?
ちなみに仕事はPG全く関係なくて異業種の作業員

761 名前:デフォルトの名無しさん mailto:sage [2016/06/13(月) 18:18:38.79 ID:Mj2HqjrQ.net]
おでかけですか〜?

762 名前:デフォルトの名無しさん mailto:sage [2016/06/13(月) 18:53:18.04 ID:I48wzFwG.net]
おまえら、平和でいいな。

763 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 00:37:10.95 ID:e/1BDrQk.net]
>>757
電気屋さんとか電波屋さんと仲良くなれそう

764 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 02:04:02.36 ID:vpCPShaK.net]
配列をオブジェクト指向的に使うための組み込みクラスは何故ないのでしょうか?

765 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 03:26:27.75 ID:E92ohJVI.net]
ないんですか?

766 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 03:29:28.98 ID:sdXnBDtj.net]
>>761
当初はあまりオブジェクト指向じゃなかったという点と、
現状の array をそのままオブジェクトとして見なす変更をしてしまうと array を関数の引数に取る場合に他のオブジェクトの扱い(array はコピー渡し、オブジェクトは参照渡し)と一貫性が取れなくなるから、今更どうにもできないってところじゃね。

それより、関数が返す array を直接添え字でアクセスできないのをなんとかして欲しい。
ようは explode(',', $str)[1] みたいにやりたいわけだが、この改修ならほとんど問題無くできそうな気がするけどな。

767 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 03:34:56.83 ID:pjhL6UK+.net]
list(,$test)=explode(',', 'test1,test2,test3');
こうするのがせいぜいだが、これで妥協するか自分自身が開発に参加して改修するかだな



768 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 03:48:41.99 ID:E92ohJVI.net]
できないんですか?

769 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 05:18:59.07 ID:jLlAbvBE.net]
ArrayObjectとArrayIteratorならあるぞ

770 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 09:39:15.99 ID:1o9WExv+.net]
>>761
実装済みの>>766に加えて自前クラスでもArrayAccessインターフェイスを実装すれば配列のように扱えるクラスを実装出来る

771 名前:デフォルトの名無しさん mailto:sega [2016/06/14(火) 10:25:21.42 ID:ekIyBZy6.net]
PHPStorm を優勝期限切れで使い続けてる人います?
バージョンアップできなくてつらくない?

772 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 11:58:51.69 ID:vpCPShaK.net]
ありがとうございます
ArrayObjectってあったんですね
探し方が足りなかったようです
やはり関数言語的な書き方をしようと思うと、生配列だと物足りなくなってきますね
ただArrayObjectも、関数言語的なメソッドは実装されてないようです
eachやmapやreduceなど
既にそういうの書いてる人はいるでしょうけど、
標準実装してほしいところです

773 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 12:23:57.32 ID:nAMCA7y/.net]
>>763
explode(',', $str)[1] については
いつまでも古いバージョンのPHPつかってんじゃねーよってことだが。

774 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 17:44:21.80 ID:vpCPShaK.net]
class ArrayObjectEx extends ArrayObject {

public function map($func){
foreach ($this as $key => $value){
$this[$key] = $func($value,$key);
}
return $this;
}

}

とりあえずmapを作ろうと上みたいな感じにしたのですが
インスタンスのmapを呼び出すとundefined functionと言われます
親クラスにないメソッドを追加することは出来ないのでしょうか?
だとしたらそんな制限は意味が不明すぎますが・・

775 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 19:05:12.07 ID:4d00OzM8.net]
検証すんのめんどくさいから全部コード乗っけてくれる?ハゲ

776 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 19:26:39.01 ID:E92ohJVI.net]
mapに何を渡したんですか?

777 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 21:39:45.32 ID:vpCPShaK.net]
失礼しました
あまりの非PHPっぽさに釣られて
$a.hoge();
みたいな書き方をしていました



778 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 23:57:10.36 ID:sdXnBDtj.net]
>>770
あれ本当だ
いつの間にこうなった

779 名前:デフォルトの名無しさん mailto:sage [2016/06/15(水) 00:30:10.47 ID:yBESscco.net]
>>775
5.4からだから既に4年以上前

780 名前:デフォルトの名無しさん mailto:sage [2016/06/15(水) 01:15:30.82 ID:/9sc4puR.net]
explodeの戻り値がfalseだったら文字列でもfalseでもない null が返ってくることになるよな、それ
noticeも出る

781 名前:デフォルトの名無しさん mailto:sage [2016/06/15(水) 02:58:03.10 ID:6YnDO2OY.net]
そうですね

782 名前:デフォルトの名無しさん mailto:sage [2016/06/15(水) 09:56:12.92 ID:35n6X8km.net]
>>776
ずっとそれ出来ないもんだと思ってた...

783 名前:デフォルトの名無しさん mailto:sage [2016/06/15(水) 10:18:18.00 ID:HJSiSv4s.net]
猿は勉強しないから知らなくても無理はない。気にすんな。

784 名前:デフォルトの名無しさん mailto:sage [2016/06/15(水) 11:45:48.59 ID:DNtAqMfa.net]
わかった。 もう気にしない。

785 名前:デフォルトの名無しさん mailto:sage [2016/06/15(水) 12:28:52.64 ID:63gxNX9v.net]
マイナーバージョンアップで使えるようになった書き方は互換性の面で正直使いづらいな。
使いやすくなることは喜ばしいが。

786 名前:デフォルトの名無しさん mailto:sage [2016/06/15(水) 14:10:09.61 ID:i5XubNZf.net]
自分の書いたコードが
PHPのどのバージョンから使えるコードなのかを判定する
ツール的なものはないのでしょうか?

787 名前:デフォルトの名無しさん mailto:sage [2016/06/15(水) 14:13:56.64 ID:x+vvrMaZ.net]
言い出しっぺが作るのです



788 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 03:33:03.54 ID:F+lw57im.net]
readdirでディレクトリエントリを読んでいきながら
便宜ファイルを削除しても問題ないのでしょうか?

789 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 11:12:05.38 ID:F+lw57im.net]
stackoverflow.com/questions/13507721/how-to-delete-a-file-from-folder-in-php

ここを見ると問題ないようです
foreachで元の配列を破壊的に変化させてるようなものだと思うのですが
どういうアルゴリズムなのか。
一旦全てエントリを舐めて、一つ一つ取り出してるだけなのでしょうか
scandirではなくreaddirを使うのはメモリを節約したいという意識からですが
一度に全部読んで単に取り出しを一つ一つしているだけなら
あんまり意味がないですね

790 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 11:51:44.03 ID:OOtzbp5n.net]
>>785
問題が出るかは確認してないけど、
問題が出るかもしれないから readdir のループでは対象ファイルのリストアップだけして、改めて処理用のループ回してる。

791 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 15:13:15.23 ID:rO3o63UR.net]
配列の操作について質問です。
MySQLから点数データを取得してwhile文で配列に格納するとともに、
点数の5段階の相対評価を得たいです。

学生(要素数が可変)の点数配列scoresがあるとした場合、点数の高い順に
最初の1/5をA、次の1/5をB、次の1/5をC、次の1/5をD、残りをEに分類するには
どういう操作をするのが定石でしょうか?

792 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 15:14:35.80 ID:rO3o63UR.net]
(続き)
やりたいことは点数出力時に、「相対的」に5段階評価してランク付けも出力したいのです。
絶対評価なら80点以上はA、60点以上はB・・・など基本的なif文の分岐で可能ですが、
相対評価の場合に、定石的な方法や、便利な関数などはあるのでしょうか?

いったん点数を配列に格納後に、配列をコピーしてソートして5つに分類するとか考えているのですが、
もっといいアルゴリズムや便利な関数などありますか?
よろしくお願いします。

配列の中身(MySQLからwhile文で取得)
scores[1] = 19;
scores[2] = 82;
scores[3] = 37;
...
scores[488] = 11;
scores[489] = 55;

793 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 15:20:11.03 ID:lOAG9aOi.net]
>>788
ここはphpの下質スレですがご質問はphpに関する質問ですか?

794 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 15:25:56.10 ID:rO3o63UR.net]
>>790
はい。
PHPでのアルゴリズムの実装方法やそのためのPHPの関数などを教えて欲しいです。

795 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 15:32:21.65 ID:F+lw57im.net]
>>787
それが安心ですね
ありがとうございます

796 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 15:40:54.97 ID:lOAG9aOi.net]
>>791
まあ…ほんとにphpなら
単純に1次元配列を並び替えるだけならrsort($scores);するかその前にsqlの時点でORDER BYすればいい
あとは$scores = array_chunk( $scores, (int)(ceil(count($scores)/5)) );とかすればいい
データが二次元だとか細かい処理したいとかならrsort()ではなくusort()も使える

797 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 16:28:58.79 ID:rO3o63UR.net]
>>793
ありがとうございます。
配列操作の関数がたくさんあってどれが最適なのか見つけられずにいました。
ORDER BYとご教示頂きましたarray_chunkの関数の組み合わせが最適そうですね。
解決できそうです。ありがとうございました。



798 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 16:49:55.80 ID:BCCkDo9p.net]
学生数が5できっちり割れる時は良いけど
そうならない時はどうするのかな?

799 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 17:36:01.49 ID:rO3o63UR.net]
>>795
ご注意ありがとうございます。
array_chunk には、次の記述がありますが、仕様上問題ないです。
「最後の部分の要素数は size より小さくなることもあります」
php.net/manual/ja/function.array-chunk.php

800 名前:デフォルトの名無しさん [2016/06/16(木) 21:36:32.86 ID:geCt37Iz.net]
質問させていただきます。
Class内でメンバ関数で定義した変数を別のメンバ関数から参照するにはどうすれば良いのでしょうか?

801 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 22:26:42.88 ID:S7gZdFkC.net]
>>797
何がしたいか分からんからやりたいことのコード例

802 名前:デフォルトの名無しさん [2016/06/16(木) 22:30:00.80 ID:geCt37Iz.net]
>>798
あ、ごめんなさい
class {
public function a() {
$x = 'hello,world';
}

public function b() {
print $x; //hello,worldを表示する
}

}

簡潔にかけばこんな感じです。
aメソッドで定義した変数をbでも使いたいです

803 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 23:17:55.32 ID:S7gZdFkC.net]
>>799
クラスのプロパティにしたらあかんのか?

804 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 23:23:33.51 ID:OOtzbp5n.net]
クラス内の特定の機能だけでしか使わない変数の扱いについては悩ましいこともあるな。
スコープを厳格にしたいならその機能を別のクラスとして切り出すか、そこまで小分けしたくないなら大人しくプロパティにしてしまうか。
JAVAなんかだとクラス内クラスが簡単に扱えてこういうのに便利なんだけど、PHPってどうなんだっけ。

805 名前:デフォルトの名無しさん [2016/06/16(木) 23:23:34.81 ID:geCt37Iz.net]
>>800
まあそれでもいいっちゃいいんですけど
ちょっとコードが長くなった時とか、別々にして処理させたいんですよね
皆さんがクラス書くときってどうやってるんでしょうか

806 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 23:30:35.19 ID:S7gZdFkC.net]
>>802
そもそも担当処理が違うなら別クラスにして委譲するのが適切だとは思う

807 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 00:04:23.57 ID:OWOb/yaE.net]
public function a() {
  static $x = 'hello,world';
}
これでは要求を満たさないならばおとなしく関数ではなくclassの変数やclass定数にすべき



808 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 01:04:47.60 ID:bXZXch1T.net]
>>804
質問を読んでなんでそんなコードが出てくるのか意味解らん

809 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 01:24:40.23 ID:VvmzJV5D.net]
配列から数をキーとして持つ要素だけを取り出す
いい方法はありませんか?

810 名前:デフォルトの名無しさん [2016/06/17(金) 02:24:59.62 ID:Ub5TQFWS.net]
PHPの本で分かりやすいのある?

811 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 07:28:42.66 ID:yged7CRH.net]
>>807
皆さんはどんなosでどんなツールでphpやっているの?
教えて

812 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 07:38:35.18 ID:kypwTnD/.net]
机の上でノートに鉛筆でコードを書きながら脳内デバッグして脳内リリース。

813 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 07:55:00.51 ID:zTp2v+lf.net]
>>809
奇遇ですな。

同じくアイデア段階では、パソコンでやらずに紙です。
すぐにフローやイメージ図を書き留められる。放射状に広げていける。
紙とエンピツがその時だけ本当に便利だよね。

814 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 08:36:09.46 ID:CYdk5Mt/.net]
シーケンス図は手書きの方が楽、人に見せるときは格好つけてVisioで整形するがな

815 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 10:05:23.41 ID:izLNj4Mm.net]
>>807
山田祥寛(よしひろ)、翔泳社
10日でおぼえる PHP 入門教室、第4版、2012

この本は、Webアプリ作成の流れがわかるけど、
文法の説明は、あまりない

816 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 10:10:12.64 ID:zTp2v+lf.net]
>>812
その人の本地雷だろ。
初心者の時にPEARの本買ったら、意味がわからなくなって挫折しかかった。
別の本で救済された。文法云々の前にとにかく、理屈をこねすぎて本質部分全然わかりにくい。

817 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 10:56:59.01 ID:izLNj4Mm.net]
山田祥寛は第一人者。
様々な言語の本を書いている。RoRでも有名

講習会も1日4万円!



818 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 11:50:18.31 ID:1vjuVThu.net]
>>806
array_filter() で ARRAY_FILTER_USE_KEY フラグを使ってフィルタリングする。
あるいは、foreach で順に走査して該当するものだけ取得する。

819 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 13:12:30.73 ID:VvmzJV5D.net]
>>815
ARRAY_FILTER_USE_KEYというのは初耳でしたが、
借りたVPSに入ってるのは5.4なので、まだ使えませんでした
おとなしくforeachします
ありがとうございました

820 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 16:07:38.77 ID:AeewtahV.net]
ユーザーアイコンの取得方法について質問です。

現在ユーザーアイコンの保存にてaws s3(フレームはlaravel)を利用しています。
疑問なのはアイコンの存在チェックをするべきかどうかです。
(アイコン名はユーザーのid名です)

以下のようにすると、存在チェックと取得の計2回のリクエストが発生してしまいます。
@if (Storage::exists('user-icons/' . $user->id . '.jpg'))
<img src=&quo

821 名前:t;{{ Storage::url('user-icons/' . $user->id . '.jpg') }}">
@else
<img src="{{ Storage::url('user-icons/default.jpg') }}">
@endif

そのため単純にユーザーが会員登録した時点でデフォルト画像をユーザーアイコンとして保存し
以下のようにただ取得するというシステムにしようか迷っています。
<img src="{{ Storage::url('user-icons/' . $user->id . '.jpg') }}">
(アイコンを変えないかぎり、ストレージ上ではデフォルト画像があふれるような感じ)

アイコンを設定するようなサービスは、どのような構造になっているのでしょう?
[]
[ここ壊れてます]

822 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 16:09:49.84 ID:KYjoOhmA.net]
>>817
データベースは使わないの?

823 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 16:40:23.10 ID:AeewtahV.net]
>>818
アイコン変更履歴を格納するという意味でしょうか?

824 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 16:56:34.53 ID:KYjoOhmA.net]
>>819
履歴が必要なら履歴も登録してもいいけど。
例えば、user.iconに画像ファイル名が入ってるなら、
select cese when user.icon is null then 'default.jpg' else user.icon end as user_icon
画像ファイル名じゃなくて、あり/なしでもいいし、フルパスにしてもいいし、
userとは別テーブルにしてもいいし。

825 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 16:58:19.35 ID:KYjoOhmA.net]
っていうか、
> 以下のようにすると、存在チェックと取得の計2回のリクエストが発生してしまいます。
これほんと?
$user->idってインスタンスのプロパティアクセスじゃないの?

826 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 00:14:26.11 ID:SEe9xJ4I.net]
>>817
ファイルを保存したことが確定していればそれでいいというのであればそのステータスをローカルのDBなんかに保存する
アクセス時点でクライアントに画像が見えることを担保したいのであればクライアントサイドでやるべきではないか

827 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 00:48:21.29 ID:W3J+GEBP.net]
>>821
> これほんと?
しかまともなレスがない



828 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 03:06:39.83 ID:zkudPs4r.net]
>>823
つかそいつ一人しかレス付けてないじゃん。

>>817
S3 は高性能なストレージで存在チェック程度のアクセスは気にするような話ではないんじゃない?
ただアイコンを表示する全ての個所でそのコードを書くのはだるいから、デフォルトアイコンを作ってしまうというのもアリだと思う。
ただそうすると、例えばアイコンを設定してないユーザー 10人を一覧表示する場合、
存在チェック式なら同一の画像URL 10個が並ぶからクライアントは結果的に 1回の画像取得しかしないのに対し、
デフォルトアイコンコピー式では画像は個別の 10 の URL になるからクライアントは 10回画像取得をすることになり、
存在チェックなどの些細な負荷より重い実際の画像アクセスが増えてしまう。

829 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 08:33:50.00 ID:8GpUPXrh.net]
>>817
ファイルリストをキャッシュしておいて
ファイルが変更された(画像ファイルの追加や削除)タイミングで
キャッシュをInvalidateすればいいんでないかい?

830 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 08:42:32.00 ID:saT7WdS7.net]
default.jpgくらいは手元(ローカルサーバー)に置いておきたいというのはあるわな
その場合はlocal://default.jpgとかs3-icon://xxxx.yyyみたいな独自書式を用意するかな

831 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 13:57:43.89 ID:a+CHws3P.net]
formと振り分けphpについて質問です。

<form action="furiwake.php">
<input type=submit>
<input type=submit>
<input type=submit>
</form>

で、furiwake.phpで$_POSTの内容判定してheader['Location']するのと

<form><input type="submit"></form>
を何個も書いてそれぞれ別のページに飛ばすのってどっちが良いんですか?
ただの趣味の話?
それともこうした方が良いとかってありますか?

832 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 14:07:09.69 ID:a+CHws3P.net]
書き忘れ
顧客情報データ持っててhiddenで渡して次画面行きたいだけなのですが
1.全部$_SESSIONに詰め込んで<a href>を何個も作ってそれぞれに飛ばす
2.一つの<form>にsubmitを入れまくって振り分け用phpにhiddenで飛ばす
3.<form>を複数作って顧客情報をそれぞれhiddenで飛ばす

$_SESSIONに何でもかんでも詰め込んで良いものか、
それとも振り分け用phpへのアクセスが増える(現実問題は大した事ないけど作り方として)のを避けた方が良いのか
というようなことで迷いました。

833 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 16:03:58.68 ID:ue516XaJ.net]
端的に言うと、どれもやらねぇかな。

834 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 16:51:59.61 ID:OFAUAFhz.net]
>>827
目的と手段を考えれば答えがでるんじゃない。
データを持って次画面行きたいだけなら$_SESSIONを使うかな。
むしろPOSTする意味がわからない。

835 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 19:19:52.96 ID:a+CHws3P.net]
>>829
どんな方法使うんですか?

>>830
取り敢えず$_SESSIONに詰め込む事にします

836 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 20:16:44.01 ID:CHIXqkwm.net]
何を参考にしたのか知らないが、普通はそんなやり方はしない

837 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 20:41:31.45 ID:a+CHws3P.net]
普通はどうするんでしょうか



838 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 20:55:18.11 ID:CHIXqkwm.net]
普通は、一つのformに一つのsubmit
処理内容を分けたいなら、
処理の選択をするエレメントを付けてやる

839 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 22:59:24.24 ID:pgLfn0h3.net]
>>833
自分がしたい処理に似ている有名なサイトのページを分析してみればいい

840 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 18:04:14.78 ID:JfyAxJGc.net]
nanoappli.com/blog/archives/5448

こちらのサイトで
simpleXMLでXMLを組み立てた後
整形するためにDOMDocumentで出力しなおしていますが
最初からDOMDocumentでXMLを組み立てることは出来ないのでしょうか?

841 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 02:38:27.16 ID:tnqQkYkd.net]
$xml = simplexml_load_string($str);
json_decode(json_encode($xml), true);

で得られる形式の配列から
xmlに戻す、いい方法はありせんか?

842 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 06:31:07.37 ID:gb8WC3Pe.net]
foreachで頑張る

843 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 07:10:53.68 ID:6mpJGPIZ.net]
php同士ならserialize/unserializeでいいだろ
xmlとかyamlはまああれだ、趣味

844 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 12:29:12.56 ID:tnqQkYkd.net]
RSSを配列化→加工→RSSに戻す
ということをしたいのです
しかしPHPのXML周りはどうもイケてない気がします
簡単なことをするのも煩瑣で、少し突っ込んだ操作も不可能で・・
foreachで頑張るしかないのでしょうか

845 名前:デフォルトの名無しさん [2016/06/20(月) 13:06:06.35 ID:e7qwC/Xx.net]
>>840
Rubyでも使いなさい

846 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 13:56:49.12 ID:CH6czl6r.net]
Rubyを使ったところで向こうのコミュニティに迷惑掛けるだけだろう
どの言語でも共通のDOMすら理解できてないんだから

847 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 14:30:03.12 ID:ppvG3ddJ.net]
Groovy なら、クロージャを使って、簡潔に書ける

タグ名.each{ 要素 ->
要素.value = 'abc'
}



848 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 15:02:05.88 ID:tnqQkYkd.net]
別にPHPが駄目だといっている訳ではありません
実用主義のPHPなのに
XMLと配列との相互変換のための関数が用意されていないのっておかしくね?
と言っているのです
あと値を設定した時に実体参照に変換してくれないところも気が利いてません

849 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 15:30:57.32 ID:tnqQkYkd.net]
>>837
あと良く使われてるこの手法もネームスペース属性がそぎ落とされますし・・
イケてないと言わざるを得ません

850 名前:デフォルトの名無しさん [2016/06/20(月) 15:37:59.20 ID:dCVNOi3X.net]
黙れ!小童!!!!!
chattykh.com/wp

851 名前:-content/uploads/2016/03/CZezN7LVIAApejO.jpg []
[ここ壊れてます]

852 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 15:43:22.49 ID:CH6czl6r.net]
>>844,845
配列に型変換して一体何が楽になると思ってるのか知らんけど
DOMが嫌だという人のために配列っぽく扱えるSimpleXMLElementが用意されてるだろ
ドキュメントも読まずに自分勝手にarray使っておいて気が利かないとか
マとして恥ずかしくないの?

853 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 15:46:32.10 ID:kXAYtV38.net]
>>847
少なくとも配列とDOMを相互変換とか言ってる時点で正気じゃない
黙ってNGに突っ込んでおくのがよい

854 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 16:19:51.02 ID:tnqQkYkd.net]
>>847-848
じゃあXMLのままフィルタリングやソーティングしてみて下さい

855 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 16:21:39.69 ID:o/Q8QvES.net]
入れ子になってる構造でソートだって?

856 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 16:22:31.78 ID:1gK0q/ls.net]
>>844
その辺に関してイケてると思う言語はどれ?

857 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 16:26:10.03 ID:1A5wn0fq.net]
>>850
兄弟の順序に意味があるXMLだって?



858 名前:デフォルトの名無しさん [2016/06/20(月) 17:55:01.05 ID:o3UTjcQ6.net]
セキュリティ関係が頭に全然入ってこないです
どうやって勉強すればいいでしょうか

859 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 18:14:04.86 ID:Iph33/KO.net]
>>853
模擬サーバーにハッキングしてみる(実証実験)

860 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 18:43:25.91 ID:6mpJGPIZ.net]
頭に入らないってことは頭の安全性は保障されてるんじゃね、セキュアだな

861 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 19:42:02.13 ID:DtHt205g.net]
みんな頭いいね。おれなんて
total=total+1の時点で頭がテンパってるわ

862 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 19:51:18.58 ID:7UcrPiUv.net]
いまでもよく無限ループやらかします(小声)

863 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 19:56:33.91 ID:Ht1YDCGg.net]
>>857
ループ変数を $i にするのを卒業しようとしたら $i++ だけ残ってたり

864 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 21:23:50.71 ID:7KDOMThT.net]
イテレートで盛り上がれる純朴さが羨ましい限りだ。

865 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 21:28:32.25 ID:7KDOMThT.net]
Too young to die, too drunk to live なのかねぇ…

866 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 23:03:57.10 ID:tnqQkYkd.net]
>>851
rssの生成は今回はじめてやってるので知りません
他の言語と比較してイケてないと言っているのではなく
単にイケてないと言っているのです

867 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 23:07:57.34 ID:vKqEeD2c.net]
>>861
プログラミング言語なんだからイケてるライブラリは作り放題だぞ
できたら公開してくれ



868 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 07:36:44.50 ID:F8rFyF6H.net]
>>861
XML_RSSってメンテされてないんでしょ、これはあれだ、お前がやれという天啓

869 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 13:10:43.41 ID:ZCseRBtp.net]
XMLオワコン
JSONだけでいいだろもう

870 名前:デフォルトの名無しさん [2016/06/21(火) 14:03:51.86 ID:ZWokyEcu.net]
WEB IDEの PhpStorm ておいくらなの?
会社に購入を申請しようとおもうだけど
お値段がどこにものっていない

871 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 14:17:29.46 ID:ZCseRBtp.net]
https://www.jetbrains.com/phpstorm/buy/#edition=commercial
つうかphpstormでググれば3秒でわかるような質問してる人がプログラマーなのに驚愕

872 名前:デフォルトの名無しさん [2016/06/21(火) 15:02:57.47 ID:ZWokyEcu.net]
>>866
高!!
199ドルもするの??

phpstormでググったけどその価格のページにたどりつけんかったんよ

873 名前:デフォルトの名無しさん [2016/06/21(火) 15:07:06.24 ID:ZWokyEcu.net]
>>866
とりあえず会社に申請してみます。
ありがとう。

874 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 15:20:20.47 ID:ZCseRBtp.net]
ブラウザとか環境によるのかもしれんけど自分の場合こんな感じに出る

PhpStorm IDE :: JetBrains PhpStorm
https://www.jetbrains.com/phpstorm/
このページを訳す
The most intelligent PHP IDE with refactorings, code completion, on-the-fly code analysis and coding productivity orientation.
Download PhpStorm ・ Buy ・ What's new in PhpStorm 2016.1? ・ Docs & Demos

そんでBuyのとこを押すとたどりつけるというわけさ

仕事で使うなら商用ライセンスだろうということでそっち貼ったけど
199ドルは商用ライセンスだから個人の場合は89ドルね
https://www.jetbrains.com/phpstorm/buy/#edition=personal

875 名前:デフォルトの名無しさん [2016/06/21(火) 15:32:11.50 ID:GUPYo8em.net]
PEARを使うことによってPHPでの開発は劇的に向上する

876 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 16:01:19.29 ID:GdkMnzSr.net]
いまさらですか?

877 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 16:07:25.78 ID:JNUr2v78.net]
ネストされた配列を再帰を使わずにパースしていく
いい方法はありませんか?



878 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 16:53:13.58 ID:PPdTS3ln.net]
$199とか、1日の人件費くらいだろ

879 名前:デフォルトの名無しさん [2016/06/21(火) 16:54:36.54 ID:F8qq0CQB.net]
>>871
あんたPEARなんて使ってんの?

880 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 16:56:47.93 ID:GdkMnzSr.net]
安価ミスですか?

881 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 17:10:33.70 ID:gufFnXZC.net]
これ以上ないくらい美しく書けた

//AWS S3上のphotosを削除(データベースはcascadeで対応)
$photosId = $user->photos()->lists('photos.id');
if (count($photosId) > 0) {
$deletePhotoPaths = [];
foreach ($photosId as $value) {
$deletePhotoPaths[] = 'photos/' . $value . '.jpg';
}
Storage::delete($deletePhotoPaths);
}

882 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 17:30:39.61 ID:GdkMnzSr.net]
API仕様知らないけどこれだとまずいの?

$deletePhotoPaths = [];
foreach ($user->photos()->lists('photos.id') as $value) {
$deletePhotoPaths[] = 'photos/' . $value . '.jpg';
}
Storage::delete($deletePhotoPaths);

という些細なものは置いといても、単数形と複数形のポリシーが適当すぎて気持ち悪い。

883 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 18:18:36.43 ID:E96GoXUh.net]
>>876
逆にそれより汚く書くとどうなるんだ?

884 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 18:32:23.09 ID:JNUr2v78.net]
正直ごく普通のコードに見えますが・・。
配列はphotosIdListとかにして配列と示した方が良さそうですね

885 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 18:39:20.94 ID:E96GoXUh.net]
ID からパスを求める処理は他でも使うから、メソッドなり関数なりに切り出しておくべきだろうね。
array_walk のコールバックに合わせたインタフェースにするといいかもしれないが、それだと単体の変換向けにはちょっと使いづらくなるから、
そこをどう解決するかにセンスを求められるかもな。

886 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 18:44:08.60 ID:E96GoXUh.net]
>>880
array_walk じゃなく array_map にすりゃいいのか。
なんかボケてたわ。

887 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 18:53:30.67 ID:Dmco6gBH.net]
>>873
フリーや零細ならそういう考え方でいいが、
ある程度の規模になるとそんな甘っちょろい考え方では済まなくなる。



888 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 20:06:44.71 ID:E96GoXUh.net]
>>872
なんで再帰にしたくないの?
パースって具体的にどんな処理?
もしかして >>837 の人?

889 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 20:08:30.54 ID:JNUr2v78.net]
>>845の件ですが
ネームスペースだけでなく、属性も消えると判明しました
ネームスペースや属性もちゃんと表示するコードをしこしこ手書きしたのに
短い方がいいと思って廃棄してからそのことに気付きました
ファックですね?

890 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 20:10:13.56 ID:JNUr2v78.net]
>>883
処理が単一的でないので、再帰だとどうもうまくいかないと思ったのです
でも再帰でうまく出来そうです
ありがとうございました

891 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 20:11:19.45 ID:Dmco6gBH.net]
>>884
一生言ってろ、dumbass

892 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 20:17:57.37 ID:JNUr2v78.net]
>>886
ハゲは黙ってろ

893 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 20:36:38.54 ID:oaiM5wE7.net]
>>884
gitみたいな分散バージョン管理システムつかいなよ
こまめにローカルコミットしとけば
戻りたい地点にすぐ戻れる

894 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 20:39:12.30 ID:Dmco6gBH.net]
サルがVCSか。どのように使うか見ものだな。

895 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 20:48:50.16 ID:E96GoXUh.net]
>>884
むしろ XML の使い方を simplexml_load_string で扱える範囲に収める方がいいんじゃない?
わざわざ XML を使うなんてのは余所とのデータ交換のためなんじゃないかと思うけど、であればなおさら誰でも読めるフォーマットにした方がいいでしょ。
もう仕様が確定して運用中だったらどうにもならないけど。

896 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 22:24:57.65 ID:JNUr2v78.net]
>>884の件ですが
ファイルを別ファイルとして保存
→undoしまくる
という方法で復活できました

>>888
一応dropboxをバージョン管理に使ってるのですが
今回はちょっとしたテストのつもりでデスクトップで書いていたので・・
ちゃんとした開発ではsubversion使ってます

>>890
生成しようとしてるのはpodcast用のRSSなので、
仕様はすでに決まってるのです・・

897 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 22:34:22.85 ID:3K6j4RYc.net]
>>891
dropboxでバージョン管理とな?



898 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 22:50:17.70 ID:nLutN5Ez.net]
ほんのちょこっとした個人用プログラムくらいなら
Dropboxでも十分よ

899 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 05:54:22.15 ID:cac9buRO.net]
素直にGitは難しくて使い方わかりませんって言えばいいのに。

900 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 08:16:06.21 ID:b8o1sKk7.net]
>>893
俺もプロジェクトごっそり暗号化zipにして日付つけてdropboxに放り込んでるわ
そういう簡単なソフト作った
windowsなら標準でonedriveにバージョン単位で保存できるみたいだけど

901 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 09:54:21.10 ID:pXRO6eh+.net]
GitとGitHubは別物ですか?
SQLとMySQLみたいな。

902 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 10:14:00.80 ID:PtXJngN/.net]
gitを使おうとしたら全部のディレクトリに勝手に管理用のファイルが
生成されたからなんか嫌で使ってない
本番用の公開サイトでもgitの管理ファイルがあってもいいものなの?

903 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 10:52:05.69 ID:Aw/Pyhhi.net]
以前はFTPでファイルのアップロードを行なっていて
いつのころからかrsyncで同期するようになり
今ではhg push

904 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 11:01:25.47 ID:uyRcysT8.net]
気付けば何もかもが面倒になって直接サーバ入ってviで作業

>SQLとMySQLみたいな
うまい

905 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 11:27:29.72 ID:A5e06e5G.net]
全然うまくねえよ、ハゲ

906 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 11:52:44.24 ID:WfMLciR4.net]
>>897
git はトップディレクトリにしか作らなくね?
エクスプローラーがあちこちに Thumbs.db を作ったりするよりはよほどいいと思うよ。
なんにしてもそんなものを公開サーバに上げるのはマヌケ。

それよりも、個人的にはファイルのタイムスタンプが維持されないのが気に食わない。

907 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 12:24:51.88 ID:OlmvlLQ3.net]
>>901
ありがと。参考になります。もう一度やってみるよ。



908 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 12:59:23.09 ID:k28/2S7E.net]
>>882
> ある程度の規模になるとそんな甘っちょろい考え方では済まなくなる。
ある程度の規模になれば、それこそ$199なんて誤差になってくるだろ
MSDNに比べれば、ゴミのような値段

909 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 13:08:25.26 ID:A5e06e5G.net]
>>903
流石、平しかなった事のない奴の発言は重みがあるな。
お前はずっとそう思ってればいいよ。

910 名前:デフォルトの名無しさん [2016/06/22(水) 13:10:35.97 ID:BFfjtylb.net]
PEARを使うことで格段に作業効率がUPするのにどうしてみんな使わないの?

911 名前:デフォルトの名無しさん [2016/06/22(水) 13:42:08.67 ID:pXRO6eh+.net]
オブジェクト指向でクラス化して作っても
結局はあとあと、再利用、改変、再購読する可能性が低ければ
クラス化する意味はあまり無いのですか?

912 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 14:07:44.37 ID:WfMLciR4.net]
>>906
変数をクラス内に閉じ込めておけるという点だけでもクラス化の恩恵はあると思う。

913 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 14:33:22.24 ID:k28/2S7E.net]
>>904
お前のような奴がいると、ちゃんとした統合環境も使えず、GitHubなんかも使えず、
CI環境とか監視ツールとかもできあいのものが使えないんだろうよ
かわいそうだわ

914 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 18:17:18.97 ID:s+FJ5KLI.net]
「添字配列」を英語で何と言いますか?

915 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 18:27:32.70 ID:k28/2S7E.net]
>>909
indexed array

916 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 18:55:49.97 ID:cac9buRO.net]
>>908
どういう論拠でその結論をだしたんだ?
サルの考えることは本当によくわからんな…

917 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 18:58:15.96 ID:cac9buRO.net]
>>905
どれもこれも古臭くて不便だから。
他に良い方法がなく、それが最善である場合を除いては使う必要ない。



918 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 19:03:43.32 ID:cac9buRO.net]
先日PEAR::Mailを使ってるプロジェクトのメンテしたが、
たかがメール送るのにあんなクソみたいなライブラリを使うヤツの気が知れない。
そんな奴だから、PEAR::Mailをより不便に糞ラップしてあった。
そうだ、これこそがPHPerの恐ろしいところだ。

919 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 19:03:46.51 ID:s+FJ5KLI.net]
>>910
ありがとうございます

920 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 19:05:47.43 ID:cac9buRO.net]
>>906
それ、前スレだったか、かなり前に同じこと聞いてなかったか?

921 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 19:13:55.80 ID:cac9buRO.net]
俺が今でも使ってるPEARライブラリというと、Net_GeoIPくらいか…
代替手段が無いのかどうかはしらないが、
昔書いたコードで特に不便はないから放置してあるというのが正しいが。

922 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 19:27:13.26 ID:s+FJ5KLI.net]
>>906
オブジェクト指向で書かないと分かりにくいくらい複雑になった時点で
オブジェクト指向に移行します
再利用しなくても、その方が理解しやすくなるというメリットがあります

923 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 20:22:05.78 ID:s+FJ5KLI.net]
SimpleXMLElementオブジェクトから
XML宣言を取得したいのですが、それらしいメソッドがありません
asXMLメソッドで全体の文字列を取得して
先頭から切り出せば取得できますが、そんな方法しかないのでしょうか?

924 名前:デフォルトの名無しさん [2016/06/22(水) 20:57:41.64 ID:UX1eBnCv.net]
基礎を身につけました
実践的な力を付けたいので
これを作るといいという物を教えてくだたもれ

925 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 21:17:09.01 ID:14AwA6D3.net]
>>919
お家カタログ

926 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 21:17:59.56 ID:tA72U/sZ.net]
>>919
スマホゲーム

927 名前:デフォルトの名無しさん [2016/06/22(水) 21:52:32.27 ID:6WTwmu+N.net]
>>897
それバージョンアップで変わったよ。
リリース時はトップレベルの.gitフォルダを削除してあげればおk



928 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 21:56:30.25 ID:14AwA6D3.net]
>>919
話し相手

929 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 22:03:00.47 ID:s1zk4i3O.net]
>>919
なにを作るべきかついて話し合うサイト

930 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 22:10:54.83 ID:npVvWban.net]
>>922
それだけで本番環境に置き換えられるならすごい便利かも
貴重なアドバイスに感謝です

931 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 22:30:22.51 ID:rpiti0Uo.net]
不要なもんは削除したほういいけど、デプロイはリモートリポジトリからプル。ってやるなら.gitは残さないと。公開ディレクトリ外である事前提だけど。

932 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 22:34:17.61 ID:WfMLciR4.net]
>>926
そのやり方は便利なんだけど、PULLしてる最中の中途半端な断面が公開されてる状態になるというのがいただけないよな。

933 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 23:01:22.76 ID:rpiti0Uo.net]
>>927
そうだね。厳密にやるならプル後にシンボリックリンクでディレクトリ毎切り替えとか。まぁツールで楽しろってこったね。

934 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 10:25:07.43 ID:XHBKYGLc.net]
>>911
> サルの考えることは本当によくわからんな…
お前の考えることの方がわからんわ
$199ごときでがたがた言うのに、>>908みたいなことはないというのか?

935 名前:デフォルトの名無しさん [2016/06/23(木) 11:02:23.22 ID:Ox92qZ2z.net]
「CakePHP3」の登場でPHPはプログラミング言語の上位に返り咲くことが出来ました! 多謝!!!!!

936 名前:デフォルトの名無しさん [2016/06/23(木) 11:22:16.08 ID:w+1ZvzwV.net]
PHPスクリプトを用いて、某英辞書サイトから任意の英単語の語義を抽出してPSS形式(=P-Study-System)にしたいのですが、どなたか方法がわかる方がいたら教えていただけないでしょうか?

●ネット上におちていたPHPのコード : massive.tendon.bz/english/crawl.txt
(拡張子をphpに変えて、FC2サーバLiteで使用)
●某辞書サイト: eow.alc.co.jp/$word(検索ワード)/UTF-8/
●出力ファイル→output.csv
成功版: massive.tendon.bz/english/output_success.csv
失敗版: massive.tendon.bz/english/output_fail.csv
●任意の英単語→wordlist.txt : massive.tendon.bz/english/wordlist.txt

上記のコードを使い、一度は語義の抽出ができたのですが、「Fatal error: Maximum execution time of 30 seconds exceeded in /コードを格納してあるアドレス/crawl.php on line 37」と、表示されて以来、任意の英単語のみ(失敗版output.csv)しか吐かなくなりました。

フリーソフト「PSS=P-Study-System」に読み込んで、英単語学習をしたい……と思ったのですが、使い方がつまずいています。

どなたか解決方法がわかる方がいらっしゃるようでしたら、どうかご教授のほど、お願い致します。

937 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 12:23:02.34 ID:g0w8fquD.net]
>>931
30秒返事がなかったからエラーにするって書いてあるけど
そのサイト、て入力でアクセスして返事すぐ返ってくる?
頻繁にアクセスしすぎて制限かけられたとかじゃないの?



938 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 12:30:52.85 ID:x8Tq2OJc.net]
勘で答えるけど、30秒以上も、色々なサイトを、クロールしていたから、
サーバーエラーになったのだろう

エラーの際、プロセスの強制終了により、設定ファイルか何かのリソースに、
途中まで中途半端に書き込まれて、整合性が取れなくなった。
それ以後、そのファイルを読んでも、正しく処理されないとか?

まあ、普通の無料アプリで、エラー処理まできっちり書いていることは、まれ。
エラー処理後のテストなども、普通しない

設定ファイルなどをすべて削除して、最初からやり直せば?
でも、またサーバーエラーが出れば、同じようになるかも

939 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 12:52:22.88 ID:aUw7JVj6.net]
失敗版しか吐かない問題とは別に、クローラはCLIで動かしましょう

940 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 12:56:23.30 ID:ISrN3FK4.net]
>>932
いやそれはクローラーで、初回に実行しておくかバッチで回すものなんじゃないの。
多分。

941 名前:デフォルトの名無しさん [2016/06/23(木) 14:23:39.57 ID:Ox92qZ2z.net]
CakePHPとLaravolどっちがいいかな?

942 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 17:11:28.79 ID:WHuxwDdZ.net]
ネストされた配列に、キーの配列を使ってアクセスする関数って
PHPにないんですか?
$array['a']['b']['c']['d']
のような配列に、配列['a','b','c','d']でアクセスできるようなやつです

943 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 17:33:34.71 ID:WHuxwDdZ.net]
$a = 'a';
$b = 'b';
echo $a ? $a : $b;

こういう処理で、$aを二度書くのが嫌なのですが
いい方法ありませんか?

944 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 17:39:57.01 ID:WHuxwDdZ.net]
boolとしての判定を配列の先頭から行っていって
trueになった時点でその値を返す
という関数があればいいのですが、phpにはないのでしょうか?

945 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 18:25:23.33 ID:7w307aVI.net]
総合するとおそらく求められているのは
php.net/manual/ja/function.array-search.php#91365
みたいなやつだろ、返す値が不満なら自分で改造しなよ

946 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 18:37:39.57 ID:opomWGEo.net]
>>938
エルビス・プレスリーを使う
echo $a ?: $b;

947 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 18:44:33.45 ID:znOgoNn/.net]
>>929
おサルさん、よく聞きなさい。
仕事の現場で大切なのはお金だけではありません。
俺様が一度でも金について話しましたか?
だからあなたは平しかなった事のない野猿だというのですよ。



948 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 18:46:27.39 ID:znOgoNn/.net]
> >>908みたいなことはないというのか?

あるわけねぇだろ、ハゲ
お前は観点がおかしいんだ
保育園からやり直せ

949 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 18:52:22.06 ID:znOgoNn/.net]
>>938
PHP7を使う。

950 名前:デフォルトの名無しさん [2016/06/23(木) 18:58:32.34 ID:pXTHavhi.net]
俺様だってよwww

951 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 19:10:25.79 ID:znOgoNn/.net]
朕と言った方がよかったか?

952 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 19:12:54.18 ID:ISrN3FK4.net]
>>941
おーすげー
はじめて知った、こりゃ便利だな

953 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 19:37:46.60 ID:aUw7JVj6.net]
「こういう処理」のさらに限定的用法でいいならエルビスでも合体でも使えばよろし

954 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 19:38:09.84 ID:znOgoNn/.net]
$hoge = @$_POST["foo"] ?: "bar";

こういうことしなきゃいけなくなるからダメなんだよ。やっぱ7の ?? じゃねぇと。

955 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 19:40:29.22 ID:WHuxwDdZ.net]
>>940
自分でそういう関数を書くのは簡単ですが
標準の機能を使ってやりたいです
>>941
エルビス演算子というのですね
こんなものがあったとは
ありがとうございました

956 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 19:45:31.19 ID:aUw7JVj6.net]
?: の代わりに ?? を使えと読めてしまうあたり、
偉そうだけど正しい情報を出してくれるタイプの人というわけでもないようだ。

957 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 19:54:22.07 ID:WHuxwDdZ.net]
PHP7では出来るようになってるんですか
でもかなりのメリットがあるなら別ですが
yumで普通に入るくらいになってないと使いたくはないですね



958 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 19:58:22.33 ID:znOgoNn/.net]
この >>951 馬鹿、何言ってるのかよくわかんねぇから、誰か翻訳してくれ。

959 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:00:11.97 ID:znOgoNn/.net]
ああ、>>948 に対して >>949 を言ったと思ったのか。サルだな。
投稿時間をよく見てみろよ、マヌケ

960 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:03:47.46 ID:znOgoNn/.net]
ID:aUw7JVj6 ← 今日採れたての猿

961 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:04:19.65 ID:aUw7JVj6.net]
>>954
え?そういう話じゃないんだけど

962 名前:デフォルトの名無しさん [2016/06/23(木) 20:05:13.04 ID:pXTHavhi.net]
サルサルサルサルさるげっちゅ言うてる奴がサルだったというオチ

963 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:09:48.69 ID:znOgoNn/.net]
>>954
じゃあなんでどういう話か言わないんだ?おさるさん。

964 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:10:09.01 ID:znOgoNn/.net]
アンカー間違えちゃったよ

965 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:12:18.41 ID:znOgoNn/.net]
>>929 とか >>956 はマトモに日本語の会話できんのかな?

966 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:13:28.27 ID:aUw7JVj6.net]
>>958
それこそ >>948 で書いた。
限定された状況下でしか等価にならないものを、知ってか知らずかそれを言わずに ?: や ?? を使えばいいというレスは
正しい情報とはいえないだけ。

967 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:19:11.19 ID:znOgoNn/.net]
>>961

>>938 になんて書いてあるか読めないハゲってことか?

状況が限られてるんだが、PHP7を奨めることになんか問題あんのか?

脳みそないのにお前がハゲになったのは考えすぎたわけじゃなくて遺伝か?



968 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:19:28.62 ID:aUw7JVj6.net]
"?: や" は忘れてくれすまん。

969 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:20:22.45 ID:znOgoNn/.net]
あと、

> それこそ >>948 で書いた。
> 限定された状況下でしか等価にならないものを、知ってか知らずかそれを言わずに ?: や ?? を使えばいいというレスは
> 正しい情報とはいえないだけ。

このクソみたいな日本語は何だ? 中学生でももう少しマシな説明が書けるぞ。

970 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:20:51.96 ID:aUw7JVj6.net]
>>962
確認させて。
>>938 の状況に対して PHP7 を使い、そして ?? を使えばいいというレスをしたってことでいいの?

971 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:22:53.99 ID:znOgoNn/.net]
> "?: や" は忘れてくれすまん。

こいつ何言ってんだ?

?: の場合、$aが設定されていなければNotice吐くんだぞ?
だから >>949 で説明してやったのに。

ここはサル山動物園か?

972 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:23:42.18 ID:znOgoNn/.net]
>>965

他に読めるならどう読むか逆に教えてくれ。

973 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:26:01.78 ID:aUw7JVj6.net]
ありがと。

$a = '0'

974 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:27:10.81 ID:znOgoNn/.net]
>ありがと。
>$a = '0'

それがなんの問題があるんだ? 説明してみろよ。

975 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:28:40.89 ID:aUw7JVj6.net]
試せばわかるでしょ

976 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:28:51.68 ID:znOgoNn/.net]
$a = '0'
$b = 'hoge'

$a = $a ?? $b;

この場合に$aに入って欲しい値を何だと思ってるんだ?

977 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:29:24.06 ID:znOgoNn/.net]
>>970
その言葉、そのまま返すから、何が入って欲しいか言ってみろよ。



978 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:30:34.66 ID:aUw7JVj6.net]
等価じゃないことは確かだから、一概に ?? を使えとはいえないよね。

979 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:31:03.07 ID:znOgoNn/.net]
ほら、話をはぐらかし始めたw

980 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:31:36.67 ID:znOgoNn/.net]
ああ、こいつ、どうやらこの前のシングルクオートエスケープ馬鹿じゃねぇか?

981 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:32:11.22 ID:znOgoNn/.net]
早く何が入って欲しいか答えろよ野猿

982 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:36:14.10 ID:/dY0hFq/.net]
最近変なのが多いな,
「PHPにないんですか?」のID:WHuxwDdZ
「サルと戯れる人」のID:znOgoNn/
ついでにめんどくさいこと分かってるのにわざわざ相手にしちゃうID:aUw7JVj6

983 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:37:40.18 ID:znOgoNn/.net]
>>973

「私は“何が入って欲しいか答えろ”と言いました。
するとどうでしょう?
彼は何もしゃべらなくなりました。
あなたは自分の答えに自信があったんですよねぇ。
あなたは猿じゃないんですよねぇ。ID:aUw7JVj6さん」

https://www.youtube.com/watch?v=wVFNAAHccqA

984 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:38:47.51 ID:znOgoNn/.net]
>>977

この状況で単発で ID:aUw7JVj6 擁護って、随分肝っ玉の大きいこって。

985 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:39:39.42 ID:znOgoNn/.net]
>最近変なのが多いな,

PHPerって本当に自己紹介が得意だよな。尊敬するわ。

986 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:39:50.55 ID:aUw7JVj6.net]
>>978
何が入ってほしいかは質問者しか知らんよ。
で、あなたは挙動の異なる演算子を提示した。
それだけの話。

987 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:41:05.93 ID:znOgoNn/.net]
>968 : デフォルトの名無しさん2016/06/23(木) 20:26:01.78 ID:aUw7JVj6
>ありがと。
>
>$a = '0'

言った後自分で試してみてびっくり m9(^Д^)プギャーーーッ



988 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:41:49.13 ID:znOgoNn/.net]
>>981
ほら、更に話をはぐらかし始めたww

989 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:43:04.83 ID:znOgoNn/.net]
これが、これこそがPHPerなのです。皆さん、どうぞ ID:aUw7JVj6 を宜しく。

>ありがと。
>ありがと。
>ありがと。
>ありがと。
>ありがと。

>$a = '0'

990 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:45:15.70 ID:znOgoNn/.net]
>何が入ってほしいかは質問者しか知らんよ。
>で、あなたは挙動の異なる演算子を提示した。

望む挙動がお前にはわからないのに、なんで異なるって分かるの? おさるさん

>それだけの話。

どれな話なの? ちゃんと説明してくれる?

991 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 20:46:11.95 ID:znOgoNn/.net]
>ありがと。
>ありがと。
>ありがと。
>ありがと。
>ありがと。

>$a = '0'

アホすぎる! アホがすぎるぞ! ID:aUw7JVj6 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)


992 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 21:03:01.96 ID:8l+T8FXA.net]
次スレ立てます

993 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 21:06:15.49 ID:/dY0hFq/.net]
>>987
頼んます

前も言ったけどテンプレ古臭過ぎるので要検討

994 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 21:06:46.23 ID:aUw7JVj6.net]
ワッチョイつきが立ってるよ

【PHP】下らねぇ質問はここに書き込みやがれ 5 [無断転載禁止]©2ch.net
echo.2ch.net/test/read.cgi/tech/1462971286/

995 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 21:09:32.67 ID:8l+T8FXA.net]
次スレ
echo.2ch.net/test/read.cgi/tech/1466683550/

996 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 21:11:23.06 ID:8l+T8FXA.net]
立ててしまった・・・
どちらを使うかはおまかせします

997 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 21:17:37.65 ID:/dY0hFq/.net]
あー, 重複スレがあったのか。
すっかり忘れてた, すまんな



998 名前:デフォルトの名無しさん [2016/06/23(木) 21:47:29.07 ID:pXTHavhi.net]
こんな過疎スレに一日30回近く書き込みする物好きがいると聞いて見物している

999 名前:デフォルトの名無しさん [2016/06/23(木) 22:09:04.47 ID:pXTHavhi.net]
さっさと埋めろや無能ども

1000 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 22:12:48.63 ID:WHuxwDdZ.net]
issetを使っているところをエルビス演算子に置き換えてみたのですが
@でエラー出力を抑制しても、
エラーハンドラをセットしている時にはしっかり呼び出されてますね・・
エラー出力を抑制しないといけないところに使うのは、
あまり筋のいい書き方ではないですね

1001 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 22:29:59.73 ID:ISrN3FK4.net]
?: は便利な書き方だけど $a を boolean として評価した結果と選択したい方が一致しない場合には使いづらいな。
$a が文字列だとして空の時に特別な表示をしようと
echo $a ?: '未設定';
なんてやった場合、$a が '0' だったりすると意図から外れちゃうもんな。

便利な書き方なんだけど惜しい。

1002 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 22:39:41.33 ID:BeTIQhqe.net]
?:は、@$foo にしないとやってられない…

1003 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 22:44:17.42 ID:ISrN3FK4.net]
@ もまた使いづらい。
特に変数が配列だったりすると、内部的には配列のコピーが作られてパフォーマンスに影響があるんだよね。
@$_POST['foo'] の場合にこのキーが無ければ、$_POST がコピーされ foo に対応する値が null な配列を作り出し、式としては null を返し、作った配列は捨てちゃうと。
なんでこんな実装になってるんだろ。

1004 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 23:01:44.89 ID:/dY0hFq/.net]
そもエラー抑制演算子なんて相当の理由がなければ使うべきじゃないし

楽したいならそういう機能のある新しいバージョン使う方が絶対に正しい
新しいバージョンが使えない, 使いたくないというのであれば, 楽をするのはあきらめて素直にissetで定義済みか確認せねばならん

1005 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 23:08:30.51 ID:ISrN3FK4.net]
>>999
まあな。
ただ、配列に関して言えば array_key_exists より isset の方がパフォーマンスがいいというのは微妙に納得いかないw
いや isset の方が楽で助かるけどさ。

1006 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 43日 1時間 21分 40秒

1007 名前:1002 [Over 1000 Thread.net]
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
premium.2ch.net/
pink-chan-store.myshopify.com/




1008 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<272KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef