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 をはじめとするシェル系の関数は気軽に使いがちだから、子プロセスのハングアップでロック残りが起こる可能性は身近かもしれないね。
これまでアンロックせず動いてたスクリプトを無理やり改修する必要までは無いけど、これから書くならアンロックは明示しとけってことだな。
久々に勉強になった。
735:デフォルトの名無しさん
16/06/12 14:20:54.54 QWuFqOwW.net
>久々に勉強になった。
使う機会あるといいけどな。
736:デフォルトの名無しさん
16/06/12 14:39:38.95 Y/PMYUAu.net
別に子プロがハングしようとLOCK_UNには関係ないんじゃないか
execしたphp以外のプロセスがロックしててもphpのロックには関係ないし
どんなプロセスでもプロセスが終わればロック解放されるんだから
737:デフォルトの名無しさん
16/06/12 15:10:09.70 3j0TR14y.net
>>733
ハングして終了しなければ殺すまでロックしっぱなしだろ
738:デフォルトの名無しさん
16/06/12 15:21:03.49 3j0TR14y.net
説明が足りないか。
PHPでファイルを開きロックをした状態で、例えば system で別プロセスを起動したとする。
このプロセスは、PHP で開いていたファイルディスクリプタの複製を持つ。
ディスクリプタが複製されても取得しているロックはひとつで、このディスクリプタのいずれかでアンロックすればロックは解放される。
誰もアンロックしなかった場合、そのロックに紐付く全てのディスクリプタが閉じられた場合に解放する。
つまりディスクリプタの複製を持った子プロセスがそれを閉じないままハングした場合、親プロセスがディスクリプタを閉じてもロックは解放されず、子プロセスを殺すまでロックされたままになる。
ちなみに子プロセスがPHPかどうかは関係無い。
739:デフォルトの名無しさん
16/06/12 15:29:21.61 jxNAYoxL.net
ファイルパスを正規化するにはどうすればいいですか?
realpathで出来ると思っていたのですが
まだファイルが存在しない時点では結果がfalseになるので駄目でした
740:デフォルトの名無しさん
16/06/12 16:09:50.68 hcrF9o1u.net
>>736
標準関数にはない。
Packagistには恐らくあるだろう。
741:デフォルトの名無しさん
16/06/12 17:23:27.51 jxNAYoxL.net
>>737
ありがとうございます
packagistというところから辿ったらありました
URLリンク(github.com)
742:デフォルトの名無しさん
16/06/12 17:28:53.54 pWHiM9s7.net
とりあえず話が収束したらまとめとして残してくれる?
ここまで議論しといて残さなかったらPHPerとして恥だし
743:デフォルトの名無しさん
16/06/12 17:51:52.67 SdG9GRKe.net
他力本願こそPHPerとして恥だぞ
744:デフォルトの名無しさん
16/06/12 18:52:27.13 Y/PMYUAu.net
>>734-735
あるファイルをphpで有効にLOCK_EXしても別プロセスで起動したviには何も影響しないと認識していたが?
だからphp以外をexecしてロックが生じてもphpの記述には関係がない=fclose前のLOCK_UNに関係ない
ある.php内であるいはexecで呼び出した.phpでファイルロックが起きてもmax_execution_timeの縛りで強制終了すればロックは解ける
ゆえに「ロック残り」とやらで掴みっぱなしになることはそうそうない、そう認識していたんだが
745:デフォルトの名無しさん
16/06/12 18:52:38.31 QKWa7och.net
で、お前らぴーえいちぱーって読んでんの?
746:デフォルトの名無しさん
16/06/12 19:03:36.38 4xmbllsr.net
>>741
flock によるロックって別のプロセスからのファイルアクセスを禁止するわけじゃないから。
同時にロックを取得できないだけであり、それによって「ロックを取得しようとするプロセス同士」を排他するわけ。
ロックを取得しようとしないプロセスはロックされたファイルであろうとアクセスし放題だよ、例えば vi とかね。
Windows では他のプロセスからのファイルアクセスを禁止することもできるけどな。
747:デフォルトの名無しさん
16/06/12 19:06:30.53 QKWa7och.net
ピーチクパーチク、ピーエイチパーチク
ヨー、チェケラッチョー
748:デフォルトの名無しさん
16/06/12 19:15:10.09 Y/PMYUAu.net
>>743
あれviってflock使ってなかったっけ?まあいいや他のなんでもいいんだが
本旨はphpにおける明示的flock($lock,LOCK_UN)の必要性だろう、それが他プロセスとどう関わるんだ
結局どういうときにLOCK_UNしないと「ロック残り」が起こるんだ
749:デフォルトの名無しさん
16/06/12 19:35:01.71 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:デフォルトの名無しさん
16/06/12 19:43:46.46 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:デフォルトの名無しさん
16/06/12 19:49:34.59 4xmbllsr.net
>>747
> 親がロックを取得した fd をそのまま親と子で共有するなんてことはめったに無いから、親なり子なりでその fd を閉じる処理を書くことになる。
ちょっと誤解を招くかもしれないから捕捉。
親がロックを取得した fd をそのまま親と子で共有するなんてことはめったに無いから、
その fd はどちらか一方にとっては不要であるから、そちらのプロセスでは最初にその fd を閉じる処理を書く。
752:デフォルトの名無しさん
16/06/12 19:58:20.79 p2hTIoUv.net
>>745
プロセスが生きている間においては「ロック残り」が発生するが、どうせ死ぬから問題ないというスタンスだとすれば、
max_execution_timeを0にした場合や、(初期値が0である)CLIの場合は生き続けるよ。
753:デフォルトの名無しさん
16/06/12 20:37:09.64 SRdEl8UG.net
HTMLとは
ハイパー テキストマークアップ ラングアゲ
754:デフォルトの名無しさん
16/06/12 21:40:22.72 ETS5lku+.net
ランゲージ
755:デフォルトの名無しさん
16/06/13 09:32:27.21 Mgx0zrpD.net
今phpをステップ実行できるデバッガで便利なのってどのあたり?
ステップごとにそれぞれの変数の中身がどうなってるか簡単にわかるとうれしい
756:デフォルトの名無しさん
16/06/13 13:49:19.06 XIduanRK.net
array_filterで関数に他の引数も与えたい場合はどうしたらいいですか?
757:デフォルトの名無しさん
16/06/13 14:23:37.32 TYgkMCrQ.net
>>753
コールバックにオブジェクトメソッドを指定して、オブジェクトに他のパラメータを持たせるとか?
758:デフォルトの名無しさん
16/06/13 14:36:57.48 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:デフォルトの名無しさん
16/06/13 15:15:41.61 XIduanRK.net
>>755
phpもクロージャ出来るようになってたんですね
ありがとうございます
760:デフォルトの名無しさん
16/06/13 16:04:29.44 poUAr+t+.net
Array→アレイ→アレ?→あれれ?
という発想が頭から離れなくて頭が基地外になりそうなんだけどプログラミングは向いてないよね?
ちなみに仕事はPG全く関係なくて異業種の作業員
761:デフォルトの名無しさん
16/06/13 18:18:38.79 Mj2HqjrQ.net
おでかけですか~?
762:デフォルトの名無しさん
16/06/13 18:53:18.04 I48wzFwG.net
おまえら、平和でいいな。
763:デフォルトの名無しさん
16/06/14 00:37:10.95 e/1BDrQk.net
>>757
電気屋さんとか電波屋さんと仲良くなれそう
764:デフォルトの名無しさん
16/06/14 02:04:02.36 vpCPShaK.net
配列をオブジェクト指向的に使うための組み込みクラスは何故ないのでしょうか?
765:デフォルトの名無しさん
16/06/14 03:26:27.75 E92ohJVI.net
ないんですか?
766:デフォルトの名無しさん
16/06/14 03:29:28.98 sdXnBDtj.net
>>761
当初はあまりオブジェクト指向じゃなかったという点と、
現状の array をそのままオブジェクトとして見なす変更をしてしまうと array を関数の引数に取る場合に他のオブジェクトの扱い(array はコピー渡し、オブジェクトは参照渡し)と一貫性が取れなくなるから、今更どうにもできないってところじゃね。
それより、関数が返す array を直接添え字でアクセスできないのをなんとかして欲しい。
ようは explode(',', $str)[1] みたいにやりたいわけだが、この改修ならほとんど問題無くできそうな気がするけどな。
767:デフォルトの名無しさん
16/06/14 03:34:56.83 pjhL6UK+.net
list(,$test)=explode(',', 'test1,test2,test3');
こうするのがせいぜいだが、これで妥協するか自分自身が開発に参加して改修するかだな
768:デフォルトの名無しさん
16/06/14 03:48:41.99 E92ohJVI.net
できないんですか?
769:デフォルトの名無しさん
16/06/14 05:18:59.07 jLlAbvBE.net
ArrayObjectとArrayIteratorならあるぞ
770:デフォルトの名無しさん
16/06/14 09:39:15.99 1o9WExv+.net
>>761
実装済みの>>766に加えて自前クラスでもArrayAccessインターフェイスを実装すれば配列のように扱えるクラスを実装出来る
771:デフォルトの名無しさん
16/06/14 10:25:21.42 ekIyBZy6.net
PHPStorm を優勝期限切れで使い続けてる人います?
バージョンアップできなくてつらくない?
772:デフォルトの名無しさん
16/06/14 11:58:51.69 vpCPShaK.net
ありがとうございます
ArrayObjectってあったんですね
探し方が足りなかったようです
やはり関数言語的な書き方をしようと思うと、生配列だと物足りなくなってきますね
ただArrayObjectも、関数言語的なメソッドは実装されてないようです
eachやmapやreduceなど
既にそういうの書いてる人はいるでしょうけど、
標準実装してほしいところです
773:デフォルトの名無しさん
16/06/14 12:23:57.32 nAMCA7y/.net
>>763
explode(',', $str)[1] については
いつまでも古いバージョンのPHPつかってんじゃねーよってことだが。
774:デフォルトの名無しさん
16/06/14 17:44:21.80 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:デフォルトの名無しさん
16/06/14 19:05:12.07 4d00OzM8.net
検証すんのめんどくさいから全部コード乗っけてくれる?ハゲ
776:デフォルトの名無しさん
16/06/14 19:26:39.01 E92ohJVI.net
mapに何を渡したんですか?
777:デフォルトの名無しさん
16/06/14 21:39:45.32 vpCPShaK.net
失礼しました
あまりの非PHPっぽさに釣られて
$a.hoge();
みたいな書き方をしていました
778:デフォルトの名無しさん
16/06/14 23:57:10.36 sdXnBDtj.net
>>770
あれ本当だ
いつの間にこうなった
779:デフォルトの名無しさん
16/06/15 00:30:10.47 yBESscco.net
>>775
5.4からだから既に4年以上前
780:デフォルトの名無しさん
16/06/15 01:15:30.82 /9sc4puR.net
explodeの戻り値がfalseだったら文字列でもfalseでもない null が返ってくることになるよな、それ
noticeも出る
781:デフォルトの名無しさん
16/06/15 02:58:03.10 6YnDO2OY.net
そうですね
782:デフォルトの名無しさん
16/06/15 09:56:12.92 35n6X8km.net
>>776
ずっとそれ出来ないもんだと思ってた...
783:デフォルトの名無しさん
16/06/15 10:18:18.00 HJSiSv4s.net
猿は勉強しないから知らなくても無理はない。気にすんな。
784:デフォルトの名無しさん
16/06/15 11:45:48.59 DNtAqMfa.net
わかった。 もう気にしない。
785:デフォルトの名無しさん
16/06/15 12:28:52.64 63gxNX9v.net
マイナーバージョンアップで使えるようになった書き方は互換性の面で正直使いづらいな。
使いやすくなることは喜ばしいが。
786:デフォルトの名無しさん
16/06/15 14:10:09.61 i5XubNZf.net
自分の書いたコードが
PHPのどのバージョンから使えるコードなのかを判定する
ツール的なものはないのでしょうか?
787:デフォルトの名無しさん
16/06/15 14:13:56.64 x+vvrMaZ.net
言い出しっぺが作るのです
788:デフォルトの名無しさん
16/06/16 03:33:03.54 F+lw57im.net
readdirでディレクトリエントリを読んでいきながら
便宜ファイルを削除しても問題ないのでしょうか?
789:デフォルトの名無しさん
16/06/16 11:12:05.38 F+lw57im.net
URLリンク(stackoverflow.com)
ここを見ると問題ないようです
foreachで元の配列を破壊的に変化させてるようなものだと思うのですが
どういうアルゴリズムなのか。
一旦全てエントリを舐めて、一つ一つ取り出してるだけなのでしょうか
scandirではなくreaddirを使うのはメモリを節約したいという意識からですが
一度に全部読んで単に取り出しを一つ一つしているだけなら
あんまり意味がないですね
790:デフォルトの名無しさん
16/06/16 11:51:44.03 OOtzbp5n.net
>>785
問題が出るかは確認してないけど、
問題が出るかもしれないから readdir のループでは対象ファイルのリストアップだけして、改めて処理用のループ回してる。
791:デフォルトの名無しさん
16/06/16 15:13:15.23 rO3o63UR.net
配列の操作について質問です。
MySQLから点数データを取得してwhile文で配列に格納するとともに、
点数の5段階の相対評価を得たいです。
学生(要素数が可変)の点数配列scoresがあるとした場合、点数の高い順に
最初の1/5をA、次の1/5をB、次の1/5をC、次の1/5をD、残りをEに分類するには
どういう操作をするのが定石でしょうか?
792:デフォルトの名無しさん
16/06/16 15:14:35.80 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:デフォルトの名無しさん
16/06/16 15:20:11.03 lOAG9aOi.net
>>788
ここはphpの下質スレですがご質問はphpに関する質問ですか?
794:デフォルトの名無しさん
16/06/16 15:25:56.10 rO3o63UR.net
>>790
はい。
PHPでのアルゴリズムの実装方法やそのためのPHPの関数などを教えて欲しいです。
795:デフォルトの名無しさん
16/06/16 15:32:21.65 F+lw57im.net
>>787
それが安心ですね
ありがとうございます
796:デフォルトの名無しさん
16/06/16 15:40:54.97 lOAG9aOi.net
>>791
まあ…ほんとにphpなら
単純に1次元配列を並び替えるだけならrsort($scores);するかその前にsqlの時点でORDER BYすればいい
あとは$scores = array_chunk( $scores, (int)(ceil(count($scores)/5)) );とかすればいい
データが二次元だとか細かい処理したいとかならrsort()ではなくusort()も使える
797:デフォルトの名無しさん
16/06/16 16:28:58.79 rO3o63UR.net
>>793
ありがとうございます。
配列操作の関数がたくさんあってどれが最適なのか見つけられずにいました。
ORDER BYとご教示頂きましたarray_chunkの関数の組み合わせが最適そうですね。
解決できそうです。ありがとうございました。
798:デフォルトの名無しさん
16/06/16 16:49:55.80 BCCkDo9p.net
学生数が5できっちり割れる時は良いけど
そうならない時はどうするのかな?
799:デフォルトの名無しさん
16/06/16 17:36:01.49 rO3o63UR.net
>>795
ご注意ありがとうございます。
array_chunk には、次の記述がありますが、仕様上問題ないです。
「最後の部分の要素数は size より小さくなることもあります」
URLリンク(php.net)
800:デフォルトの名無しさん
16/06/16 21:36:32.86 geCt37Iz.net
質問させていただきます。
Class内でメンバ関数で定義した変数を別のメンバ関数から参照するにはどうすれば良いのでしょうか?
801:デフォルトの名無しさん
16/06/16 22:26:42.88 S7gZdFkC.net
>>797
何がしたいか分からんからやりたいことのコード例
802:デフォルトの名無しさん
16/06/16 22:30:00.80 geCt37Iz.net
>>798
あ、ごめんなさい
class {
public function a() {
$x = 'hello,world';
}
public function b() {
print $x; //hello,worldを表示する
}
}
簡潔にかけばこんな感じです。
aメソッドで定義した変数をbでも使いたいです
803:デフォルトの名無しさん
16/06/16 23:17:55.32 S7gZdFkC.net
>>799
クラスのプロパティにしたらあかんのか?
804:デフォルトの名無しさん
16/06/16 23:23:33.51 OOtzbp5n.net
クラス内の特定の機能だけでしか使わない変数の扱いについては悩ましいこともあるな。
スコープを厳格にしたいならその機能を別のクラスとして切り出すか、そこまで小分けしたくないなら大人しくプロパティにしてしまうか。
JAVAなんかだとクラス内クラスが簡単に扱えてこういうのに便利なんだけど、PHPってどうなんだっけ。
805:デフォルトの名無しさん
16/06/16 23:23:34.81 geCt37Iz.net
>>800
まあそれでもいいっちゃいいんですけど
ちょっとコードが長くなった時とか、別々にして処理させたいんですよね
皆さんがクラス書くときってどうやってるんでしょうか
806:デフォルトの名無しさん
16/06/16 23:30:35.19 S7gZdFkC.net
>>802
そもそも担当処理が違うなら別クラスにして委譲するのが適切だとは思う
807:デフォルトの名無しさん
16/06/17 00:04:23.57 OWOb/yaE.net
public function a() {
static $x = 'hello,world';
}
これでは要求を満たさないならばおとなしく関数ではなくclassの変数やclass定数にすべき
808:デフォルトの名無しさん
16/06/17 01:04:47.60 bXZXch1T.net
>>804
質問を読んでなんでそんなコードが出てくるのか意味解らん
809:デフォルトの名無しさん
16/06/17 01:24:40.23 VvmzJV5D.net
配列から数をキーとして持つ要素だけを取り出す
いい方法はありませんか?
810:デフォルトの名無しさん
16/06/17 02:24:59.62 Ub5TQFWS.net
PHPの本で分かりやすいのある?
811:デフォルトの名無しさん
16/06/17 07:28:42.66 yged7CRH.net
>>807
皆さんはどんなosでどんなツールでphpやっているの?
教えて
812:デフォルトの名無しさん
16/06/17 07:38:35.18 kypwTnD/.net
机の上でノートに鉛筆でコードを書きながら脳内デバッグして脳内リリース。
813:デフォルトの名無しさん
16/06/17 07:55:00.51 zTp2v+lf.net
>>809
奇遇ですな。
同じくアイデア段階では、パソコンでやらずに紙です。
すぐにフローやイメージ図を書き留められる。放射状に広げていける。
紙とエンピツがその時だけ本当に便利だよね。
814:デフォルトの名無しさん
16/06/17 08:36:09.46 CYdk5Mt/.net
シーケンス図は手書きの方が楽、人に見せるときは格好つけてVisioで整形するがな
815:デフォルトの名無しさん
16/06/17 10:05:23.41 izLNj4Mm.net
>>807
山田祥寛(よしひろ)、翔泳社
10日でおぼえる PHP 入門教室、第4版、2012
この本は、Webアプリ作成の流れがわかるけど、
文法の説明は、あまりない
816:デフォルトの名無しさん
16/06/17 10:10:12.64 zTp2v+lf.net
>>812
その人の本地雷だろ。
初心者の時にPEARの本買ったら、意味がわからなくなって挫折しかかった。
別の本で救済された。文法云々の前にとにかく、理屈をこねすぎて本質部分全然わかりにくい。
817:デフォルトの名無しさん
16/06/17 10:56:59.01 izLNj4Mm.net
山田祥寛は第一人者。
様々な言語の本を書いている。RoRでも有名
講習会も1日4万円!
818:デフォルトの名無しさん
16/06/17 11:50:18.31 1vjuVThu.net
>>806
array_filter() で ARRAY_FILTER_USE_KEY フラグを使ってフィルタリングする。
あるいは、foreach で順に走査して該当するものだけ取得する。
819:デフォルトの名無しさん
16/06/17 13:12:30.73 VvmzJV5D.net
>>815
ARRAY_FILTER_USE_KEYというのは初耳でしたが、
借りたVPSに入ってるのは5.4なので、まだ使えませんでした
おとなしくforeachします
ありがとうございました
820:デフォルトの名無しさん
16/06/17 16:07:38.77 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:デフォルトの名無しさん
16/06/17 16:09:49.84 KYjoOhmA.net
>>817
データベースは使わないの?
823:デフォルトの名無しさん
16/06/17 16:40:23.10 AeewtahV.net
>>818
アイコン変更履歴を格納するという意味でしょうか?
824:デフォルトの名無しさん
16/06/17 16:56:34.53 KYjoOhmA.net
>>819
履歴が必要なら履歴も登録してもいいけど。
例えば、user.iconに画像ファイル名が入ってるなら、
select cese when user.icon is null then 'default.jpg' else user.icon end as user_icon
画像ファイル名じゃなくて、あり/なしでもいいし、フルパスにしてもいいし、
userとは別テーブルにしてもいいし。
825:デフォルトの名無しさん
16/06/17 16:58:19.35 KYjoOhmA.net
っていうか、
> 以下のようにすると、存在チェックと取得の計2回のリクエストが発生してしまいます。
これほんと?
$user->idってインスタンスのプロパティアクセスじゃないの?
826:デフォルトの名無しさん
16/06/18 00:14:26.11 SEe9xJ4I.net
>>817
ファイルを保存したことが確定していればそれでいいというのであればそのステータスをローカルのDBなんかに保存する
アクセス時点でクライアントに画像が見えることを担保したいのであればクライアントサイドでやるべきではないか
827:デフォルトの名無しさん
16/06/18 00:48:21.29 W3J+GEBP.net
>>821 の
> これほんと?
しかまともなレスがない
828:デフォルトの名無しさん
16/06/18 03:06:39.83 zkudPs4r.net
>>823
つかそいつ一人しかレス付けてないじゃん。
>>817
S3 は高性能なストレージで存在チェック程度のアクセスは気にするような話ではないんじゃない?
ただアイコンを表示する全ての個所でそのコードを書くのはだるいから、デフォルトアイコンを作ってしまうというのもアリだと思う。
ただそうすると、例えばアイコンを設定してないユーザー 10人を一覧表示する場合、
存在チェック式なら同一の画像URL 10個が並ぶからクライアントは結果的に 1回の画像取得しかしないのに対し、
デフォルトアイコンコピー式では画像は個別の 10 の URL になるからクライアントは 10回画像取得をすることになり、
存在チェックなどの些細な負荷より重い実際の画像アクセスが増えてしまう。
829:デフォルトの名無しさん
16/06/18 08:33:50.00 8GpUPXrh.net
>>817
ファイルリストをキャッシュしておいて
ファイルが変更された(画像ファイルの追加や削除)タイミングで
キャッシュをInvalidateすればいいんでないかい?
830:デフォルトの名無しさん
16/06/18 08:42:32.00 saT7WdS7.net
default.jpgくらいは手元(ローカルサーバー)に置いておきたいというのはあるわな
その場合はlocal://default.jpgとかs3-icon://xxxx.yyyみたいな独自書式を用意するかな
831:デフォルトの名無しさん
16/06/18 13:57:43.89 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:デフォルトの名無しさん
16/06/18 14:07:09.69 a+CHws3P.net
書き忘れ
顧客情報データ持っててhiddenで渡して次画面行きたいだけなのですが
1.全部$_SESSIONに詰め込んで<a href>を何個も作ってそれぞれに飛ばす
2.一つの<form>にsubmitを入れまくって振り分け用phpにhiddenで飛ばす
3.<form>を複数作って顧客情報をそれぞれhiddenで飛ばす
$_SESSIONに何でもかんでも詰め込んで良いものか、
それとも振り分け用phpへのアクセスが増える(現実問題は大した事ないけど作り方として)のを避けた方が良いのか
というようなことで迷いました。
833:デフォルトの名無しさん
16/06/18 16:03:58.68 ue516XaJ.net
端的に言うと、どれもやらねぇかな。
834:デフォルトの名無しさん
16/06/18 16:51:59.61 OFAUAFhz.net
>>827
目的と手段を考えれば答えがでるんじゃない。
データを持って次画面行きたいだけなら$_SESSIONを使うかな。
むしろPOSTする意味がわからない。
835:デフォルトの名無しさん
16/06/18 19:19:52.96 a+CHws3P.net
>>829
どんな方法使うんですか?
>>830
取り敢えず$_SESSIONに詰め込む事にします
836:デフォルトの名無しさん
16/06/18 20:16:44.01 CHIXqkwm.net
何を参考にしたのか知らないが、普通はそんなやり方はしない
837:デフォルトの名無しさん
16/06/18 20:41:31.45 a+CHws3P.net
普通はどうするんでしょうか
838:デフォルトの名無しさん
16/06/18 20:55:18.11 CHIXqkwm.net
普通は、一つのformに一つのsubmit
処理内容を分けたいなら、
処理の選択をするエレメントを付けてやる
839:デフォルトの名無しさん
16/06/18 22:59:24.24 pgLfn0h3.net
>>833
自分がしたい処理に似ている有名なサイトのページを分析してみればいい
840:デフォルトの名無しさん
16/06/19 18:04:14.78 JfyAxJGc.net
URLリンク(nanoappli.com)
こちらのサイトで
simpleXMLでXMLを組み立てた後
整形するためにDOMDocumentで出力しなおしていますが
最初からDOMDocumentでXMLを組み立てることは出来ないのでしょうか?
841:デフォルトの名無しさん
16/06/20 02:38:27.16 tnqQkYkd.net
$xml = simplexml_load_string($str);
json_decode(json_encode($xml), true);
で得られる形式の配列から
xmlに戻す、いい方法はありせんか?
842:デフォルトの名無しさん
16/06/20 06:31:07.37 gb8WC3Pe.net
foreachで頑張る
843:デフォルトの名無しさん
16/06/20 07:10:53.68 6mpJGPIZ.net
php同士ならserialize/unserializeでいいだろ
xmlとかyamlはまああれだ、趣味
844:デフォルトの名無しさん
16/06/20 12:29:12.56 tnqQkYkd.net
RSSを配列化→加工→RSSに戻す
ということをしたいのです
しかしPHPのXML周りはどうもイケてない気がします
簡単なことをするのも煩瑣で、少し突っ込んだ操作も不可能で・・
foreachで頑張るしかないのでしょうか
845:デフォルトの名無しさん
16/06/20 13:06:06.35 e7qwC/Xx.net
>>840
Rubyでも使いなさい
846:デフォルトの名無しさん
16/06/20 13:56:49.12 CH6czl6r.net
Rubyを使ったところで向こうのコミュニティに迷惑掛けるだけだろう
どの言語でも共通のDOMすら理解できてないんだから
847:デフォルトの名無しさん
16/06/20 14:30:03.12 ppvG3ddJ.net
Groovy なら、クロージャを使って、簡潔に書ける
タグ名.each{ 要素 ->
要素.value = 'abc'
}
848:デフォルトの名無しさん
16/06/20 15:02:05.88 tnqQkYkd.net
別にPHPが駄目だといっている訳ではありません
実用主義のPHPなのに
XMLと配列との相互変換のための関数が用意されていないのっておかしくね?
と言っているのです
あと値を設定した時に実体参照に変換してくれないところも気が利いてません
849:デフォルトの名無しさん
16/06/20 15:30:57.32 tnqQkYkd.net
>>837
あと良く使われてるこの手法もネームスペース属性がそぎ落とされますし・・
イケてないと言わざるを得ません
850:デフォルトの名無しさん
16/06/20 15:37:59.20 dCVNOi3X.net
黙れ!小童!!!!!
URLリンク(chattykh.com)
851:-content/uploads/2016/03/CZezN7LVIAApejO.jpg
852:デフォルトの名無しさん
16/06/20 15:43:22.49 CH6czl6r.net
>>844,845
配列に型変換して一体何が楽になると思ってるのか知らんけど
DOMが嫌だという人のために配列っぽく扱えるSimpleXMLElementが用意されてるだろ
ドキュメントも読まずに自分勝手にarray使っておいて気が利かないとか
マとして恥ずかしくないの?
853:デフォルトの名無しさん
16/06/20 15:46:32.10 kXAYtV38.net
>>847
少なくとも配列とDOMを相互変換とか言ってる時点で正気じゃない
黙ってNGに突っ込んでおくのがよい
854:デフォルトの名無しさん
16/06/20 16:19:51.02 tnqQkYkd.net
>>847-848
じゃあXMLのままフィルタリングやソーティングしてみて下さい
855:デフォルトの名無しさん
16/06/20 16:21:39.69 o/Q8QvES.net
入れ子になってる構造でソートだって?
856:デフォルトの名無しさん
16/06/20 16:22:31.78 1gK0q/ls.net
>>844
その辺に関してイケてると思う言語はどれ?
857:デフォルトの名無しさん
16/06/20 16:26:10.03 1A5wn0fq.net
>>850
兄弟の順序に意味があるXMLだって?
858:デフォルトの名無しさん
16/06/20 17:55:01.05 o3UTjcQ6.net
セキュリティ関係が頭に全然入ってこないです
どうやって勉強すればいいでしょうか
859:デフォルトの名無しさん
16/06/20 18:14:04.86 Iph33/KO.net
>>853
模擬サーバーにハッキングしてみる(実証実験)
860:デフォルトの名無しさん
16/06/20 18:43:25.91 6mpJGPIZ.net
頭に入らないってことは頭の安全性は保障されてるんじゃね、セキュアだな
861:デフォルトの名無しさん
16/06/20 19:42:02.13 DtHt205g.net
みんな頭いいね。おれなんて
total=total+1の時点で頭がテンパってるわ
862:デフォルトの名無しさん
16/06/20 19:51:18.58 7UcrPiUv.net
いまでもよく無限ループやらかします(小声)
863:デフォルトの名無しさん
16/06/20 19:56:33.91 Ht1YDCGg.net
>>857
ループ変数を $i にするのを卒業しようとしたら $i++ だけ残ってたり
864:デフォルトの名無しさん
16/06/20 21:23:50.71 7KDOMThT.net
イテレートで盛り上がれる純朴さが羨ましい限りだ。
865:デフォルトの名無しさん
16/06/20 21:28:32.25 7KDOMThT.net
Too young to die, too drunk to live なのかねぇ…
866:デフォルトの名無しさん
16/06/20 23:03:57.10 tnqQkYkd.net
>>851
rssの生成は今回はじめてやってるので知りません
他の言語と比較してイケてないと言っているのではなく
単にイケてないと言っているのです
867:デフォルトの名無しさん
16/06/20 23:07:57.34 vKqEeD2c.net
>>861
プログラミング言語なんだからイケてるライブラリは作り放題だぞ
できたら公開してくれ
868:デフォルトの名無しさん
16/06/21 07:36:44.50 F8rFyF6H.net
>>861
XML_RSSってメンテされてないんでしょ、これはあれだ、お前がやれという天啓
869:デフォルトの名無しさん
16/06/21 13:10:43.41 ZCseRBtp.net
XMLオワコン
JSONだけでいいだろもう
870:デフォルトの名無しさん
16/06/21 14:03:51.86 ZWokyEcu.net
WEB IDEの PhpStorm ておいくらなの?
会社に購入を申請しようとおもうだけど
お値段がどこにものっていない
871:デフォルトの名無しさん
16/06/21 14:17:29.46 ZCseRBtp.net
URLリンク(www.jetbrains.com)
つうかphpstormでググれば3秒でわかるような質問してる人がプログラマーなのに驚愕
872:デフォルトの名無しさん
16/06/21 15:02:57.47 ZWokyEcu.net
>>866
高!!
199ドルもするの??
phpstormでググったけどその価格のページにたどりつけんかったんよ
873:デフォルトの名無しさん
16/06/21 15:07:06.24 ZWokyEcu.net
>>866
とりあえず会社に申請してみます。
ありがとう。
874:デフォルトの名無しさん
16/06/21 15:20:20.47 ZCseRBtp.net
ブラウザとか環境によるのかもしれんけど自分の場合こんな感じに出る
PhpStorm IDE :: JetBrains PhpStorm
URLリンク(www.jetbrains.com)
このページを訳す
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ドルね
URLリンク(www.jetbrains.com)
875:デフォルトの名無しさん
16/06/21 15:32:11.50 GUPYo8em.net
PEARを使うことによってPHPでの開発は劇的に向上する
876:デフォルトの名無しさん
16/06/21 16:01:19.29 GdkMnzSr.net
いまさらですか?
877:デフォルトの名無しさん
16/06/21 16:07:25.78 JNUr2v78.net
ネストされた配列を再帰を使わずにパースしていく
いい方法はありませんか?
878:デフォルトの名無しさん
16/06/21 16:53:13.58 PPdTS3ln.net
$199とか、1日の人件費くらいだろ
879:デフォルトの名無しさん
16/06/21 16:54:36.54 F8qq0CQB.net
>>871
あんたPEARなんて使ってんの?
880:デフォルトの名無しさん
16/06/21 16:56:47.93 GdkMnzSr.net
安価ミスですか?
881:デフォルトの名無しさん
16/06/21 17:10:33.70 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:デフォルトの名無しさん
16/06/21 17:30:39.61 GdkMnzSr.net
API仕様知らないけどこれだとまずいの?
$deletePhotoPaths = [];
foreach ($user->photos()->lists('photos.id') as $value) {
$deletePhotoPaths[] = 'photos/' . $value . '.jpg';
}
Storage::delete($deletePhotoPaths);
という些細なものは置いといても、単数形と複数形のポリシーが適当すぎて気持ち悪い。
883:デフォルトの名無しさん
16/06/21 18:18:36.43 E96GoXUh.net
>>876
逆にそれより汚く書くとどうなるんだ?
884:デフォルトの名無しさん
16/06/21 18:32:23.09 JNUr2v78.net
正直ごく普通のコードに見えますが・・。
配列はphotosIdListとかにして配列と示した方が良さそうですね
885:デフォルトの名無しさん
16/06/21 18:39:20.94 E96GoXUh.net
ID からパスを求める処理は他でも使うから、メソッドなり関数なりに切り出しておくべきだろうね。
array_walk のコールバックに合わせたインタフェースにするといいかもしれないが、それだと単体の変換向けにはちょっと使いづらくなるから、
そこをどう解決するかにセンスを求められるかもな。
886:デフォルトの名無しさん
16/06/21 18:44:08.60 E96GoXUh.net
>>880
array_walk じゃなく array_map にすりゃいいのか。
なんかボケてたわ。
887:デフォルトの名無しさん
16/06/21 18:53:30.67 Dmco6gBH.net
>>873
フリーや零細ならそういう考え方でいいが、
ある程度の規模になるとそんな甘っちょろい考え方では済まなくなる。
888:デフォルトの名無しさん
16/06/21 20:06:44.71 E96GoXUh.net
>>872
なんで再帰にしたくないの?
パースって具体的にどんな処理?
もしかして >>837 の人?
889:デフォルトの名無しさん
16/06/21 20:08:30.54 JNUr2v78.net
>>845の件ですが
ネームスペースだけでなく、属性も消えると判明しました
ネームスペースや属性もちゃんと表示するコードをしこしこ手書きしたのに
短い方がいいと思って廃棄してからそのことに気付きました
ファックですね?
890:デフォルトの名無しさん
16/06/21 20:10:13.56 JNUr2v78.net
>>883
処理が単一的でないので、再帰だとどうもうまくいかないと思ったのです
でも再帰でうまく出来そうです
ありがとうございました
891:デフォルトの名無しさん
16/06/21 20:11:19.45 Dmco6gBH.net
>>884
一生言ってろ、dumbass
892:デフォルトの名無しさん
16/06/21 20:17:57.37 JNUr2v78.net
>>886
ハゲは黙ってろ
893:デフォルトの名無しさん
16/06/21 20:36:38.54 oaiM5wE7.net
>>884
gitみたいな分散バージョン管理システムつかいなよ
こまめにローカルコミットしとけば
戻りたい地点にすぐ戻れる
894:デフォルトの名無しさん
16/06/21 20:39:12.30 Dmco6gBH.net
サルがVCSか。どのように使うか見ものだな。
895:デフォルトの名無しさん
16/06/21 20:48:50.16 E96GoXUh.net
>>884
むしろ XML の使い方を simplexml_load_string で扱える範囲に収める方がいいんじゃない?
わざわざ XML を使うなんてのは余所とのデータ交換のためなんじゃないかと思うけど、であればなおさら誰でも読めるフォーマットにした方がいいでしょ。
もう仕様が確定して運用中だったらどうにもならないけど。
896:デフォルトの名無しさん
16/06/21 22:24:57.65 JNUr2v78.net
>>884の件ですが
ファイルを別ファイルとして保存
→undoしまくる
という方法で復活できました
>>888
一応dropboxをバージョン管理に使ってるのですが
今回はちょっとしたテストのつもりでデスクトップで書いていたので・・
ちゃんとした開発ではsubversion使ってます
>>890
生成しようとしてるのはpodcast用のRSSなので、
仕様はすでに決まってるのです・・