16/05/27 11:48:53.10 h8G6TOQH.net
>>328
そういうのはいいから
教えてたもれ
331:デフォルトの名無しさん
16/05/27 11:55:49.79 LOelchbu.net
仕事にするならば、
unix系OSやプログラミングの包括的な知識が必要です
phpで何かを作ることを通してどちらも学ぶことができます
phpを学ぶのではなく、phpで学ぶという姿勢が大切でしょうね
332:デフォルトの名無しさん
16/05/27 13:14:26.53 IKjJ7pmy.net
>>330
さすがです
更に教えてくだされ
333:デフォルトの名無しさん
16/05/27 13:34:33.33 LOelchbu.net
特に教えるようなことはありません
勉強のための勉強はモチベーションが続きませんので
こういうことしたいけどどうしたらいいかな?
という興味を繋げていくことが重要ではないでしょうか
そういうやりたいことや作りたいもののイメージを広げて下さい
phpはあくまでそれを実現するための手段です
334:ペチパーネ申
16/05/27 17:35:20.12 zQx7HNv7.net
そういうことだな。とにかくサイトを作るべき。セキュアなんかどうでもいい。
知識だけ増えてコードもかけない。サイトも作れないヤツは役立たずだから。
335:デフォルトの名無しさん
16/05/27 18:38:46.96 bzamVpC0.net
そこでWordPressですね!
336:ペチパーネ申
16/05/27 19:55:17.82 zQx7HNv7.net
ムーバブルタイプ()になるなんてなぁ。やっぱりPHP最強ですな!
337:デフォルトの名無しさん
16/05/27 21:23:47.23 XOMWEtHe.net
バカが居着いたな。
338:デフォルトの名無しさん
16/05/27 22:49:32.10 bzamVpC0.net
ID:XOMWEtHe を超える馬鹿はいまだに現れないけどなw
339:デフォルトの名無しさん
16/05/28 07:56:40.52 dedHu0lv.net
シェルスクリプトで構築したものをPHPで書き直していますが
やはりオブジェクト指向で書けるのが素晴らしいですね
ウェブという過酷な現場で鍛え上げられた堅牢性
ライブラリのincludeに気を使う必要のない手軽さ
何で使わないの?あほなの?
340:デフォルトの名無しさん
16/05/28 08:19:51.18 yOItZUQa.net
>>338
PHP 覚えて楽しくて仕方ない時期なんだね
結構結構
341:デフォルトの名無しさん
16/05/28 08:26:58.15 dedHu0lv.net
rubyやpythonは生言語で書かれているライブラリの内部でエラーが出ることが少なくありません
これには非常に意気を奪われますが
PHPの場合、まずありません
これがどれだけ生産的なことか
342:デフォルトの名無しさん
16/05/28 08:42:46.05 fjaQwAHl.net
まずはWordPressですね
343:デフォルトの名無しさん
16/05/28 08:56:25.74 xHO8PG3F.net
細かいこと気にせず書く
硬く書く
どっちも書きやすいのは良いことだ
344:デフォルトの名無しさん
16/05/28 10:22:43.51 p586PW/3.net
PDOの接続処理を try/catch 文で囲んだ場合、
ERRMODE_WARNING と ERRMODE_EXCEPTION に違いはあるのでしょうか?
ERRMODE_WARNING についても、「PDOException をスローする」とあります。
ERRMODE_EXCEPTION について、「ERRMODE_WARNING と同様にデバッグ時に有用で、
エラーが発生した時点でスクリプトの実行を停止させる」とあります。
両者の違いと効果がいまいちわかりません。
本番環境では、ERRMODE_EXCEPTIONを使い、
開発環境では、ERRMODE_WARNING を使うということなのでしょうか?
よろしくお願いします。
URLリンク(php.net)
345:デフォルトの名無しさん
16/05/28 14:12:08.49 k1q+IunE.net
>>343
ERRMODE_WARNINGはコンストラクタでは例外を投げるがそれ以外では投げない
ERRMODE_EXCEPTIONはエラー発生時には常に例外を投げる
と読めるが?
346:デフォルトの名無しさん
16/05/28 14:44:55.97 9P0W7UNJ.net
>>344
ありがとう。
ERRMODE_WARNINGは、自動的にエラーを出力するけど、
ERRMODE_EXCEPTIONは、$e->getMessage();しないとエラー出力しない。
ただし、ERRMODE_WARNINGでもコンストラクタ、つまり、new PDO($dsn...
で接続に失敗した場合、例外が投げられるからcatchしろということですよね。
本番環境でも、エラーログにエラーを吐いて欲しい場合には、
ERRMODE_WARNINGがいいのかな。
347:デフォルトの名無しさん
16/05/28 14:46:33.86 fPcEGIkd.net
> ERRMODE_WARNING についても、「PDOException をスローする」
どこに書いてあるの?
348:デフォルトの名無しさん
16/05/28 15:02:57.30 9P0W7UNJ.net
>>346
URLリンク(php.net)
この例2のコメント部分です。
/*
ERRMODE を WARNING にした場合でも、コンストラクタを try/catch で囲むのは有効です。
接続に失敗した場合、ERRMODE が何であろうが PDO::__construct が PDOException をスローするからです。
*/
349:デフォルトの名無しさん
16/05/28 17:07:34.65 wZkOO3aE.net
>>338
phpってオブジェクト指向なのですか?
クラスも使えますか?
350:デフォルトの名無しさん
16/05/28 17:25:38.54 dedHu0lv.net
>>348
もちろん使えますよ
351:デフォルトの名無しさん
16/05/28 17:32:43.71 wZkOO3aE.net
>>349
知らなかった。
ありがとうございました。
352:デフォルトの名無しさん
16/05/28 17:49:06.65 k1q+IunE.net
>>345
まともなソフト作るならちゃんと例外処理しろよ
Warning発生時でも処理が継続するってことは, Warningが起こるような処理については内容は一切保証しませんと言ってるのと同じ
353:デフォルトの名無しさん
16/05/28 20:28:31.30 6ztlzLBo.net
>>351
なるほど。WARNINGは、エラーでも実行継続しちゃうんだった。
本番環境も開発環境も、ERRMODE_EXCEPTIONで例外処理するのが正解なんだね。
しかしもう修正不能だ・・・
354:デフォルトの名無しさん
16/05/28 20:51:24.53 6ztlzLBo.net
というかPHPって例外を投げないエラー処理が多いんだった。
throw new ErrorException で自分で例外投げないとダメなんだね。
URLリンク(php.net)
355:デフォルトの名無しさん
16/05/28 21:24:07.26 H5MBEWMU.net
途中で例外処理が追加されたので、互換性のためにって感じだっけ?
フラグで例外を投げるかどうか決めれるやつもあったと思うけど、
これらは比較的新しい関数ってことなのかしら
356:デフォルトの名無しさん
16/05/28 22:05:45.93 dedHu0lv.net
fgetsのlengthが長さ-1なのは何故でしょうか?
357:デフォルトの名無しさん
16/05/28 23:16:23.24 O5lAFAJB.net
throwが便利だからだろうね
大元の呼び出し元まで返るからね
フラグだと全部リターンしないと呼び出し元まで返せないし
フラグじゃないものをリターンしたいのが普通なのでフラグリターンはきつい
358:デフォルトの名無しさん
16/05/28 23:36:37.59 0iKr5py8.net
どうしてペチパーのママはドブスばかりなのか
359:デフォルトの名無しさん
16/05/29 03:17:47.75 YpkEX6Ke.net
例外絡みで1つ質問。
catchでのException $eが不要なとき、どう書けばいいの?
360:デフォルトの名無しさん
16/05/29 03:27:36.66 v+3vzfaj.net
不要ってなんだ
catch対象を書かなきゃ何をcatchしていいかわかんないじゃん
361:デフォルトの名無しさん
16/05/29 04:23:12.88 YpkEX6Ke.net
ああすまん、言い方が悪かった。
catchのブロック内でその$eを使わないとき、だな。
そのまま放置でも良さそうだけど、できれば使ってないことを明示したい。
例えばブロック開始直後にunset($e)とか、なんか良い方法ないかな。
せっかく補足したんだからログに残すなり何なりしたほうが良いのは分かってるけども。
362:デフォルトの名無しさん
16/05/29 05:38:44.51 DYRgDF3k.net
関係ないかもしれんけど、キャッチアンドリリースって聞いたことあるよ。
363:デフォルトの名無しさん
16/05/29 05:43:03.00 YpkEX6Ke.net
>>361
それは、catchするけど何もしない(PHPならそもそもcatchしない?)、
あるいは、そのまま上に投げることを指すんじゃない?
364:デフォルトの名無しさん
16/05/29 05:47:10.95 v+3vzfaj.net
俺はなんかキャッチアンドゴーとかそんな感じのを聞いたことある気がする
unset($e)か、コメント書くか、なんか使わないよ的な変数名をあてるか、くらいしかないんじゃないかなあ
365:デフォルトの名無しさん
16/05/29 06:00:33.97 lJ1NKQbg.net
使わないことを明示することに如何な意味があるのか
366:デフォルトの名無しさん
16/05/29 07:31:25.42 oxnJSJpj.net
>使わないことを明示することに如何な意味があるのか
サルなりに、安心できる
367:デフォルトの名無しさん
16/05/29 07:51:39.25 Ij8AE099.net
他を下に見てサルと蔑むことで自我を保てる基地外が来ましたね
368:デフォルトの名無しさん
16/05/29 08:06:51.99 YpkEX6Ke.net
>>364
直接的な理由としては、IDEが未使用変数に対して注意を促してくるから、かな。
心情的にも、宣言しておいて宙ぶらりんというのはちょっと収まりが悪い。
言語によっては、型名を書くだけ(要は$eの部分がない)とか出来るじゃん?
PHPにもちゃんとしたやり方があるなら、それを知りたかった。
369:デフォルトの名無しさん
16/05/29 08:08:29.92 YpkEX6Ke.net
>>363
変数名で使わないことを示すというのは、いいな。
370:デフォルトの名無しさん
16/05/29 09:13:09.97 WmC7AS7k.net
初心者のうちは例外の意味がわからないだろうから無理もないんだけどさ
処理の前に全部確認してreturnするかthrowする習慣つけなよ
例外発生しても無視とか悪習にしかならない
371:デフォルトの名無しさん
16/05/29 09:17:39.43 VGuceG8q.net
俺は例外処理の意味が分からなくて、全部
try{
Hoge();
}(FooExなんちゃら e){
System.out.println(e);
}
してた
あと独自例外クラスの意味が分からなくて、例外クラスに例外発生条件を書くのかと思っていた
372:デフォルトの名無しさん
16/05/29 11:14:52.46 YosV+ioq.net
>>360>>367
その場合はtry~catch節は書かない
上位の呼び出し元でcatchする
373:デフォルトの名無しさん
16/05/29 14:48:05.67 Pqoknlps.net
>>371
その関数内で例外を補足したい場合はどうするん?
あとはその上位でも$eを参照しないとか、あるいはそもそも最上位の場合とか。
374:デフォルトの名無しさん
16/05/29 15:48:46.36 Yjs1g498.net
データベースに配列[1, 2, 3]突っ込む場合
1.jsonに変換して突っ込む
2.explodeなりで「1,2,3」と突っ込む
正解はどっち?
375:デフォルトの名無しさん
16/05/29 16:06:57.93 GBRDVTrG.net
何に使うのかが分からないけど、タグ付けが目的なら
適当な区切り文字で繋いでそのまま格納が使いやすそうだな
376:デフォルトの名無しさん
16/05/29 17:04:53.25 lJ1NKQbg.net
>>372
例外をキャッチするけれどもその中身を見ないというのはあまりよい習慣とは思えないけど, IDEの警告を消したいならまぁunsetだろうなー
>>373
用途にもよるが一般にはどっちも不正解
とりあえず「SQL JayWalking」でググってみれば
377:デフォルトの名無しさん
16/05/29 17:06:33.06 oxnJSJpj.net
>>373
>データベースに配列[1, 2, 3]突っ込む場合
>2.explodeなりで「1,2,3」と突っ込む
おまえのPHPは配列をexplodeできんのか。すげぇな。
378:デフォルトの名無しさん
16/05/29 17:55:56.21 Pqoknlps.net
>>375
throwが、自分で投げたやつ1つだけとかだったり
型名から例外の内容が明らかだったりすると、$e->getMessage()とかする必要なさそう
379:デフォルトの名無しさん
16/05/29 18:08:58.73 v+3vzfaj.net
ごめんあれタッチアンドゴーだった
380:デフォルトの名無しさん
16/05/29 20:52:18.18 4cJk/zi6.net
>>373
そういうデータの格納の仕方をしても問題の無いカラムだという前提でだけど、
スペース区切りで join した上でさらに先頭と末尾にスペースを付与するってのはどうかな。
その例だと ' 1 2 3 ' って感じ。
まず元の配列に戻すには、trim して explode すればいい。
先頭と末尾に付与する文字をスペースにしてるのはこの trim をしやすいようにするため。
で、後述の事情により値の区切り文字はここで付与する文字に合わせる必要があるので、区切りもカンマではなくスペース。
んじゃそもそも先頭と末尾になんでそんな余計な文字を付与するのかというと、配列の要素の値を LIKE検索できるように。
配列内に 2 という値を持っている行で絞り込むには、 column LIKE '% 2 %' のように、絞り込みたい値の先頭と末尾に区切り文字を付けておく。
単に column LIKE '%2%' じゃいけない理由は少し考えれば分かると思う。
んでこの都合により、カラム内の最初の値の前には区切り文字がある必要があるし、最後の値の後にも区切り文字がある必要がある。
だからカラム値そのものの先頭と末尾に区切り文字を付けておく必要がある。
381:デフォルトの名無しさん
16/05/29 21:08:13.99 jwA+uuOB.net
>>352
エラー処理してなかったってことかな
382:デフォルトの名無しさん
16/05/29 21:12:46.02 f+JrLvVy.net
wgetでしていたリモートファイル取得を
phpのcurlに置き換えたら処理時間が二倍くらいになりました
curlは遅いのでしょうか?
383:デフォルトの名無しさん
16/05/30 00:17:44.24 EYocVjlD.net
具体的にはwgetは0.12秒、curlは0.41秒といったところです
384:デフォルトの名無しさん
16/05/30 00:38:44.97 cVhChvSa.net
>>379
こういうクソみたいな長文を自信満々に書いちゃうからPHPerはクソだって言われるんだよな。
385:デフォルトの名無しさん
16/05/30 01:10:51.70 MSwmOpiD.net
>>383
何をクソか言えればお前はクソじゃなくなるんだけどな
386:デフォルトの名無しさん
16/05/30 01:38:07.20 cVhChvSa.net
誰がどんな書き込みをしたか把握できないバカは何を見てもクソだと思う。
つまり、お前がオレをクソだと思うのはお前が低能でクソなことが原因だから、そんなの知った事か。
レスを全部読み返せ、マヌケ。
387:デフォルトの名無しさん
16/05/30 01:46:43.83 EfYZ+SoU.net
>>379
検索のことを考えねばならない時点で前提が崩壊している
388:デフォルトの名無しさん
16/05/30 02:07:44.13 EYocVjlD.net
file_get_contentsのタイムアウトのことを調べると
タイムアウトは出来ないとか、設定した値の二倍かかるとか
いろいろな説が出てきますが
何が正しいんですか?
389:デフォルトの名無しさん
16/05/30 02:11:49.06 MSwmOpiD.net
>>385
よくわからんが、>>373 に対してレス付けてるのから判断するとお前は >>375 だと言ってるのかね?
でもそれじゃ >>379 の何がクソだと言ってるのかは分からんから、お前は >>376 なのかね?
んまあどれが誰かなんて興味は無いのでどうでもいいが、>>379 の論点のクソさを具体的に示せてないんだからお前もクソだろう。
>>386
データ規模によるっしょ。
他のインデックスが効くキーで充分に絞り込めてるレコードをさらに絞るとか。
あんまりうまい例えはパッと出てこないけど、生徒マスタなんかクラスで40名程に絞り込んだ中から、好きな教科カラムに「数学」を含む生徒だけを取り出すとか。
390:デフォルトの名無しさん
16/05/30 02:51:30.51 +KPM1br2.net
大人しく正規化しろ。すべて解決だ
391:デフォルトの名無しさん
16/05/30 03:29:38.26 EfYZ+SoU.net
>>388
正規化しなくてもいい理由を考えるんじゃなくて, 正規化された状態だと問題がある場合に限って非正規化な構造を採用すべき
392:デフォルトの名無しさん
16/05/30 07:03:49.14 cVhChvSa.net
>>388
サルが必至にクソな論理を構築しようとした結果の超クソレス。
サルだからこういうレスをしても恥ずかしくないらしい。サル、最強だ。
393:デフォルトの名無しさん
16/05/30 07:43:17.72 cVhChvSa.net
多分、>>379 や >>388 みたいな奴って、
URLリンク(qiita.com)
これとか読んでも
> ユーザーが “banana” のような無効な入力を行ってしまうことを、どうやったら防げるでしょうか。
って文章があるだけで頭の中がバナナで一杯になっちゃって他の文章が全く頭に入ってこなくなるんだよ。
技術系の発信する時は「バナナ」は禁句だってあれほど口をすっぱくして言ってるのに、未だに理解されないよな。
394:デフォルトの名無しさん
16/05/30 07:51:23.15 cVhChvSa.net
>んまあどれが誰かなんて興味は無いのでどうでもいいが、
誰がどれか、なんて話してねぇよサル。
誰がどんな事を既に言ったのかって話をしてるんだ。おまえ脳みそにシワあるのか?
395:デフォルトの名無しさん
16/05/30 07:54:27.98 v4ZBbWmE.net
>>392の
> ユーザーが “banana” のような無効な入力を行ってしまうことを、どうやったら防げるでしょうか。
これ、qiita記事の元っぽい以下のURLだと濁点の分離や記号の全角化は起きてないようにみえる
URLリンク(github.com)
同qiita記事書いた人の別の記事でも濁点の分離や記号の全角化がされた文章がいくつかある
こういうのってどういう局面で起きるものなの?
396:デフォルトの名無しさん
16/05/30 08:09:01.66 MSwmOpiD.net
>>390
正規化の是非は >>373 が判断することで、今は正規化しない場合のデータ表現についての話でしょ。
だったら JSON でもカンマ区切りでもその他の表現でも、どうするとどう活用できるかについてが議題じゃないのかな。
397:デフォルトの名無しさん
16/05/30 08:27:40.56 EfYZ+SoU.net
>>395
> 今は正規化しない場合のデータ表現についての話でしょ
>>373を読む限りそもそも正規化を知らないものと理解するが。
398:デフォルトの名無しさん
16/05/30 08:30:06.63 EfYZ+SoU.net
>>394
UnicodeのNFDとNFCで調べてみるといい
OS X上でマルチバイトファイル名入りのGitリポジトリとか扱うときに問題になる
399:デフォルトの名無しさん
16/05/30 08:44:38.54 MSwmOpiD.net
>>396
あー、言われてみればそんな気もしてきた。
でもデータベースというのは実は KVS とかだったりして。
400:デフォルトの名無しさん
16/05/30 09:55:15.32 v4ZBbWmE.net
>>397
Macなのか!あとで調べてみるサンキュー
401:デフォルトの名無しさん
16/05/30 10:05:11.31 b2mZbZ2D.net
サル・猿をNGワードでスッキリ
402:デフォルトの名無しさん
16/05/30 10:32:30.47 RFK4Vliv.net
>>397
OS XのiTunesの音楽ファイルをtar zipで固めてlinuxに持ってったときハマったなあ
ファイル名が曲名だったから日本語ばかりで、濁点が全部別文字になったw
当時NFC,NFD処理できるうまいライブラリがPerlしかみつからなくて
Perlのスクリプト書いて修正したっけな
403:デフォルトの名無しさん
16/05/30 11:27:17.60 b2mZbZ2D.net
PHPをモノにするにはWordPressでサイト構築が最も効果的であります
404:デフォルトの名無しさん
16/05/30 12:21:09.96 EYocVjlD.net
$http_response_headerという変数がありますが
特殊な変数なのに何故「$_大文字」のような形ではないのでしょうか?
普通に付けそうな名前ですし、まずいと思います
405:デフォルトの名無しさん
16/05/30 12:40:19.92 y++iLJ96.net
>>403
細かいことを気にしたら一流のペチパーになれないぞ
406:デフォルトの名無しさん
16/05/30 12:55:38.98 cGJHwTA3.net
>>400
一生現実から目を背けてろ、このエテ吉が。
407:デフォルトの名無しさん
16/05/30 16:07:54.41 8XzSUPs+.net
phpのことで悩むのやめた
女の子誘って温泉いってくるわ
408:デフォルトの名無しさん
16/05/30 16:16:46.03 bSPgiDOZ.net
>>403
特殊ってわけでもないんだよな$http_response_headerはローカルなんだ
409:デフォルトの名無しさん
16/05/30 16:39:01.00 EYocVjlD.net
$_系はグローバルなので小文字ににしたということですね
それならまあ納得です
ありがとうございました
410:デフォルトの名無しさん
16/05/30 19:49:38.97 LmMFghTu.net
>>355
内部の処理で文字列の最後に1バイト文のNULL文字'¥0'が自動で付加されるから
411:デフォルトの名無しさん
16/05/30 20:02:26.02 1Y2aZH/o.net
>>409
ほんとに?
412:デフォルトの名無しさん
16/05/30 20:03:59.91 EYocVjlD.net
>>409
わっ、そうなんですね
ちょうどそれが原因のバグに当たっていたところです
fgetsはバイナリで読むと思いこんでいました
ありがとうございます
413:デフォルトの名無しさん
16/05/30 23:40:21.19 EfYZ+SoU.net
>>409
それはC/C++に於ける実装だ
PHPではヌル文字は文字列終端を意味しない(zend_stringの実装を見るとよい)
実際fgetsはバイナリセーフでヌル文字があっても改行文字かEOFにあたるまで読み続ける
fgetsの引数の$lengthがそのような実装であるのは, C/C++に於けるfgetsの引数lengthとの互換性を持たせるためだろう
ただまぁfgetsのプロトタイプ自体がC/C++とPHPでは全く異なるからそこだけ合わせてもアレだけども
414:デフォルトの名無しさん
16/05/31 01:57:54.79 +9fDSi7f.net
あー、functionやreturn省略できねーかなー
415:デフォルトの名無しさん
16/05/31 04:34:17.37 4Jh5cWvX.net
functionはともかくreturn省略したらvoidとの区別がつかんやろ
416:デフォルトの名無しさん
16/05/31 05:40:01.58 X6HwP8rQ.net
俺はswitchのbreakを省略したい。
switchはbreakで区切るのではなく、continueで連結するようにすべきだったはずだ。
417:デフォルトの名無しさん
16/05/31 06:23:56.21 37ByNeIc.net
>>415
複数の値で同じ処理をする時に case ばかりを並べる場合はデフォルトでフォールスルーになってる方が便利だけどな。
でもそれ以外でフォールスルーを活用できるパターンも少ないように思うから、個人的にはどっちでもいいと言えばどっちでもいい。
ただ既存言語に合わせておいた方がトラブルが少ないんじゃないかと思う。
418:デフォルトの名無しさん
16/05/31 11:42:05.04 BNvwfi7N.net
やはり、PHPをマスターするにはWordPressでのWebサイト構築が最も効果的なのでしょうか?
419:デフォルトの名無しさん
16/05/31 12:09:34.37 pF41PCQ4.net
一番遠回りの道を何故選ぶ?
ヒマなのか?
420:デフォルトの名無しさん
16/05/31 13:10:11.01 BNvwfi7N.net
>>418
代案を出さなきゃサル呼ばわりされちゃうよ?
421:デフォルトの名無しさん
16/05/31 13:29:03.85 rEPhaK+h.net
自分でブログなり何なりを作って運用する。
cmsははノンプログラマの逃げ技だと思っている。
422:デフォルトの名無しさん
16/05/31 15:21:14.32 WEIThh9S.net
mkdir('/tmp/hoge/hoge', '0777', true);
としたところ、/tmp/hogeまでは作成されましたが
その下が権限エラーで作成できませんでした
再帰的に作成するというのだから、
それまでのパーミッション設定までしてくれていいんじゃないかと思うんですが
何故こんな挙動なんですか?
自分でループなどで作らないといけないということでしょうか?
423:デフォルトの名無しさん
16/05/31 15:25:18.97 CpuDRB98.net
>>421
それってもしかして、
/tmp の下に hoge がない状態で、
/tmp/hoge/hoge を作ろうとしたの?
424:デフォルトの名無しさん
16/05/31 15:26:51.23 WEIThh9S.net
>>422
そうですよ
再帰的に作成っていうのはそういうことでは?
425:デフォルトの名無しさん
16/05/31 15:27:11.59 3Enb+VVF.net
mkdir('/tmp/hoge/hoge', 0777, true);
426:デフォルトの名無しさん
16/05/31 15:28:11.55 LdI3VN67.net
>>421
'0777' => 0777
427:デフォルトの名無しさん
16/05/31 15:41:01.77 WEIThh9S.net
>>424-425
パーミッションの書き方が間違ってたのですね
ありがとうございました
428:デフォルトの名無しさん
16/05/31 17:01:
429:22.48 ID:pF41PCQ4.net
430:デフォルトの名無しさん
16/05/31 17:27:16.13 xVlROlYS.net
今回のは、'0777' をphpが10進数の777にしてしまったケースだね
0777 は8進数なので正しく設定できる
431:デフォルトの名無しさん
16/05/31 18:55:58.27 X6HwP8rQ.net
>>420
wordpressはCMSですらない。あれはただのブログシステム。
ブログシステムとしては素晴らしい出来だが、
あれでコーポレートサイトとか作る奴は後先考えない、はた迷惑なマヌケ。
432:デフォルトの名無しさん
16/05/31 18:59:28.64 MlesSNZX.net
>>429
根拠を具体的に教えてくれ
煽りとかじゃなくてWordPress扱ったことないんだ
433:デフォルトの名無しさん
16/05/31 19:10:23.60 WPXjVdwG.net
中小零細もそこそこ大きい会社でもCMSシステムを実装して納品してもちゃんと使ってくれないんだけど。
WPも結局、記事投稿してないところが大半。しても業務日報。宝の持ち腐れ。意味ねーよ。
434:デフォルトの名無しさん
16/05/31 19:21:34.07 37ByNeIc.net
>>431
CMS使ってくれないよねぇ。
先方の担当者だけで回せるようにと要求に沿ったものを作ってあるのに、結局こっちに運用を回してくるというw
435:デフォルトの名無しさん
16/05/31 20:06:34.71 X6HwP8rQ.net
>>430
ん? まず、コードがクソ。
全く抽象化されておらず、このご時世にフラットなコードを細切れにしてるだけのクソ設計。見通し最悪。
DBモデルデザイン、超クソ。
カスタムフィールドを実現するためにとったDB設計がクソの骨頂。
そのせいで、DBアクセスが凄まじく重い。とってきたデータをPHPでforeachループしまくるので遅さははんぱない。
RDB使ってる意味が全く無いクソ設計。
そんなんだから、普通ならコンマゼロ数秒で返せるレスポンスを数秒単位かけて返す。
なんかくるくる回りまくる。
アクションフックとか超クソ。
そんなん、Wordpressでしか使わない。PHPの知識は全く役に立たない。
あれはPHPじゃなくてWordpressという言語。
PHP覚えれば大抵のことは出来るはずなのに、一度Wordpressを使おうと思ったらまた0からやり直し。本当にクソ。
全ファイルドキュメントルート下。本当に頭おかしい。
リンクに片っ端からwp-なんたらいうディレクトリ名があって、
「わたしWordpressちゃんつかってまー」と公共の場で宣言しまくり。頭おかしい。
次から次へと脆弱性発見されるから更新推奨されまくり。
安い金で一度導入したら、あとは死ぬまでアップデートするかしないか地獄。
アップデートしなければカモ、したら動かなくなるかもしれん危険と隣合わせ。使うやつマジマゾ。
こんなんでいい? まだ言う?
436:デフォルトの名無しさん
16/05/31 20:14:58.84 MlesSNZX.net
>>433
軽い気持ちで聞いた俺が悪かった 謝る
437:デフォルトの名無しさん
16/05/31 20:18:03.23 N6PjvSqh.net
じゃあ、これなら良いと言うものを作って見せて
438:デフォルトの名無しさん
16/05/31 20:18:34.68 X6HwP8rQ.net
>>434
「Wordpressを使うものはさらにおぞましきものを見るだろう」
439:デフォルトの名無しさん
16/05/31 20:20:17.34 X6HwP8rQ.net
>>435
お前が普段目にして「これはいい」と思った物は、もしかしたらオレが作ったも物だ。
お前が「これはいい」と思った物がないなら、それは今オレが作っていてまだ世に出ていないからだ。
440:デフォルトの名無しさん
16/05/31 20:27:07.76 N6PjvSqh.net
期待しているよw
441:デフォルトの名無しさん
16/05/31 20:29:00.66 WEIThh9S.net
そうか
パーミッションって八進数で書いてるだけで、本質は整数なんですね
だから0777は10進数で511と書いているのと同じ
それが分かっていたら文字列にすることもなかったですね
442:デフォルトの名無しさん
16/05/31 20:31:28.66 X6HwP8rQ.net
>>438
うむ。期待してくれたまえ。以下に自分がマヌケだったかを思い知らせてくれよう。
443:デフォルトの名無しさん
16/05/31 20:32:59.53 X6HwP8rQ.net
>>439
10年前のオレ、ようこそ。お前は成長する。
444:デフォルトの名無しさん
16/05/31 21:37:52.60 XoeoyrEz.net
concrete5ってどうですか?
445:デフォルトの名無しさん
16/05/31 22:32:35.67 ghr06yjT.net
>>414
無名関数のときだけは、
Perlのreturn仕様(省略時は最後の式が返るとかそんなん)が羨ましく思える
446:デフォルトの名無しさん
16/05/31 22:35:23.07 MhuNyaGk.net
パナマ文書流出したのもWordPressだよね
ウェブに重要文書置くなというのはわかるが
セキュリティホール対策頻繁にやらないといかんのはきついね
447:デフォルトの名無しさん
16/06/01 10:26:11.68 fICAMZhq.net
PHPの基礎は学んだ
まずは何を作ってみるのがいい?
448:デフォルトの名無しさん
16/06/01 14:40:16.20 VVSddd00.net
話し相手になってくれるサイトを作る
449:デフォルトの名無しさん
16/06/01 15:31:09.74 wQ3dwFqG.net
>>446
例えば?
450:デフォルトの名無しさん
16/06/01 15:36:51.26 VVSddd00.net
あたかも誰かがチャットの相手してくれているかのように
451:デフォルトの名無しさん
16/06/01 15:43:44.93 jVC0+jUB.net
作りたいものを作ればいいのに。
作りたいものがないなら作らなければいいのに。
452:デフォルトの名無しさん
16/06/01 15:53:04.28 44n+CxQk.net
>>448
そんなサイトがあたかもしれない。
453:デフォルトの名無しさん
16/06/01 17:01:57.45 O+gTBZeC.net
チャットルーレット
454:デフォルトの名無しさん
16/06/01 18:58:44.73 o4JIGiaf.net
文字列をシングルクォートで囲んだ場合エスケープしないと理解していますが
'\'
がエラーになりました
echo '\\'
だと\が表示されます
シングルクォートでも\だけはエスケープされるのでしょうか?
455:デフォルトの名無しさん
16/06/01 19:09:39.19 ldMD50kq.net
シングルクオートだろうが、ダブルクオートだろうがエスケープされる。
シングルクオートは変数展開がされない。
つまり、お前の勘違い。
456:デフォルトの名無しさん
16/06/01 19:24:10.78 o4JIGiaf.net
echo 'abc\nabc';
と
echo "abc\nabc";
で表示が変わりますよね
変数展開だけではないように見えますが
457:デフォルトの名無しさん
16/06/01 19:54:00.25 O+gTBZeC.net
マニュアル見ろよ
458:デフォルトの名無しさん
16/06/01 20:15:21.36 rdHAS6On.net
>>454
よく読め
URLリンク(php.net)
459:デフォルトの名無しさん
16/06/01 20:24:48.47 o4JIGiaf.net
シングルクォートで囲んだ場合でも
シングルクォートとバックスラッシュはエスケープする必要があるのですね
シングルクォートをエスケープする必要があるので、
バックスラッシュもエスケープしなければならないということですね
ありがとうございました
460:デフォルトの名無しさん
16/06/01 20:29:50.97 RA3wR2In.net
シングルクォートの中のシングルクォートのエスケープは SQLと同じようにダブルシングルクォートだった方がよかったな、なんてちょっと思うな。
461:デフォルトの名無しさん
16/06/01 21:10:43.25 o4JIGiaf.net
後ろに\と'以外が来た時には
エスケープシーケンスとしての指定がキャンセルされるのか・・
と思いましたが
もともとエスケープシーケンスはそういう挙動をするものですね
あまり深く考えたことがなかったですが
462:デフォルトの名無しさん
16/06/01 21:35:52.06 GiudJL8+.net
名前空間って使う?
463:デフォルトの名無しさん
16/06/02 00:06:26.06 IwpY6iix.net
クラスと名前空間のどっちかは使ってる
464:デフォルトの名無しさん
16/06/02 06:29:17.74 7N0T/hEv.net
必要な時は使う。いらない時は使わない。
お前はそれを使っていると呼ぶだろう。
465:デフォルトの名無しさん
16/06/02 09:17:10.28 jhQNhgjV.net
名前空間って名前が被るのを防ぐために使うんだよね?
だったら被らないような名前つければいいんじゃね?
466:デフォルトの名無しさん
16/06/02 10:57:02.14 Bszjc45u.net
usleepで遅延できる最大時間は何秒ですか?
467:デフォルトの名無しさん
16/06/02 11:08:10.74
468:Bszjc45u.net
469:デフォルトの名無しさん
16/06/02 11:50:09.15 LIz4OI80.net
PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)
これさえあれば何だって作れちゃうね!PHP最強伝説!!!
470:デフォルトの名無しさん
16/06/02 12:21:37.61 Bszjc45u.net
>>464の件ですが
echo PHP_INT_MAX / (60*60*24*1000000);
で64bitマシンだと106751991日もsleepできると分かりました
マイクロ秒にしたら桁が溢れるんじゃないかと思ったのですが
気にする必要はなさそうですね
471:デフォルトの名無しさん
16/06/02 17:50:29.42 x6y0PRZ+.net
>>466
あれがあれば無敵だよな
472:デフォルトの名無しさん
16/06/02 19:03:01.78 7N0T/hEv.net
買ってあるが本棚で眠っている。無くても何でも作れるので必要ない。
473:デフォルトの名無しさん
16/06/03 10:05:42.48 uD7B680E.net
パーフェクトPHPと逆引きレシピで何でも作れるようになれる
474:デフォルトの名無しさん
16/06/03 10:14:36.48 a/yvIYtd.net
最近のPHPの本でいいのはないの?
475:デフォルトの名無しさん
16/06/03 10:57:02.65 jxJ/wrE9.net
関数型言語は早く短く書けるそうです
PHPより早く書けるのでしょうか?
PHPの「早さ」は標準機能の強力さにあるので、
やはりPHPが最速でしょうか?
476:デフォルトの名無しさん
16/06/03 11:09:10.82 jxJ/wrE9.net
「リモートにあるXMLを配列に入れる」
を一行で書けるPHP以上に開発効率のいい言語はなさそうですね
477:デフォルトの名無しさん
16/06/03 11:18:20.27 uD7B680E.net
public function setContent($content)
{
$this -> content = $content;
}
setContent(peropero);
echo $content;
↓
peropero
?
478:デフォルトの名無しさん
16/06/03 12:34:38.26 uqXPZzfx.net
ことweb向けならかなり手間のかからない部類だと思うけど、最速かどうかを気にしてどうするの。
どっちにしても自分でやってみなけりゃわからないと思うよ。
479:デフォルトの名無しさん
16/06/03 19:20:29.28 L26ySebn.net
PHPは短くなんかない。メソッドが豊富だから恩恵を受けているが、
変数に必ず$がついて1文字余分だし、メンバ参照もアロー演算子のせいで普通の言語よりも1文字余分。
大体コードゴルフとかすると、Rubyにこてんぱんに負ける。
480:デフォルトの名無しさん
16/06/03 19:49:15.43 rDkM18OB.net
コードゴルフはあれは仕事とか効率とかそういうんじゃないから
芸術だから
481:デフォルトの名無しさん
16/06/03 20:12:29.15 cokHCpg9.net
PHPに出来ないことはないってカンジだネ
482:デフォルトの名無しさん
16/06/03 20:24:58.84 oXnkqg6Y.net
PHPやJavaの次ぐらいにコード量多くなる部類じゃね
483:デフォルトの名無しさん
16/06/03 20:25:30.42 oXnkqg6Y.net
PHPや→PHPは
484:デフォルトの名無しさん
16/06/03 20:41:09.86 jxJ/wrE9.net
組み込み関数などを使わず
単純にアルゴリズムを競うだけなら、当然PHPは分が悪いでしょう
ですが現実にはそんなコードはほとんど書きませんよね
485:デフォルトの名無しさん
16/06/03 20:41:48.01 L26ySebn.net
まぁ、長くなるのはObj-Cが頭一つ抜けてる。
486:デフォルトの名無しさん
16/06/03 20:49:43.74 L26ySebn.net
>>481
そんな話はしてない。
ダラーとかアローとか書きまくっててなんか感じない奴は根本的にセンス無い。
487:デフォルトの名無しさん
16/06/03 20:57:02.48 jxJ/wrE9.net
>>483
は?
そんな表層的な所に拘ってるあなたの方がセンスないと思いますよ
もちろん、エレガントだとは言いませんが、
そこは本質的ではありません
488:デフォルトの名無しさん
16/06/03 21:00:27.92 cokHCpg9.net
けんかすな
最強のプログラム言語PHPの使い手同士なかよく
489:デフォルトの名無しさん
16/06/03 21:03:42.69 jxJ/wrE9.net
PHPは美しい言語ではありませんが
「用の美」があるのです
自分はそこが気にいっています
490:デフォルトの名無しさん
16/06/03 21:07:08.61 L26ySebn.net
お子様は今日も元気でいいな。
491:デフォルトの名無しさん
16/06/03 21:08:20.58 L26ySebn.net
>>485
こんな子猿と同列に語るな、マヌケ。
492:デフォルトの名無しさん
16/06/03 21:13:09.94 cokHCpg9.net
また口だけのおっさんかよ
493:デフォルトの名無しさん
16/06/03 21:21:27.36 L26ySebn.net
おまえ、毎回自己紹介得意だな。
494:デフォルトの名無しさん
16/06/03 21:28:15.12 L26ySebn.net
腕があがるほど一周回ってジャブの重要性に気づくんだ。
お子様は華やかな技ばっかに気をとられるがな。
495:デフォルトの名無しさん
16/06/04 10:12:26.21 YRPaaGZz.net
コマンドライン引数を書き換えることでプロセス名を変更するということを
PHPでしたいのですが
$argv[0] = "hoge";
とやっても変わりませんでした
ググると-Hオプションで引数リストを隠せるようですが
PHP内で書き換えたいです
perlでは出来るそうです
これは仕様上の欠陥ですね?
496:デフォルトの名無しさん
16/06/04 10:53:15.27 Atk6t3Xm.net
setproctitleみたいなことをargvを使ってやりたいの?
URLリンク(php.net)
497:デフォルトの名無しさん
16/06/04 14:55:35.46 YRPaaGZz.net
ファッ!?
そんな関数あったんですね
さすがPHPと言わざるを得ません
ありがとうございました
498:デフォルトの名無しさん
16/06/04 15:38:46.82 oUkZJriQ.net
何が凄いかというと、
あんなわけのわからん書き込みで何を欲しているのか理解できる>>493の判断力と、
>これは仕様上の欠陥ですね?
こういう低脳っぷり。
499:デフォルトの名無しさん
16/06/04 15:50:28.37 YRPaaGZz.net
>>495
お前には理解できないだけだろw
お前みたいな奴をペチパーっていうんだろうな
500:デフォルトの名無しさん
16/06/04 16:01:22.36 oUkZJriQ.net
ほら、更に低脳を上塗り。低能な上に低脳。もう、様式美。
501:デフォルトの名無しさん
16/06/04 16:28:58.88 YRPaaGZz.net
ワロス
世界せまww
502:デフォルトの名無しさん
16/06/04 16:45:59.06 YRPaaGZz.net
setproctitleはpeclを入れないといけないので汎用性に難がありますね
ぜひ標準で入れて欲しいところです
現時点では仕様上の欠陥と言わざるを得ません
503:デフォルトの名無しさん
16/06/04 16:52:28.28 oUkZJriQ.net
おまえのニーズで世界は回ってないってことを気づかないとダメだよ。低脳くん。
504:デフォルトの名無しさん
16/06/04 16:53:29.36 oUkZJriQ.net
しかし、相変わらずこのスレはサルが後を絶えないな。まさしく動物園だ。
505:デフォルトの名無しさん
16/06/04 17:13:08.01 YRPaaGZz.net
は?単なる一般的ニーズだが?
CLIで使おうと思ったらこれが出来ないと困ります
ワードプレスでもいじってろピグミーマーモセットが
506:デフォルトの名無しさん
16/06/04 17:15:03.71 K+q297Cv.net
URLリンク(php.net)
マニュアル読めないID:YRPaaGZzもNGで
507:デフォルトの名無しさん
16/06/04 17:18:49.61 oUkZJriQ.net
“も”ってなんだよ、おれもこのサルと同じ扱いなのか?
勘弁しろよ…、本当に。
508:デフォルトの名無しさん
16/06/04 18:11:47.00 oUkZJriQ.net
本当にPHPerはサルしかいないな…
509:デフォルトの名無しさん
16/06/04 18:36:42.24 1P8M50yx.net
サルだけあってID真っ赤っ赤だな
それは顔か?尻か?w
510:デフォルトの名無しさん
16/06/04 18:51:30.04 YRPaaGZz.net
>>503
え、なんですこれ
もう出来るんですか?
さすがPHPと言わざるを得ませんね
ありがとうございました
511:デフォルトの名無しさん
16/06/04 18:54:08.22 FTbmrFHZ.net
真っ赤?それは俺のこの手だ
csvや配列で持ってるデータを複雑な条件で検索したいときって
DBに格納するのが一番良いんかね
512:デフォルトの名無しさん
16/06/04 19:01:04.88 K+q297Cv.net
>>508
まだベータだけどLINQ for PHPとか
513:デフォルトの名無しさん
16/06/04 19:19:03.12 FTbmrFHZ.net
>>509
まさにこれなんだけど、こんなんがあって今βってことは
やっぱこれ使う以外だとDBに入れるか自前で検索を組むしかないってことか
ありがとう
514:デフォルトの名無しさん
16/06/04 19:44:25.80 K+q297Cv.net
>>510
PackagistでLINQで探してみたら結構いろいろ実装があるみたいよ
探してみては如何
515:デフォルトの名無しさん
16/06/04 20:36:49.27 FTbmrFHZ.net
>>511
ちょうどいろいろみてた
負荷と頻度考えて検討するわ
516:デフォルトの名無しさん
16/06/04 21:59:15.81 MFqaq7Mp.net
>>512
レポよろ
517:デフォルトの名無しさん
16/06/05 12:03:20.74 xob/1tpk.net
「次のn時m分」を取得するにはどうすればいいですか?
518:デフォルトの名無しさん
16/06/05 12:03:29.70 zsJffcbc.net
PHPであらゆることが出来るようになっていくなあ
PHPさえマスターすれば仕事に困らないのさ
519:デフォルトの名無しさん
16/06/05 13:07:49.58 9mzbmJB7.net
>>514
setTimeして戻ってたら+1 dayするとか
function nextHM(DateTime $dt, $h, $m) {
$next = clone $dt;
$next->setTime($h, $m);
if ($next <= $dt) {
$next->modify('+1 day');
}
return $next;
}
520:デフォルトの名無しさん
16/06/05 13:24:18.21 xob/1tpk.net
>>516
datetimeクラスなんてあったんですね
勉強になります
ありがとうございました
521:デフォルトの名無しさん
16/06/05 18:26:14.42 Tkwljjf2.net
>>514
こんな感じで計算をがんばるとか
function nextHM($t, $h, $m)
{
$dif = date('Z');
$lt = $t + $dif;
$nt = $lt - $lt % (24 * 3600) + $h * 3600 + $m * 60;
if($nt <= $lt) $nt += 24 * 3600;
return $nt - $dif;
}
$t は UNIXタイムスタンプね。
522:デフォルトの名無しさん
16/06/05 19:51:28.22 TM3QCo+d.net
見ろ、コードがゴミのようだ!
523:デフォルトの名無しさん
16/06/05 19:58:07.41 CV0omAn/.net
これは酷い
524:デフォルトの名無しさん
16/06/05 20:12:32.45 Tkwljjf2.net
え、計算でやろうと思ったらこんなもんじゃね?
UTC からの時差を求め、ローカルタイムに直し、その日の指定時刻を求め、既に過ぎていたら日時なら翌日にし、UTC に直して返す、ということを淡々と並べただけだが。
525:デフォルトの名無しさん
16/06/05 20:24:39.75 Tkwljjf2.net
あ、サマータイムに対応できないとかうるう秒とかどうなってんだって話なら、それはその通りだ。
526:デフォルトの名無しさん
16/06/05 23:07:07.91 Iavazaq6.net
レンタルサーバーを借りたのでチャットができるホームページを作りたいです
その為にwordpressの上でチャットプログラムを動かしたいと考えています
まず何から取り掛かれば良いのか分かりません
どのような知識が必要になり、どう勉強すれば良いか教えて頂きたいです
527:デフォルトの名無しさん
16/06/05 23:21:32.87 Tkwljjf2.net
>>523
wordpress は置いといて、取りあえずチャットを作ってみたら。
定期的にリロードする式のチャットなら簡単だし、サンプルになりそうなのは探せばすぐ見つかるんじゃね。
528:デフォルトの名無しさん
16/06/06 00:49:55.95 KjVn6FKA.net
>>516>>518
まじかよおまえら
529:デフォルトの名無しさん
16/06/06 00:53:43.37 O157QY9D.net
>>518
クソコードに認定します。
530:デフォルトの名無しさん
16/06/06 01:05:50.44 mm33J6PT.net
代替案を出さずに煽るだけ
口だけオッサン
531:デフォルトの名無しさん
16/06/06 01:21:12.75 BBAYr+Aj.net
>>525 と >>526 で意見が割れてるから、この二人が話し合えばいいように思う
532:デフォルトの名無しさん
16/06/06 04:46:49.75 J1e3bhcQ.net
>>527
あのコード見てもこんな事言ってるというだけで、
如何にこのアゲバカが何も知らない低能かという事がハッキリしたな。
533:デフォルトの名無しさん
16/06/06 07:47:24.77 OUgENTLv.net
>>527
ほんそれ
534:デフォルトの名無しさん
16/06/06 07:59:47.71 z3VswDq0.net
>>524
ありがとうございます
とりあえずは簡単でも動くプログラムを目指してみます
サーバーとクライアントのチャットならイメージが湧くんですけど、phpでやるとなるとサーバー側のプログラムだけで実現するんですよね・・
リロードするということはデータベースにログを格納して参照するという認識で合ってい
ますか?
535:デフォルトの名無しさん
16/06/06 08:33:02.73 xfsRheZo.net
>>531
データベースに手を出す前に、まずはプレーンなファイルにログを保存する方が簡単。
直近の100行くらいをそのままテキストファイルに保存しておくとか。
掲示板と変わらないよ。
名前とか色とか時刻みたいなパラメータを個別にフィールド化したいなら行を適当に書式化する必要があるけどね。
例えばこんな感じ。
2016/06/05 23:10:01<タブ>system<タブ>000000<タブ>たろうさんが入室しました<改行>
2016/06/05 23:10:01<タブ>たろう<タブ>FF0000<タブ>こんばんは<改行>
2016/06/05 23:10:06<タブ>じろう<タブ>00FF00<タブ>やあ<改行>
このファイルを file_get_contents するとファイルの中身全部がひとつの文字列として取得できる。
これを<改行>(¥n)で explode すれば行ごとの配列になる。
各行を<タブ>(¥t)で explode すればフィールド毎の配列になる。
新しい書き込みは行ごとの配列に追記し、必要な件数になるように array_splice なんかで調整する。
それを join なんかで配列を文字列化してファイルに保存する。
入力値にタブや改行が含まれている場合はスペースに置換する対策をするとして preg_replace なんかを使う。
ログファイルの読み書きを排他するためには flock を使う。
flock はログファイルそのものに対してやるんじゃなく、別のロックファイルを使うのを勧める。
flock でのロックなら使い終わったロックファイルは消さずに放置していい。
536:デフォルトの名無しさん
16/06/06 10:29:24.73 z3VswDq0.net
>>532
具体的なアドバイスありがとうございます
ファイルの読み書きでも実現できるんですね・・
すごく丁寧に手順を教えて頂けたのでその方法でやってみようと思います
排他制御など考えることも多そうですが、だいぶイメージが湧きました
537:デフォルトの名無しさん
16/06/06 10:53:52.96 gg/xefDK.net
>>531
>データベースにログを格納して参照する
それであってる。リロードに関してはAjaxとか使えばいい。
ファイルもいいが、データベースの方が応用利くのでおすすめだぞ。
538:デフォルトの名無しさん
16/06/06 11:07:34.48 SWJRXsGZ.net
一度DBに慣れるとファイル使うのめんどくさくなるよね
539:デフォルトの名無しさん
16/06/06 11:28:46.71 xfsRheZo.net
いずれはDBにも手を出すことになるだろうが、今の段階ではまずファイルがいいよ。
DBの準備、テーブルの準備、DBへの接続、開発中のデータのメンテナンス、etc. 手始めにチャットをちょろっと作るには少々面倒だと思う。
しかも自前のファイル処理は排他なんかの基礎的な技術も使うちょうどいい題材だと思う。
540:デフォルトの名無しさん
16/06/06 12:02:24.68 z3VswDq0.net
>>534,536
お二人ともありがとうございます
まだphpを学習している段階ですので、ファイルから入りデータベースの利用も考えて拡張していけたらと考えています
MySQLは多少触ったことがあるのですがAjaxとやらはJSで書かれてるみたいなんで心配ですね
当面の間の目標は決まったので取り組んでいきたいと思います
541:デフォルトの名無しさん
16/06/06 12:48:53.75 cB/a+aRW.net
unixタイムスタンプの変数名として$dateを使うのは変ですか?
dateといえば通常日付を持つオブジェクトですが
phpの場合、dateは日付を文字列に直す関数の名前なので
phpの作法としては良くないのか?とも思います
どうなのでしょうか?
542:デフォルトの名無しさん
16/06/06 12:56:02.62 i0QOUB1M.net
お前のシステムのタイムスタンプは日付単位なのか。すげえな。
543:デフォルトの名無しさん
16/06/06 13:05:19.30 xfsRheZo.net
>>538
マニュアルではタイムスタンプを取る関数の引数リストは timestamp となってるから、PHP流にするならそれに従うとか?
おれは近距離で使う場合なら $t とか $tm で済ますな。
544:デフォルトの名無しさん
16/06/06 14:07:10.33 VZp5fXoT.net
一度でいいから口だけオッサンの溜め息が出るほどに素晴らしい華麗なプログラムを見せて欲しいものだ
まあ、それが出来ないから口だけオッサンなわけなんだけれどもね
545:デフォルトの名無しさん
16/06/06 14:25:14.47 cB/a+aRW.net
>>539
アスペ乙
>>540
timestampが無難ですね
ありがとうございました
546:デフォルトの名無しさん
16/06/06 14:37:23.20 CS8YjhCP.net
最近の質問者は煽り耐性がないなw
547:デフォルトの名無しさん
16/06/06 14:48:20.68 e+TlXwYN.net
int32だと2038年になったとき困るもんな
そこで64bitPHPですよ
548:デフォルトの名無しさん
16/06/06 15:02:04.40 Nu4gS3Qg.net
>>544
64bitPHPって、動作環境も64必須になるの?
549:デフォルトの名無しさん
16/06/06 15:44:32.88 3yfrnV+f.net
8bit環境でも動くよ
550:デフォルトの名無しさん
16/06/06 16:42:19.25 cB/a+aRW.net
strtotimeは非常に柔軟な解釈をしますが
これはphpが他の言語を参考にしたのでしょうか?
551:デフォルトの名無しさん
16/06/06 16:44:19.58 m0TG3c4D.net
Cのexec系のように
自分自身のプロセスを置き換えるプログラムの起動方法はありますか?
552:デフォルトの名無しさん
16/06/06 18:43:05.67 BBAYr+Aj.net
>>548
こないだの人と同じだろうか。
URLリンク(php.net)
とりあえずここを一通り見るとこれからの疑問もいくつか解決できるかと。
553:デフォルトの名無しさん
16/06/06 19:06:02.71 J1e3bhcQ.net
>>543
無いのは耐性じゃなくて羞恥心だ。本当にサルしかいなくなった。
554:デフォルトの名無しさん
16/06/06 19:08:37.27 J1e3bhcQ.net
>>547
マネする事しかできないサルはそんなこと気にしても無駄だ。おとなしく使い方だけ覚えてろ。
555:デフォルトの名無しさん
16/06/06 19:10:05.25 J1e3bhcQ.net
>タイムスタンプの変数名として$dateを使うのは変ですか?
dateの意味が分からないサル、素敵。
556:デフォルトの名無しさん
16/06/06 19:17:07.72 J1e3bhcQ.net
>>549
そのバカは教えてもらっても活用できないから総合的なリンクを貼っても無駄だ。
1から100まで手とり足とり教えてやるだけの覚悟が必要だぞ。
557:デフォルトの名無しさん
16/06/06 19:37:24.24 cB/a+aRW.net
>>549
ちがいますよ
「こないだの人」っていうのはたぶん自分なので
558:デフォルトの名無しさん
16/06/06 21:51:51.16 1+sOyhVW.net
MySQLの画像が表示できずに困っています。
main.php
<img src="gazou.php">
gazou.php
$src = file_get_contents('画像のURL');
echo header('Content-Type: image/jpeg');
echo $src;
これなら正常に動作しますが、gazou.phpでDB接続しただけで画像も表示されなくなってしまいます。
$link = mysql_connect('localhost', 'root', 'pass');
DBに接続できる事は確認済みです。エラーも起きていません。
原因のわかる方がいたらお願いします。助けてください。
559:デフォルトの名無しさん
16/06/06 21:52:47.52 1+sOyhVW.net
すみません。改行がおかしくなってました
560:デフォルトの名無しさん
16/06/06 22:00:04.71 O157QY9D.net
<?php
561:デフォルトの名無しさん
16/06/06 22:06:18.56 xfsRheZo.net
>>555
DB接続と画像取得を同時にやると memory_limit に引っかかるとか?
562:デフォルトの名無しさん
16/06/06 22:16:02.69 lRe9eSuk.net
>>555
いや何でheaderをechoしてんの
563:デフォルトの名無しさん
16/06/06 22:20:02.11 xfsRheZo.net
言われてみればw
564:デフォルトの名無しさん
16/06/06 22:22:35.62 1+sOyhVW.net
>>558
リミット増やして、画像を極小の物にしましたが駄目でした。
>>559
ネットにあった物を丸コピしましたが、echoする必要なかったんですね。
ありがとうございます。
565:デフォルトの名無しさん
16/06/06 23:12:41.43 pobwg1Vi.net
>>561
そんなのネットに落ちてるのか
URL教えてくれまいか
566:デフォルトの名無しさん
16/06/06 23:15:55.37 pcbEmQ5n.net
>>561
DB接続を先にして画像表示を後にしてみれば
567:デフォルトの名無しさん
16/06/07 00:05:13.10 lP0BMeFG.net
>>563
すみません、先に接続してます
画像が表示されなくなるので、DBの画像がおかしいのかと色々調べて結論が
DBに接続したからってよく分からない原因でした
自分以外は起きないようですしDBに画像入れるのは諦めます、ありがとうございました
568:デフォルトの名無しさん
16/06/07 00:21:59.49 D2B0dW6i.net
>>564
レスポンス見るとたぶんなんか文字列が出てるんだと思うよ
569:デフォルトの名無しさん
16/06/07 03:50:11.15 T/syB7Ij.net
こんなんで諦めるのか。
570:デフォルトの名無しさん
16/06/07 06:38:58.63 T/syB7Ij.net
コードの出し惜しみすっからこういう事になんだよ。
細切れじゃなく動かないコードを全部はっつけてれば>>559あたりがとっくに解決してくれたろうに。
勝手に質問して勝手に諦めて、ただのスレ汚しでしかねえよ。
571:デフォルトの名無しさん
16/06/07 07:25:50.44 zVxkgyZ2.net
ブラウザからgazou.phpにアクセスすれば一発でわかるよ
どうせDB接続エラーでも出てるんだろ
572:デフォルトの名無しさん
16/06/07 08:59:25.37 bV3Kj9Se.net
2038年問題とか気にしてるやついるのかよ
もう32bitとか絶滅危惧種じゃねえか
573:デフォルトの名無しさん
16/06/07 09:56:02.61 ljS7Rtyf.net
>>569
というか、今動いている32bit機があと20年は余裕で保守されてしまうのだよ・・・
574:デフォルトの名無しさん
16/06/07 10:01:48.24 SWn+auCj.net
COBOLじゃあるまいし基幹系でPHP採用してるのはキチガイと言わざるをえないしその心配はいらない
575:デフォルトの名無しさん
16/06/07 10:08:11.73 EI+C64Wv.net
今なお動いているphp4のとき書かれた業務システムが普通にある
576:デフォルトの名無しさん
16/06/07 10:13:16.18 mGsXs7zb.net
PHP4使ってるところすらあるでしょ。「保守」はされてないだろうけどw
577:デフォルトの名無しさん
16/06/07 10:17:14.37 SWn+auCj.net
そのとおりだな
放置が正しい
578:デフォルトの名無しさん
16/06/07 11:27:15.75 ZIJtMgP1.net
2038年問題より、1970年問題に当たったことならあるなぁ
生年月日を扱おうとして。
579:デフォルトの名無しさん
16/06/07 13:46:49.20 ljS7Rtyf.net
>>571
思うのはいいけど、現実は厳しいからね
580:デフォルトの名無しさん
16/06/07 14:17:17.55 LhHMvfyC.net
思うのっていうか、PHPのバージョンと開発者の技量に影響受けまくるので、4の頃なら頭おかしいって評価はとても正しい。
581:デフォルトの名無しさん
16/06/07 14:52:12.33 Ht3PiVwV.net
phpをCLIで実行した場合、
$_SERVER['SERVER_ADDR']が設定されていません
マシンのipアドレスを知りたい時には
シェルコマンドを実行して自前で取得するしかないのでしょうか?
582:デフォルトの名無しさん
16/06/07 15:06:32.48 TyQk9mVD.net
>>578
マシンのipアドレスって?
583:デフォルトの名無しさん
16/06/07 15:38:49.13 57zhvgUm.net
カレンダーを作るといいらしいね
584:デフォルトの名無しさん
16/06/07 15:47:57.36 e+17T4IJ.net
404や500などのエラー返す時にContent-TypeとResponse BodyってMUST?SHOULD?
585:デフォルトの名無しさん
16/06/07 16:33:43.53 LhHMvfyC.net
>>578
$h = gethostname();
echo gethostbyname($h);
isn't it?
586:デフォルトの名無しさん
16/06/07 18:26:48.76 EI+C64Wv.net
そりゃIP複数持ってるマシンなんざいっぱいあるんだから設定されてなくても仕方なかろう
587:デフォルトの名無しさん
16/06/07 18:31:43.94 Ht3PiVwV.net
>>582
随分すっきり書けるんですね
ありがとうございます
588:デフォルトの名無しさん
16/06/07 18:49:34.57 T/syB7Ij.net
>>584
u are welcome.
>>583
$_SERVER
URLリンク(php.net)
> The entries in this array are created by the web server.
do u think the web server will say something in cli? stupid!
589:デフォルトの名無しさん
16/06/07 20:25:27.97 zVxkgyZ2.net
>>575
生年月日をタイムスタンプで扱ってるの?
生まれた瞬間のミリ秒まで必要?
590:デフォルトの名無しさん
16/06/07 22:16:27.40 ZIJtMgP1.net
>>586
ミリ秒じゃなく秒と言いたいんだろうけど、秒どころか時刻もいらん。
ただ時間を扱ういろいろな関数の引数が UTC だから何も考えず UTC で扱っとけと思って失敗したという話。
591:デフォルトの名無しさん
16/06/07 23:51:25.08 GjrjfS/I.net
ハハ。$_SERVERの勘違いって誰もが通る道だね。
592:デフォルトの名無しさん
16/06/08 00:14:36.94 mGCA+lka.net
初心者なんだけど
cgi,php の掲示板って普通にサーバーにアップロードして
動かすとサイトのURLの末尾が cgi、php ってなるけど
例えば、自分の好きな英数字 xxxx.html とかで
htmlで表示する方法があるんだよね?
これってやり方紹介してるサイトとかあるの?
593:デフォルトの名無しさん
16/06/08 00:23:54.79 uL38izUF.net
Apacheかなんかのスレにどうぞ
594:デフォルトの名無しさん
16/06/08 01:23:51.21 JCoBBX/9.net
>>589
> htmlで表示する方法があるんだよね?
ある
> これってやり方紹介してるサイトとかあるの?
ある
595:デフォルトの名無しさん
16/06/08 02:06:02.23 HLpzPaCj.net
まとめますとggrks
596:デフォルトの名無しさん
16/06/08 03:29:07.02 YJzUTB/9.net
PHPとJavascriptって両方覚えた方が良いの?
597:デフォルトの名無しさん
16/06/08 04:13:34.53 E3Y0fydP.net
htmlは静的、phpは動的なファイル。
静的なファイルは変更されないから、キャッシュ・圧縮が効く
開発環境でのディレクトリの場所が違ってくるし、
その拡張子・ディレクトリ構成を前提とした、フレームワーク・ツールが動かなくなる
htmlファイルは処理Aして、phpファイルは処理Bして、という前提条件が崩れる
また、CDNなどのキャッシュ・圧縮などに影響するかも?
素人は、変なことを考えない方がいい
598:デフォルトの名無しさん
16/06/08 04:45:13.41 xWo5zVvm.net
最後の1行に説得力を持たせるためにそれらを書いたのなら、かなりのセンス。
599:デフォルトの名無しさん
16/06/08 06:14:37.48 Y0v6vn2E.net
サルが必死に知恵を絞るとこういう文章になってしまうというだけだ。
センスとか関係無い。
600:594
16/06/08 06:37:14.53 E3Y0fydP.net
慣例に従わないと、フレイムワーク・プラグイン・ツールなどが動かなくなる。
そういうツールの作者は、慣例を前提条件にして作っているから
何かがバグった時に、素人じゃ解決できないだろう
プロでも設定ファイルで、あーだこーだ設定しても、
設定した人にはわかるけど、人が変われば、もうダメだろう
601:デフォルトの名無しさん
16/06/08 06:41:40.02 Y0v6vn2E.net
>>595
な、マジもんだっただろ? 頭おかしいからほっとくしか無い。
素人にはかわいそうなこった。
602:デフォルトの名無しさん
16/06/08 06:43:42.35 gbxJmrOf.net
みんないいか?触るなよw
603:デフォルトの名無しさん
16/06/08 07:10:14.83 Y0v6vn2E.net
今日も動物園一直線か。
たまには人間が見たいもんだ。
604:594
16/06/08 07:34:36.51 E3Y0fydP.net
君らは、Gradle, Jenkins などで、.html .php など、
拡張子によって、テストツールなどの処理を変えたりしないのか?
605:デフォルトの名無しさん
16/06/08 07:40:28.27 Y0v6vn2E.net
うん、おまえ頭おかしいから元の質問100回よみかえして
どういう状況かよく考えたら病院行って薬もらってこい。
606:デフォルトの名無しさん
16/06/08 08:10:33.58 uL38izUF.net
自分はApacheくらいしか分からんけども、ぱっと思いつくのは3パターンくらい。
質問に対して正直に答えるなら、.htmlも動的ファイルとして認識させる方法だが、
大昔のSSIとかはともかく、今はデメリットしか無いだろうなあ。
ファイルの更新よりも極端に閲覧が多いなら、伝統的な手段として、
あらかじめ静的ファイルを生成する方法があるが、質問者の意図とは遠いだろう。
あとは今の御時世だと、そこまでパフォーマンス的なメリット薄いかも。
比較的質問者の意図に近く、かつ>601のような問題にも対応するなら
mod_rewriteによるパスの書き換えが無難かしらね? ただ初心者には難しい気がする。
やるなら最後だが、結局のところ最初はやらんほうがいいってことになるのかね。
607:デフォルトの名無しさん
16/06/08 08:25:59.30 2v7uDDwq.net
htmlを動的ファイルとして認識させるのは、理解し切ってやるならデメリットだけとも言えないとは思う
質問者の意図から外れるのは同意だけど静的htmlの生成・保持は今のご時世でもメリット薄くないと思う
昔はサーバリソースの問題から、今のご時世でもアクセス数の増大と先読みやらなんやらの超アクセスの問題から
特に重い処理は一部だけの保持でも十分に効果がある
というか一番の問題は動機、なんで拡張子偽装したいのか意味あんのかってあたりだと思うが
そこを突っ込むのは野暮か
*****.htmlじゃなくて /*****/ アクセスにするだけでも解決しそうな・・・
608:デフォルトの名無しさん
16/06/08 10:58:47.40 YYbuS1Qq.net
php7ってなんで公式リポジトリに含まれないん?
わざわざremiリポジトリ登録してやらんとあかんが疑問
JPCERTでも以前脆弱性出てたし
わかる方いたら教えて
609:デフォルトの名無しさん
16/06/08 12:38:58.71 CAvCMOWG.net
有益かゴミかはやり方知った後でやる奴が判断すりゃいいんだよ。
頭のおかしい外部のサルが判断すことじゃない。
教えるかggrksのどっちかでいいんだ。ゴタクは日記に書いてろ。
610:デフォルトの名無しさん
16/06/08 12:56:25.16 lrS0iOEg.net
>>605
デフォルトでは使うなってことでしょ
611:デフォルトの名無しさん
16/06/08 13:40:06.16 oY9bTRlh.net
パーフェクトPHPのフレームワークの章とアプリケーション開発の章を理解するには
先にCakePHPの基礎を学ぶのがいいと書いているブログがあった
このスレ的にはどう思うよ?
612:デフォルトの名無しさん
16/06/08 15:55:08.69 kQTZ9CNF.net
そんな無意味な書籍読まないし知らんけど
FWのイロハがわからない人間にはイメージがつきにくい内容なら
実際何かしら触った方がいいのは当たり前のことだと思うが
613:デフォルトの名無しさん
16/06/08 16:46:59.87 2v7uDDwq.net
そんな本読んだことないし読む気もないが、フレームワークの章だけならまだしも
アプリケーション開発の章を理解するためにCakePHPの基礎やっとけというなら
高確率でそのブログが役立たずまたはその本が役立たずと思われる
614:デフォルトの名無しさん
16/06/08 16:56:11.26 VGRHY7q5.net
何でもいいよ
PHP系のフレームワークはどれも同じ
615:デフォルトの名無しさん
16/06/08 16:58:16.97 HLpzPaCj.net
>>609
>>610
君らは自分の過去を無かったものにするのだな
別の本なりネットなりで勉学した初心者時代があっただろう
記憶喪失になったかな?
616:デフォルトの名無しさん
16/06/08 17:13:12.10 2v7uDDwq.net
>>612
初心者の勘違い防止とステマ防止のためなら何度でも言うが
一番重要なのはHTTP、DNS、HTMLの仕組みの理解を深めることであって
phpに関する学習は基本的にphp.netで十分
あとはプロセスだのスレッドだのファイルシステムだのSSL/TLSだのをレベルと必要性に応じて学べば足りる
617:デフォルトの名無しさん
16/06/08 17:51:55.00 ZBwXDrqR.net
マンモス本がでてPHPの時代が来るんじゃあと思ったことならある
LAMPで構成されることが多いしCMSもMVCフレームワークも豊富で困らないけどCakePHP推しはちょっと古いかもな
ORMは使わないことが多く、結局PHPよりSQLの知識の方が需要あるんだよね
618:デフォルトの名無しさん
16/06/08 18:01:25.33 lrS0iOEg.net
チームで開発するなら、フレームワークいいと思うけどね
619:デフォルトの名無しさん
16/06/08 18:05:39.32 jZ2+9jcA.net
syslog(LOG_INFO,'info');
syslog(LOG_DEBUG,'debug');
syslog(LOG_NOTICE,'notice');
こうすると、debugだけ/var/log/messagesに記録されていません
開発時にはDEBUGなどの定数を設定しておいて
その時にはLOG_DEBUGも出力される
開発が終わればLOG_DEBUGは出力しない
みたいなことをやりたいのですが
どうやれば出来ますか?
620:デフォルトの名無しさん
16/06/08 18:26:10.13 PuNp4spr.net
出ないのはsyslog.confの設定しだいだろうけど
log出力をライブラリ利用するかラッパーかまして自分で制御しては
syslogは開発完了後も使う前提だと思うけど
621:デフォルトの名無しさん
16/06/08 18:27:46.41 v2PxA+KY.net
>>615
フレームワーク使うにしてもそれに合わせた設計や規約を作らないといけないんだから、それほど意志疎通の手間を省くこともできないしそれ程素晴らしいとも思えないがなぁ。
もちろん自分達で一から書くよりはマシだろうという期待はあるが、フレームワーク自体のメンテナンスも必要になってくるしねぇ。
622:デフォルトの名無しさん
16/06/08 18:33:06.92 lrS0iOEg.net
>>618
> フレームワーク使うにしてもそれに合わせた設計や規約を作らないといけないんだから、
使わない方が大変な気がするが
> それほど意志疎通の手間を省くこともできないし
共通基盤部分の意思疎通は不要だし、わからないこともWebで調べることができるというメリットがある
623:デフォルトの名無しさん
16/06/08 18:38:13.16 jZ2+9jcA.net
>>617
LOG_~はsyslogに対しての指定なのですね
どうもその辺りが分かってなくて
ありがとうございました
624:デフォルトの名無しさん
16/06/08 18:40:18.38 Y0v6vn2E.net
CakePHPなんて薦めてる時点でお察し。
フレームワーク嫌いになるし、MVC勘違いするしでいい事なんにもねぇよ。
625:デフォルトの名無しさん
16/06/08 18:40:30.18 mGCA+lka.net
>>594
cgi,phpをhtmlで表示する方法を知りたかったんだけど
素人はいじらない方いいってこと?検索して探しまくったけど細かく説明してるサイトがないんだよね
配布してるサイトには全く触れてないしさ
626:デフォルトの名無しさん
16/06/08 18:44:05.32 Y0v6vn2E.net
>>611 の言うとおり、ロクなものが無いと言う点に於いては
PHPのフレームワークなんてどれもおんなじ。
使いまわせるライブラリやフレームワーク自体を作ることが出来無い低レベルの会社か、
人の入れ替わりの激しい人買いくらいしかPHPの有名どころのフレームワーク使う恩恵なんてない。
627:デフォルトの名無しさん
16/06/08 18:45:20.25 Y0v6vn2E.net
>>622
そういうことはしない方がいいってわかってるから情報も少ない。
まぁ、ぐぐりまくれ。いい勉強にはなる。
628:デフォルトの名無しさん
16/06/08 19:53:45.61 cqVMGaEH.net
>>622
htmlでもPHPが動くようにapache設定するといいよ
629:デフォルトの名無しさん
16/06/08 21:28:57.46 E3Y0fydP.net
慣例から外れたことをやると、色々な設定を変えなければならなくなり、
一つ設定を変えると、またそれによって動かなくなるものが出てくる
それで大変だから、慣例に従うのよ。
素人は解決能力が無いので、変わったことをしない方がいい
たいてい、2chに居つく素人は、そういう変更をした人。
ずっと解決できなくて、2chに居つくw
630:デフォルトの名無しさん
16/06/08 23:12:26.27 gbxJmrOf.net
素人こそムチャクチャにいじり倒したほうがいいよ。流した涙の分だけ強くなれる
631:デフォルトの名無しさん
16/06/09 05:24:32.22 Z+K8nZfh.net
>>626
最後の二行なんか、まるで自己紹介かと思うくらいに真実味があるな。
632:uy ◆e6.oHu1j.o
16/06/09 07:58:20.47 soxVcx2A.net
質問です
<h1><?php echo "ruby"; ?></h1>
これは純粋なHTMLコードよりサーバーに行わせる処理が多いものと思いますけど
気にしたほうが良い負荷ですか?
全てのページでこういう事やるのは避けたほうが良いですか?
633:デフォルトの名無しさん
16/06/09 08:31:49.73 udAwsxyk.net
俺もそれ考えて、CachedNodeというクラスを実装しようと思う。
変更が有った時に幹に向かって破棄ビットを立てる。
変更があっても関連の無いノードのキャッシュは依然有効なまま。
変更が無い限り出力はキャッシュ済みでメモリー上にあるので最速。
まあセッションごとに起動される建前のPHPでは無理だけど。
634:デフォルトの名無しさん
16/06/09 11:41:49.74 I0vdXVFT.net
アロー演算子 -> って前後にスペース入れちゃだめなの?
$this -> hogehoge() みたいにしちゃダメ?
635:デフォルトの名無しさん
16/06/09 12:52:46.82 1e+LEmpu.net
>>629
そういうことする為にwebプログラム言語はあるんだ。
636:デフォルトの名無しさん
16/06/09 18:58:43.72 Z+K8nZfh.net
なんで uy がここにいんの?
637:デフォルトの名無しさん
16/06/09 21:48:33.33 gOehAXHk.net
PHPでフォークをしてみたいのですが
子プロセスが全部終了するのを親が待つのは
作った子の数だけpcntl_waitすればいいのでしょうか?
子が死んだ時に待ってる制御が必ず戻ってくるのか、
というところに不安があります
もし待っているのに制御が戻らないと、永久ループになりますよね
そのへんは心配いらないのでしょうか?
638:デフォルトの名無しさん
16/06/09 21:49:19.88 gOehAXHk.net
×子が死んだ時に待ってる制御が必ず戻ってくるのか
○子が死んだ時に制御が必ず戻ってくるのか
でした
639:デフォルトの名無しさん
16/06/09 22:59:36.92 gOehAXHk.net
$childPidList = [];
for ($i=0; $i<5; $i++){
$pid = pcntl_fork();
if (!$pid){
echo getmypid()." forked\n";
sleep(100);
exit();
}else{
$childPidList[] = $pid;
}
}
while (count($childPidList)){
$pid = pcntl_wait($status);
$idx = array_search($pid,$childPidList);
unset($childPidList[$idx]);
echo "{$pid} ended\n";
}
こんな風にしてからkill -9で子プロセスを外から強制終了させても、
ちゃんと制御が戻りました
心配しなくても良さそうですね?
640:デフォルトの名無しさん
16/06/10 03:12:35.40 0e6lKjME.net
1つのファイルに1つのclassが書かれてるとして、許せる行数/KiB数はどのくらい?
641:デフォルトの名無しさん
16/06/10 04:50:15.18 9JKXGlcv.net
>>637
IDE使ってれば勝手に教えてくれる。
まだテキストエディタで書いてるのか?
642:デフォルトの名無しさん
16/06/10 08:24:36.60 PSfQ4+av.net
最近のIDEは行数にまで口出してくるのか。うぜえなw
643:デフォルトの名無しさん
16/06/10 10:09:46.35 mlu6vup/.net
時代はJavaScriptよ
Mode.jsなら何でも出来る
644:デフォルトの名無しさん
16/06/10 10:19:00.19 QeldepT2.net
>>639
「変数が再定義されています。予期しない不具合を避けるため別の名前を用いて下さい」とかまで言ってくれるぞ。可愛いだろ?時々ぶっ壊したくなるけど。
645:デフォルトの名無しさん
16/06/10 10:21:02.62 wJTDb5hO.net
うちはもう全部SATAだぞ
いい加減古いPCは捨てろよ
646:デフォルトの名無しさん
16/06/10 11:16:48.36 vAcnizog.net
サーバーのファイルを直接的に編集できるからNotepad++使ってるんだけど
こうしたFTP機能があるIDEってある?
647:デフォルトの名無しさん
16/06/10 12:29:34.80 QeldepT2.net
大抵のIDEはできるんじゃねえの?
そういう事はやらんからよく知らんけどやってる奴は見た。
648:デフォルトの名無しさん
16/06/10 12:54:52.57 vAcnizog.net
>>644
ありがとう。
IDEは重いから避けてたけど、勉強がてらもう一度やってみます。
649:デフォルトの名無しさん
16/06/10 14:36:45.66 VX0S6iFV.net
phpの関数の引数の順番に迷うことが多いです
覚えやすいコツありますか?
650:デフォルトの名無しさん
16/06/10 14:38:09.38 VX0S6iFV.net
たとえばarray_searchなら
arrayをサーチするんだからarrayの方が先やろ→誤
となります
651:デフォルトの名無しさん
16/06/10 15:57:07.05 gE4dMqOe.net
>>646
覚えることを諦めてIDEに教えてもらう
652:デフォルトの名無しさん
16/06/10 18:47:17.98 9JKXGlcv.net
>>648
いい流れだ。腕を上げたな。
>>646
覚えなくてもいいから何が何でもphp.net検索しろ。
たまに下の方まで読むといろいろためになる情報が書いてあったりする。
653:デフォルトの名無しさん
16/06/10 18:50:21.21 9JKXGlcv.net
>>647
そういうのはJavaScriptみたいなのがいいよな。
array.join(",") みたいなの。ずっと分かりやすい。
Rubyもこんな感じだったっけか。
654:デフォルトの名無しさん
16/06/10 18:54:05.44 TQGlf4QP.net
PHPStorm使えばいいんだろ?
655:デフォルトの名無しさん
16/06/10 19:02:50.34 4O+4qcPo.net
PSR-2フォーマッタついててPHPマニュアルがすぐ引けるなら何でもいい
656:デフォルトの名無しさん
16/06/10 19:31:49.15 9JKXGlcv.net
>>651
PHPStormは有償だから必ずしも職場で使えるとは限らない。
使えればラッキーだが、使えなかった時の事も考えておかなければならない。
657:デフォルトの名無しさん
16/06/10 20:18:43.09 nh6LPx54.net
>>612
なんで特定の本の話題出してそれに答えなきゃならんのか
もってること前提で質問されてもここはサポセンじゃないわけでな
ちなみに本に頼ったことなどない
658:デフォルトの名無しさん
16/06/10 20:26:02.28 TQGlf4QP.net
>>654
亀レスにも程が有るのでは?
659:デフォルトの名無しさん
16/06/11 02:22:58.71 BPhbrCpU.net
亀をいじめないで!
660:デフォルトの名無しさん
16/06/11 05:12:42.04 YhzsbXwG.net
40レスぐらいで亀って随分平和になったな
661:デフォルトの名無しさん
16/06/11 06:46:43.40 U0YLx5iK.net
レス数の問題だと思う奴は頭の障害疑ったほうがいいぞ。
普通は時間とタイミングを考慮する。
662:デフォルトの名無しさん
16/06/11 11:22:18.74 7IE41uX0.net
ファイルをオープン(なければ作成)
→ロック
→読み込んで配列にunserialize
→配列の内容を変更
→配列をserializeしてファイルに書き込み
→ロック解除
ということをやりたいのですが、
ロックする前の、もしファイルがなければ作成する、という処理の部分は
排他的ではないので、変なことが起きる可能性があるんじゃないかという気がします
どうなんでしょうか?
663:デフォルトの名無しさん
16/06/11 11:35:30.80 BbMy6dfc.net
>>659
其の通り
664:デフォルトの名無しさん
16/06/11 12:05:21.84 U0YLx5iK.net
そういう心配しなくてもいいようにDBつかうんだぬー
わざわざファイル操作で頭悩まさると禿げるんだぬー
665:デフォルトの名無しさん
16/06/11 12:11:12.11 7IE41uX0.net
でも良くある処理ではありますよね?
どうすれば問題が出ないようにできますか?
666:デフォルトの名無しさん
16/06/11 12:18:20.33 enSm4S6w.net
何らかの方法で排他的ロック方法を採用する
動作させるOSによって色々方法はある
667:デフォルトの名無しさん
16/06/11 12:21:08.46 e5AOazPt.net
uniqid()とかで一意なファイル名にする
668:デフォルトの名無しさん
16/06/11 12:24:02.14 enSm4S6w.net
→ロック
→ファイル操作
→ロック解除
669:デフォルトの名無しさん
16/06/11 12:30:39.02 rc3AwP02.net
>>661
DBならそういう心配しなくていいと思ってるからお前禿げてるんだろ?
670:デフォルトの名無しさん
16/06/11 12:34:32.72 vIdecit0.net
>>659
オープンと無ければ作成は同時にできる。
そこで取得したハンドルを flock すれば何の問題も無い。
でも、ロックファイルと本当に読みたいファイルは分けておくと何かといいと思う。
ロック方式を変える場合とか、データファイルの読み書きに fread じゃなく fire_get_contents とか include とか使いたいとか、
いろいろと融通が利くようになるから。
一度やれば面倒なんてことはないから、たったそれだけのために DB に走るのはまだ早い。
671:デフォルトの名無しさん
16/06/11 12:40:53.02 vIdecit0.net
たったこれだけ。
$lock = fopen('.lock', 'a');
flock($lock, LOCK_EX);
<排他されたコード>
fclose($lock);
排他されたコードとして、データファイル読んで操作して更新する処理を書けばいい。
更新の仕方を工夫すると、共有ロックと排他ロックを使い分けて同時アクセス時のパフォーマンスも上げられる。
672:デフォルトの名無しさん
16/06/11 13:02:26.63 U0YLx5iK.net
>>666
DBはそういうこといちいち考えなくても大丈夫な仕組みがいっぱいあるんだぬー
そんな事もわからないからおまえは666とか不吉な数字なんだぬー
おまえみたいなとんちきはオジー・オズボーンと一緒に田舎のババアから十字架持って追いかけられるといいんだぬー
アホが治るぬー
673:デフォルトの名無しさん
16/06/11 13:05:21.79 U0YLx5iK.net
>>668
> fire_get_contents とか
あうあうあうあうあうあうあうあうあう…
やばいよやばいよやばいよ… いろいろやばいよ…
674:デフォルトの名無しさん
16/06/11 13:06:01.45 rc3AwP02.net
>>669
その大丈夫な仕組みが>>668みたいなコードなわけだけど
DBとファイルでやってることが根本的に違うわけでもなしに
言ってることもキチガイじみてるし病院いったほうがいいよ^^;;
675:デフォルトの名無しさん
16/06/11 13:06:40.55 U0YLx5iK.net
やばくないか… 酔っ払ってるから何言いたいのかよーわからん
後で読み返す。
676:デフォルトの名無しさん
16/06/11 13:07:43.11 U0YLx5iK.net
>>671
だったらおまえはずっとファイル操作でしこしこやってたらいいんだぬー
677:デフォルトの名無しさん
16/06/11 13:09:52.19 vIdecit0.net
>>670
燃えそうw
678:デフォルトの名無しさん
16/06/11 13:10:00.47 rc3AwP02.net
酔っ払ってるを言い訳にするぐらいなら書くなよ
だからお前のコードはデッドロックばっかおこしてるんだぜ
679:デフォルトの名無しさん
16/06/11 13:14:29.55 U0YLx5iK.net
>>675
デッドロックなんて気にしてるってことがおまえがアホみたいな事やってる証拠なんだぬー
俺様はそんなしんぱいしなくてもいいようにシステムを作るので全く無縁の話なんだぬー
680:デフォルトの名無しさん
16/06/11 13:16:52.88 U0YLx5iK.net
>>667がどんなアホかと思ったけど、よく読んでみたら
ファイルをロックしていても読める関数使えって事らしいから、
本物のアホではないみたいだぬー
ただ、やってることが旧時代的でアホらしくてやってられないんでぬー
681:デフォルトの名無しさん
16/06/11 13:19:18.72 vIdecit0.net
>>676
排他する対象がひとつの DB の内容だけにとどまっていれば適当にやってもそうそうデッドロックしないかもしれないけどな。
余所の DB やシステムと連携したり限られたデバイスやリソースを共有するとか、排他は奥が深いぞ。
682:デフォルトの名無しさん
16/06/11 13:24:19.64 U0YLx5iK.net
>>678
その事と本件が何の関係があるんだぬー
ファイルロックしてれば他所のシステムと連携した場合でも簡単に排他できるのかぬー?
よっぽど大変になるのが目にみえてるんだぬー
おまえが物事の深さを語るのは108年早いんだぬー
683:デフォルトの名無しさん
16/06/11 13:25:50.01 vIdecit0.net
>>679
ファイルロックがあれば基本的になんでも排他できるだろ。
セマフォとか知らないか?
あれも実装によってはファイルロックだぞ。
684:デフォルトの名無しさん
16/06/11 13:30:10.44 vIdecit0.net
なんでもは言いすぎだったな。
でもいろんな応用をするための基礎だからやっとけって。
685:デフォルトの名無しさん
16/06/11 13:36:56.47 U0YLx5iK.net
>>680
「なんでも排他できるだろ」っておまえはアホかぬ?
排他する事だけがシステムの目的みたいになってるアホ発言だぬー
そんなにはいたいなら医者行けばいいぬー
ファイルで取り回すよりDB使ったほうがやれることがはるかに膨大なんだぬー
排他なんてそのうちのほんの1メリットだぬー
だったらDB使っちゃったほうがお得だぬー
とか言ってると、「DB使えない場合はどうすんだ」とか言うアホがでてくるんだぬー
だから今のうちに言っとくぬー
一般的でないケースの事なんか知るかハゲ!
686:デフォルトの名無しさん
16/06/11 13:38:31.55 U0YLx5iK.net
>基礎だからやっとけって。
DBは今時常識だからやっとけって。
687:デフォルトの名無しさん
16/06/11 13:41:00.34 c3/xDSGs.net
>>668
if (flock($lock, LOCK_EX)) { ... }
という風に失敗した場合の分岐を用意しよう
また新しいPHP(5.3.2以降)では手動でflock($lock, LOCK_UN)する必要があるらしい
688:デフォルトの名無しさん
16/06/11 13:42:44.74 vIdecit0.net
>>683
DB 使うなとは言ってないぞ。
手持ちのカードが多ければ好きに使い分けられるだろ。
お前はアクセスカウンター作るにもDB使うんだろうが、その選択しかできないのであれば潰しがきかないぞ。
689:デフォルトの名無しさん
16/06/11 13:43:06.58 U0YLx5iK.net
ほら、なんかいろいろとめんどくさい情報がくっついてきたぬー
おまえら、人生楽しそうだぬー
690:デフォルトの名無しさん
16/06/11 13:45:16.50 U0YLx5iK.net
>>685
ファイル操作にこだわってるお前のほうが潰しきかないから他人の心配してる暇ないんじゃないかぬー?
691:デフォルトの名無しさん
16/06/11 13:46:22.53 vIdecit0.net
>>684
LOCK_UN 必須の件は初耳だったけど、それ本当?
この辺の機能は OS の機能をそのまま使ってて、そんなに差がでる部分じゃないというか、ハンドル閉じてロックだけ残るってどういう事情だよって感じだが。
ハンドルを複製してるケースとかかな?
692:デフォルトの名無しさん
16/06/11 13:49:14.38 U0YLx5iK.net
>>688
おまえが調べてQiitaにでもまとめといてくれぬ。
必要になった時に見てやるぬ。
それまでは俺様は優雅にDB使ってるぬ。
693:デフォルトの名無しさん
16/06/11 13:53:03.18 vIdecit0.net
>>684
5.3.3 で試したけど、少なくとも >>668 の使い方では LOCK_UN の明示は要らないね。
694:デフォルトの名無しさん
16/06/11 13:55:02.40 c3/xDSGs.net
>>688
ついさっき確認したら変更履歴にそう書いてあったからであって、俺は検証してないよ
URLリンク(php.net)
どうなるのか想像でしかないが、解放しないと2度目からFALSE返すとかじゃね
695:デフォルトの名無しさん
16/06/11 13:57:05.92 U0YLx5iK.net
圧倒的な人柱感
696:デフォルトの名無しさん
16/06/11 13:58:16.03 U0YLx5iK.net
そういう、ファイルシステムの影響モロに受けそうな処理を平気でやる人たちって、
結局心が強いんだろうな。
オレはチキンだから無理だぬー
697:デフォルトの名無しさん
16/06/11 14:18:34.99 a1oB3JFl.net
まーた馬鹿が暴れてるのかー
698:デフォルトの名無しさん
16/06/11 14:24:21.01 U0YLx5iK.net
まーた馬鹿が戯言だけホザくのかー
699:デフォルトの名無しさん
16/06/11 14:29:21.37 U0YLx5iK.net
本当に、まともな思考力のある人間はいないのかねぇ…
700:デフォルトの名無しさん
16/06/11 14:39:42.63 a1oB3JFl.net
え?自分がまともな思考力もってると思ってんの?
701:デフォルトの名無しさん
16/06/11 14:46:49.83 7IE41uX0.net
>>668
ロック用ファイルを別に用意するんですね
ありがとうございます
ちなみにやたらdbを推してる狂人がいますが
今書いてるのはなるべく他のプログラムを使いたくないものなので、
今のところdbは考えていません
702:デフォルトの名無しさん
16/06/11 14:54:08.42 U0YLx5iK.net
>>697
自己紹介乙
このスレの参加者は自己紹介だけは得意だ
703:デフォルトの名無しさん
16/06/11 14:55:15.54 U0YLx5iK.net
>>698
なんか修行でもしてるんだ。学生は暇でいいね。
704:デフォルトの名無しさん
16/06/11 14:57:12.43 U0YLx5iK.net
PHPerはとにかく何でもPHPでやりたがるというのは本当だな。
脳みそが崩壊してる。
705:デフォルトの名無しさん
16/06/11 15:36:01.25 a1oB3JFl.net
ノウミソ崩壊って自己紹介はやめろって!
706:デフォルトの名無しさん
16/06/11 15:43:02.88 U0YLx5iK.net
オウムさん餌でもついばんででください
707:デフォルトの名無しさん
16/06/11 15:45:49.48 U0YLx5iK.net
人間、いないねぇ…
708:デフォルトの名無しさん
16/06/11 15:59:10.40 a1oB3JFl.net
低収入オッサンやめろよ
ここはストレス発散のはけ口じゃないんだよ!!!
709:デフォルトの名無しさん
16/06/11 16:05:51.89 U0YLx5iK.net
うん、ここはお前らの低能をなぐさめあう場所でもない。わかってるだろ?
710:デフォルトの名無しさん
16/06/11 16:06:40.12 U0YLx5iK.net
あと、さすがに酔いがまわってきたから突然落ちるよ。
711:デフォルトの名無しさん
16/06/11 16:08:50.21 a1oB3JFl.net
低能低能いうけどお前レベル低いからな(笑)自覚しろよ!!!
712:デフォルトの名無しさん
16/06/11 16:11:06.58 ZgIjL8Zc.net
最初flock絡みでデッドロックやらかした時は
スクリプト止まらないしエラー吐かないしで何が悪いのか全然わからなくて立ち往生状態だった
>>698
serializeほど楽じゃないが別途db用デーモンを起動させとかなくていいsqliteは便利
そういや手軽なdbの話じゃ最近berkeley dbの名前を全然見ないな…なんでだ
713:デフォルトの名無しさん
16/06/11 16:11:26.13 BbMy6dfc.net
PHP使ってるのなんてみんな底辺だから仲良くしようや
714:668
16/06/11 16:16:02.35 0LrYNLoc.net
>>698
>>684 の情報により、fclose の前に flock($lock, LOCK_UN) を入れてね。
あと flock 使った排他で重要なところは、処理が終わってもロックファイルを消しちゃダメということ。
ロックファイルの存在確認式なんかだと処理が終わったらロックファイルを消す必要があるけど、flock式はそうじゃない。
同一のファイル(パスではなく inode)をオープンすることでロックをかけるから、消して作り直しても同じファイルにはならずその間でのロックがかからない。
あと、NFS 領域に対しては flock が使えない場合があるから、それは制限事項として覚えておいて。
といった具合に説明すると長くなるけど、コードはシンプルだから覚えておいて損は無いよ。
715:デフォルトの名無しさん
16/06/11 16:24:29.25 ZgIjL8Zc.net
>>691
いや違う、falseを返すとかじゃなくてデッドロックを引き起こす
延々とロック取得待ち状態になってkillしなきゃいけなくなる
716:デフォルトの名無しさん
16/06/11 19:09:00.14 U0YLx5iK.net
お前ら、人生楽しそうだな。
俺は頭痛い…
717:デフォルトの名無しさん
16/06/11 19:12:41.27 U0YLx5iK.net
おっかしいな… なんでこんなに頭いたいんだ?
718:デフォルトの名無しさん
16/06/11 21:39:16.03 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:デフォルトの名無しさん
16/06/11 22:15:24.50 ZgIjL8Zc.net
>>715
すまんが712は単純に「LOCK_EXされたファイルへのLOCK_EX」の挙動を書いただけ
flockの仕様から同一プロセスからの多重flockは後に指定したLOCK_**に上書きされるだけ、なのも確実(winは知らん)
で、記憶掘り返しながらこっちでも試してみたけど>>715の言うとおり
同一プロセス内でも、別プロセスでも、fopen->flock->fclose->fopen->flock でデッドロックしなかった
flock($fh, LOCK_EX)絡みでデッドロックになってハマった記憶が確かにあるんだがなあ…しかも1プロセスで
昔書いたソースとメモを読んでるけど該当箇所が見つからん
720:デフォルトの名無しさん
16/06/11 22:25:33.55 U0YLx5iK.net
具合悪い… 吐きそう…
721:デフォルトの名無しさん
16/06/11 22:43:11.56 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:デフォルトの名無しさん
16/06/11 22:53:40.15 U0YLx5iK.net
排他的に内容更新したいだけなのにお前ら何やってんだよ…
723:デフォルトの名無しさん
16/06/11 23:21:54.93 u5pRtWh9.net
僕の友達に「ゲームプログラムを兄から頼まれてよくやってるー」などと言ってる奴がいます。そいつにどんな言語使ってんの?とかきいてもいろんな言語使ってるから意識したことないわwとか誤魔化したり、c言語は難しくてよくわからんとか言っているのです。
なんか嘘くさいんで掘り下げてやろうと考えてます。
もしゲームプログラムするならこれは知ってて当然みたいな知識あったらそいつに仕掛けて反応見てみたいので教えてください。
724:デフォルトの名無しさん
16/06/11 23:27:06.01 u5pRtWh9.net
各場所間違えてました
ごめんなさい
725:デフォルトの名無しさん
16/06/11 23:36:10.98 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:デフォルトの名無しさん
16/06/11 23:46:33.60 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:デフォルトの名無しさん
16/06/11 23:50:10.54 vIdecit0.net
>>723
ごめんうそ言った。
ハンドルを上書きしたらクローズされてるみたいね?
なので >>723 は忘れて。
728:デフォルトの名無しさん
16/06/11 23:57:31.23 ZgIjL8Zc.net
>>724
気にすんな
しかしこうなると真面目に手動LOCK_UNの意味・有効な場面がわからなくなってくるな
というかfclose/flock仕様変更の前後の差異がわからん
729:デフォルトの名無しさん
16/06/12 04:10:30.87 p2hTIoUv.net
懐かしい話を掘り起こしているようで
URLリンク(tumblr.tokumaru.org)
730:デフォルトの名無しさん
16/06/12 04:35:52.53 jxNAYoxL.net
オブジェクト指向はアクセス指定子や抽象クラスなどで
やってはいけないことや守るべきことをコードの中で示すことができますが
フォークすることによって起きる事態に対しては無力だと思います
たとえば、プロセスidを入れ込んだファイルパスは、
その都度getmypidを呼んで生成しなければいけない、
というようなことを、コードのシンタックスによって示すことは出来ませんよね
コードのどこかでフォークしているということに気付かずに
いちいち毎回作り直さずにキャッシュすればいい、と思うことはありそうです
いい方法はないでしょうか?
731:デフォルトの名無しさん
16/06/12 07:55:29.22 4xmbllsr.net
>>726
参考になった。ありがとう。
でもこれ、system関数のバグなんじゃね?
内部で fork した後、親プロセスから継承したハンドルを閉じてないんじゃ?
そこのデッドロックのサンプルだと、デッドロック中はロックファイルの lsof は子プロセス側に 2件ある。
5.3.2 での改修ポイントが間違ってたんじゃないのかなぁ…
少なくとも OS のシステムコールレベルではハンドルを閉じればロックも否応なく外れちゃうし、これは Unix系も Windows も一緒なはずだが。
732:デフォルトの名無しさん
16/06/12 08:18:59.24 4xmbllsr.net
検証した。
やっぱ子プロセスが継承したハンドル持ちっぱなしだよ。
当然マルチプロセスの処理を書く時にはそれを意図的に利用したいことはあるけど、PHP だったら内部で exec系を行う前にはスクリプトで開いたハンドルは全部クローズするべきなんじゃないのかね。
ただ現象が起こる理由は分かったから、それに基づけば明示的なアンロックが無くても影響があるところはほとんど無さそうだと判断するけどな。
733:デフォルトの名無しさん
16/06/12 13:06:26.58 0JopogCG.net
そもそもflockシステムコールはもともとマニュアルに書いてあるように
flock() によって作られるロックは、 オープンファイル記述 (open file description) (open(2) 参照) と
関連付けられる。 したがって、ファイルディスクリプターの複製 (fork(2) や dup(2) などにより作成
される) は同じロックを参照し、 これらのファイルディスクリプターのどれを使っても このロックを
変更したり解放したりできる。 また、ロックの解放は、 上記の複数のファイルディスクリプターの
いずれかに対して 明示的に LOCK_UN 操作を指示した場合か、これらのファイルディスクリプターが
すべて 閉じられた場合に行われる
というもので、phpのfclose関数の中でわざわざLOCK_UNしてたのは余計なお世話
で本来の動作を阻害していたから5.3.2でやめたって理解でいいんだろうか。
734:デフォルトの名無しさん
16/06/12 13:26:47.31 4xmbllsr.net
>>730
うん、よくよく考えると
> というもので、phpのfclose関数の中でわざわざLOCK_UNしてたのは余計なお世話
ということが正しいと思う。
元々マルチプロセスなプログラミングで自動で複製されるファイルディスクリプタの扱いはプログラマが意識する必要があって、複製の後始末をせずにロックが残ることがあるのはそもそも設計ミス。
こういうことをフォローするために PHP では fclose でのついでに自動でアンロックが走るようにしていたけど、そうると親子プロセスの一方で不要になったディスクリプタを閉じただけでロックまで外れちゃうという問題を引き起こす。
だったらリソースの管理はやっぱりプログラマに任せるって判断が妥当なんだろう。
互換性の点でも、そもそもディスクリプタの複製が行われるケース(恐らく PHP では fork を伴う何か)と関係無ければ fclose だけでロックは解放されるから問題は無いし、
複製が行われるような処理ではアンロックの必要性についてはプログラマが意識していてしかるべきだから、
結局のところ fclose にアンロックを合わせこむのをやめるのが正解だな。
ただ system をはじめとするシェル系の関数は気軽に使いがちだから、子プロセスのハングアップでロック残りが起こる可能性は身近かもしれないね。
これまでアンロックせず動いてたスクリプトを無理やり改修する必要までは無いけど、これから書くならアンロックは明示しとけってことだな。
久々に勉強になった。