【PHP】下らねぇ質問はここに書き込みやがれ 8 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/03/15(水) 00:41:22.79ID:ko4BTSP20
PHPに関する下らない質問用避難スレです。
まず読むこと【PHPマニュアル】
http://www.php.net/manual/ja/

前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 7
http://echo.2ch.net/test/read.cgi/tech/1478657006/

次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2017/10/02(月) 21:00:14.97ID:fIRtXeXL0
ec-cubeのソースを見ていたら
require_once が書かれてなくて、useだけ書かれているファイルが沢山ありました。

なんで、エラーにならないの?
2017/10/02(月) 21:17:59.72ID:T8QXjIur0
>>662
composer.jsonのautoloadセクションにオートローディングの設定書いてりゃrequire_onceが必要なのはエントリポイントだけ
2017/10/02(月) 21:28:04.49ID:V+ucx/B30
ソース見ないとわからんけど、__autoload とか使ってるんじゃ無い?
2017/10/02(月) 21:30:47.93ID:fIRtXeXL0
>>663
おー、わかった
サンクス
2017/10/05(木) 12:46:13.98ID:HZkkfHm10
テスト
2017/10/05(木) 13:00:26.21ID:HZkkfHm10
コード貼ると書き込めないようで・・・
https://ideone.com/UMVJrY

いずれも問題なく動作するのですが
mb系の関数ってどういうところで使うんでしょう?
2017/10/05(木) 13:48:00.22ID:PIRKucuZ0
strlenの値見てみればいいじゃん
669デフォルトの名無しさん (ワッチョイ 46eb-8BZG)
垢版 |
2017/10/07(土) 03:33:19.78ID:E8QcxmPR0
cakeのヘンなURLはみんな一々普通の書式に書き換えてるの?

/index/limit:3/page:2 ←キモい
index/?page=2    ←普通こんな感じだよね

フレームワークってたいへんだね
670デフォルトの名無しさん (ワッチョイ 457c-N+2N)
垢版 |
2017/10/07(土) 04:28:12.75ID:n7/qhps90
動けばいいのよ
2017/10/07(土) 07:48:18.63ID:gc7GFpiH0
>>669
むしろ下のURLの方が汚らしいんじゃね
2017/10/07(土) 08:58:47.62ID:CQDT89una
>>671
あまり言ってやるな
2017/10/08(日) 06:58:12.38ID:CWK8ZE8n0
>>669
反吐が出そうなスタイルから一般的なスタイルにしたきゃ
paramType を querystring にすりゃいい
2017/10/08(日) 19:54:00.65ID:31mgpPhM0
>>673
dクス 直った。あー気持ち悪かったw
2017/10/08(日) 21:19:07.77ID:Uwv5PG/i0
静的Pathにするのって、Google対策だっけ?
2017/10/09(月) 12:03:26.40ID:YlLc/E6M0
>>659
世界ではLaravel主流になろうとしてるけど、ちょこちょこバージョン上げすぎなんじゃ
日本語翻訳された頃には次のバージョン出てたらかなわん
2017/10/09(月) 13:13:37.43ID:h4S41BKFa
cake3も同じだわ
2017/10/10(火) 17:56:47.10ID:xdjFdlld0
Symfonyはどうなの?
合計10億ダウンロードを達成したようだが

https://symfony.com/stats/downloads
2017/10/11(水) 03:47:35.08ID:KMdfjBPl0
Symfonyは文字数が多くなる気がして
個人的にはイマイチ子
2017/10/13(金) 20:01:46.42ID:s758Uzmra
phpのプレイグラウンドサイトでいいところがあれば教えて下さい
https://www.tehplayground.com
とりあえず検索して見つかったここを使ってますが
もっといいところありますか?
2017/10/13(金) 20:02:50.62ID:s758Uzmra
>>678
すごいスピードで増えてますね
日本の借金のようです
682デフォルトの名無しさん (ワッチョイ 2beb-KNNp)
垢版 |
2017/10/13(金) 21:02:49.56ID:NQNcqrHf0
Mac Sierra + XAMPPでCakePHP3のインストールが出来ないのだけど、
みんなどうやってインスコしてるの?
composerはインスコできたけど、intlが入らない

バージョン2はコピペで済んだから楽だったのにな〜・・・
2017/10/13(金) 21:28:05.09ID:s758Uzmra
>>667
ここ良さそうですね
php以外にも大量に書けますし
2017/10/13(金) 23:35:56.43ID:s758Uzmra
git for windowsを入れたら
gitbashの中でphpも実行できるので便利ですね?
コマンドラインと大差ないといえばないですが
gitbashは任意のフォルダから始められるところがいいです
685デフォルトの名無しさん (ワッチョイ f97c-4jF/)
垢版 |
2017/10/14(土) 04:10:36.29ID:TNxvk7D00
sourcetreeでいいよ
どうしてもコマンド打ちたいなら別だけど
2017/10/14(土) 07:17:33.63ID:sv7zl76da
atlassianってtrello買収のニュースで聞いたことがありましたが
こういうものを作っていたんですね
とりあえずインストールしてみました
2017/10/14(土) 16:05:22.67ID:sv7zl76da
正規表現では一重引用符、二重引用符ともに
エスケープする必要がないと知りました
エスケープをしても問題が出ないので今まで気づきませんでした

preg_match('/\"/','"',$matches);

var_dump($matches);



preg_match('/"/','"',$matches);

var_dump($matches);


どちらの結果も同じになります
何故エスケープする必要のない引用符をエスケープしても
問題が出ないのでしょうか?
2017/10/14(土) 18:01:08.37ID:sv7zl76da
よく考えてみると、引用符をエスケープしなければいけないのは、
それが文字列と外界との境界を形成する特殊な文字だからで、
正規表現では文字列の境界をデリミタが形成するので、
引用符は普通の文字と全く変わりがない、
だから他の「普通の文字」をエスケープしても同じことではないか、
と思ってqで試してみたらやはり同じ動作になりました

preg_match('/\q/','q',$matches);

var_dump($matches);

正規表現エンジンは、
意味のないエスケープ文字
を単に無視するように出来ているのでしょうか?
2017/10/14(土) 18:22:55.67ID:WLIJLkznd
エスケープされた文字列を解釈するのはPHPのエンジンであり、解釈された文字列は、PHPの文字列になる。
正規表現エンジンは、当然PHPの文字列を、正規表現を表す文字列として解釈する。
最初の解釈で、無意味なエスケープはバックスラッシュが無視されるのだから、何も悪いことは起きない。
2017/10/14(土) 18:34:55.85ID:sv7zl76da
たしかにPHPの場合正規表現もまず最初に普通の文字列に入れられるので
>>688の言い方は適当ではなかったです
やはり正規表現エンジンは無意味なエスケープをただ無視するように作られているのですね
ありがとうございました
2017/10/15(日) 11:18:23.57ID:CEYZTvIx0
PHP初心者です。
PHPの実行モデルがイマイチ分からないのですが、
これはイベントモデルではなくただのテンプレートエンジンで、
前回の結果(または鯖上でのコンテキスト)を引き継ぐことなく、
毎回毎回ゼロから構築する必要があるって認識で合っていますか?

具体的には、Webページ全体で使われるクラスやdefine()している場合、
それらを毎回includeする必要があるのでしょうか?(今のところそう見えます)

クライアントJavaScriptの場合はページ遷移がない限り一度構築した物は使えます。
Nodeは使ったことがないですが、多分同じです。
(これらはイベントモデルだからですが)
毎回毎回全構築となると、余分な構築を省かないと実行速度が気になります。
ドメイン全体で単一アプリを提供する場合は
PHPではなくNode等の方が向いているということなのでしょうか?

例えば、dbアクセス用にクラスを作った場合、
それぞれのWebページからはその全メソッドを使うことは通常あり得ません。
だからプログラム的に美しく一つのクラスに纏めるより、
フィールドを継承し、今使うメソッドだけの子クラスに無駄に分割した方が速いのか?とも思えます。
あるいはspl_autoload_register()した場合に、
名前参照だけではなくコンパイル済み状態で格納されるから速度上の問題はない、とかありますか?
2017/10/15(日) 11:55:30.86ID:s8ygMoJ80
>>691
サーバサイドアプリケーションは大体そんなもんだと思うが
HTTPでセッションを跨いだクライアントの同一性保証なんて不可能だし

コードのパースとかの時間が気になるという意味ならopcacheのようなキャッシュ機構はある


とりあえずサーバサイドアプリケーションについて真面目に勉強するならLaravelとかSymfonyのチュートリアルくらいは触ってみたら
クライアントサイドとは全く違うから
2017/10/15(日) 13:46:10.80ID:CEYZTvIx0
>>692
了解です。ありがとうございます。
何らかの機構を備えていると勝手に信じていたので、軽く衝撃でした。
(ちなみにGoとかも同じですかね?ご存知であれば)

ただこれならPHPは各ページ毎に様々なことをするのには向いていますが、
(とはいえこれが通常のHP用途の90%以上を占めますが)
掲示板サイト等、ドメインで単一アプリを提供する際には本質的に遅いことになります。
別サイトで「こんなのどうよ?」と提案したところ、
「PHPでは無理だから止めろ、どうせNodeを使うことになるぞ」と避難轟々だったのも分かります。
この状況でフレームワークを使っていること自体が結構信じがたいです。
とはいえ今回は共用鯖等超軽量環境向けの為、NodeやGoは選択出来ず、PHPしかないのですが。
(参考) http://postd.cc/websocket-shootout/


別件ですが、CSRF脆弱性対策について、
これは単発のリンクを踏んだ(表示した)時用の対策であって、
ガチでのクライアントスクリプト等による攻撃向けではない、という事で合っていますか?

例えば、あるページを表示し、そこのJavaScriptが実行されるなら、
ajaxでhtmlを取得し、CSRFトークンを取得して、
掲示板にその人が書き込んだように見せかけることは簡単に出来ますが。
2017/10/15(日) 14:31:37.78ID:s8ygMoJ80
>>693
お前さんが何をしたいのか分からんし衝撃受けるのも勝手だが, クライアントサイドの常識をサーバサイドに持ち込むな
PHPに限らずRubyだろうがPythonだろうが何も変わらん

NodeやGoや更に言えばC/C++でサーバ作るというのは考えられるがメンテコストが膨らむしデプロイも面倒
その必要が本当にあるのかよく考えろ

> CSRF
Same Origin Policy
2017/10/15(日) 17:17:04.22ID:u42Q3jAo0
>>694
> PHPに限らずRubyだろうがPythonだろうが何も変わらん
いや多分PHP特有ですよ。RubyやPythonは自前で鯖起動しますので。
Railsチラ見しましたがそんな感じです。
https://railsguides.jp/getting_started.html

ただ現実的にRubyやPythonは超軽量環境でも使えるのでRailsは選択肢になりますね。
とはいえPHPでもopcacheでほぼ問題ないはずですが。
まあとにかく今は味見中です。

作ろうとしているのは掲示板アプリで、GoやNodeの高性能版はOSSで既にあります。
もちろんPHP版も既にあるのですが、こちらも大体高性能化を目指しているので、
超軽量環境向けの廉価版を作ってみようかと。
AGPLv3で公開する予定ですので、興味があればどうぞ。
https://meguca.org/g/2724701
2017/10/15(日) 17:24:11.11ID:L1ItWz+aa
>>695
Webrickのこと言ってんのか?
テストはともかく実用環境でWebrickなんか使わねぇよ
実環境ならUnicorn, PumaとかPassengerがアプリケーションサーバだよ
2017/10/15(日) 22:50:14.72ID:lMinf0FC0
遅い早いって2ch読み書きするのをストレスに感じないのであれば杞憂でしょう
ボトルネックになる部分はPHPの機構なんかよりもネットワーク間の問題のほうが大きいわけで
2017/10/16(月) 00:01:36.25ID:OoF3Ic3Va
自分もリクエストのたびにこの巨大なフレームワークを読むのか?
とひるんだ時がありましたが
そこは実行コードをキャッシュする仕組みでカバーできるんですね
というか今の人はスタートがnode.jsとかなんだなーという驚きがあります
2017/10/16(月) 00:42:39.22ID:DJrtJlQd0
node.jsってレンサバで動くんか???
2017/10/16(月) 02:50:04.46ID:N7MUl21Ra
vpsでやろ。
2017/10/16(月) 08:53:25.48ID:twPANPDV0
>>699
https://qiita.com/azk0305/items/0bdb0fdab4bc8ebb5909
2017/10/16(月) 23:32:43.30ID:DJrtJlQd0
ふぇ〜さくらってスゴいのね
2017/10/17(火) 01:14:58.17ID:HUD/bT/k0
別にサクラはすごくないだろ
この手の方法はわりとどのレンサバでもできる
2017/10/17(火) 04:14:34.59ID:UUhSDchZ0
>>698
メモリを犠牲にして専用のアプリケーションサーバとそれ専用のフレームワークを作るのは
非常に面倒だけど別に難しいことじゃないのでPHPで作ってもいいのよ
2017/10/17(火) 06:07:25.14ID:C8ORuPRh0
質問です。PHPとSQLite3共に初心者です。
PHP+SQLite3でatomic counterが欲しいのですが、変更前の値が上手く取れません。
(unique保証が必要です)
散々ググって試行錯誤もしたのですが、上手くいきません。もしかして綺麗には無理ですか?

$sql = "BEGIN;";
$sql .= "SELECT count FROM counters WHERE id = 'post';";
$sql .= "UPDATE counters SET count = count+1 WHERE id = 'post';";
$sql .= "COMMIT;";
// $result = $db->exec($sql); // インクリメントされるが肝心の値が取れない
$result = $db->querySingle($sql); // なぜかNULLが入っており、インクリメントされない
// $result = $db->query($sql); // その後で fetchArray(): Unable to execute statement: cannot start a transaction within a transaction と出てインクリメントされない
var_dump($result);

なお奇特な方のためのDB設定用コードは以下です。
$db->query('CREATE TABLE counters (id TEXT PRIMARY KEY, count INTEGER)');
$db->query('INSERT INTO counters VALUES ("post", 0)');

atomic自体はUPDATEだけで保証されているのですが、変更前の値をuniqueに掴みたいのです。
用途は例えば掲示板で、自分の投稿が何番か知りたい、とかです。
BEGIN/COMMITでくくらず別々にした場合はunique保証が出来ないのでNGです。
2017/10/17(火) 09:57:21.02ID:RHJUWC0z0
>>705
1回のクエリで実行しようとしたらそらそうなるでしょ
あと一意性を保証したいならトランザクション分離レベルをRepeatable Read相当(SQLiteではIMMEDIATEだったっけ)にする必要がある
2017/10/17(火) 10:56:38.81ID:s8lIkCI50
>>695みたいなPHPのコストについての話が出る度に思うが
こういう人って今までどの程度の規模のサービスを扱った事があるんだろ?

10年ぐらい前に俺が個人の趣味の延長で開発してaspとして金取ってたサービス
800万PV前後/日程度だったが
当時のPHP4系・MySQL3系・Apach1系の組み合わせのサーバー1台(DBすら分けてない)で運用できてた

レンタル費用をケチろうと思ったんだろう
貸出先が業者にまんまUIパクったようなものを数百万で作らせたら
全然PV裁けなくなって業者に文句言ったら
捌けるようになるまでサーバーを増やせと言われたという笑い話

800万PVなんてここのプロ様に比べたらレベルが低すぎるだろうから
最低1億PV/日ぐらいは想定してるんだろうなきっと
2017/10/17(火) 11:13:26.21ID:RHJUWC0z0
でも実際物理で殴る方がお安く済む, でしょう?
2017/10/17(火) 14:02:18.91ID:0jVjcAN80
>>707
800万pvのサイト今もやってるの?
2017/10/17(火) 14:45:24.76ID:s8lIkCI50
>>709
UIまんまパクったものを業者に作らせてると知った時に
そっちへサービス切り替えた瞬間に全部停止する事にしたから当然今はやってない
当時は他でネタ扱いされる程に儲けてたし

ちなみに何故それを知ったかというとその業者の開発者の内の1名から
技術的な質問をされたから
当然教えるわけないというか「コイツ頭おかしいんじゃね?」と思った思い出

>>708
今はそうだろうね
当時のこの話の場合、結局パクったシステムのサーバー運用コストの方が高くなったという笑い話
2017/10/17(火) 21:06:15.90ID:rwpxP9zha
PHPでHTMLをパースして、
JavaScriptのquerySelectorみたいなもので要素を選択したいのですが
そういうライブラリみたいなものありますか?
2017/10/17(火) 21:39:14.67ID:uXsqtlL/0
phpquery
2017/10/17(火) 21:50:33.21ID:rwpxP9zha
>>712
自分でしこしこ書いてたんですが、もうあったんですね
この数日の努力とはなんだったのか・・。
でもありがとうございます
2017/10/18(水) 00:06:15.43ID:catz1Ji3a
>>680の件ですが
http://phpfiddle.org/
を見つけました
関数の補完があるのが良さそうです
2017/10/18(水) 00:30:04.05ID:catz1Ji3a
JavaScriptのプレイグラウンドはcdnからライブラリを読み込めますが
PHPのプレイグラウンドでライブラリを読めるものはないのでしょうか?
2017/10/18(水) 00:45:02.72ID:c6Rft4Lma
というかプレイグラウンドなのにライブラリ読み込めないって
全然遊べないですよね・・
2017/10/18(水) 05:41:41.19ID:IAqZZNli0
>>706
少し紛らわしかったので補足します。
705のコードはSQLite3では意図したようには動きません。

ただしMySQL等他DBなら動くようです。(FOR UPDATEはSQLite3ではエラー)
https://dba.stackexchange.com/questions/61603/how-to-query-and-increase-a-value-counter-in-a-thread-safe-way-avoid-race-co
或いは以下の書き方も出来るようです。
$sql .= "UPDATE counters SET count = (@cur_value := count)+1 WHERE id = 'post';";
$sql .= "SELECT @cur_value;";
http://www.sqlines.com/mysql/how-to/select-update-single-statement-race-condition

問題はSQLite3ではこれらが出来ないことです。

ググル限り、UPDATEとINSERTの戻り値はAndroidでは取れており、
http://naichilab.blogspot.jp/2013/06/sqliteinsertautoincrement.html
http://android.roof-balcony.com/shori/strage/insert/
これらはPHPでは SQLite3::changes SQLite3::lastInsertRowID であり、
rowID===INTEGER PRIMARY KEY なので、INSERTして取る方法でとりあえず回避しました。
https://www.dbonline.jp/sqlite/table/index8.html
http://www.sqlite.org/autoinc.html
以下コードになります。

$sql .= "BEGIN EXCLUSIVE;";
$sql .= "INSERT INTO logs VALUES ((SELECT count FROM counters WHERE id = 'post'), date('now'), '$data');";
$sql .= "UPDATE counters SET count = count+1 WHERE id = 'post';";
$sql .= "COMMIT;";
$result = $db->exec($sql);
var_dump($db->lastInsertRowID());

カウンタに対して2回クエリしているのが無駄なんですが、何とかなりませんかね?
(とはいえこちらは我慢できる範囲ですが)
なおスレ毎にtableを分ける予定ですのでAUTOINCREMENTには出来ません。
2017/10/18(水) 05:42:26.75ID:IAqZZNli0
次の質問です。
PHPの出力の終了を宣言することは出来ますか?
(そこで一旦通信を終了させ、その後は(ユーザから見て)バックグラウンド的に処理する)

ob_end_clean()はバッファのオフであって終了宣言ではないように見えます。
register_shutdown_function でリクエストの一部にはならない版が欲しいのです。
具体的には、PVの話が出てきて、それもいいなと思ってRead側にもカウンタをつけたものの、
Read/Writeで100倍くらい違うのでこの処理を分けたいのです。
・マルチスレッド(pThread) ← インストール必要
・非同期 ← フレームワーク必須
のため、
・</html>送信後はユーザー側には見えなくなるのでここでやらせる
という作戦を考えましたが、見た目それようの関数がなさそうです。
詳細は後述しますが、これが出来ればユーザ側レスポンスが0.2秒ほど早くなります。
或いはReadに関してはApacheのログをcron等で処理させる方がいいのでしょうか?

ちなみに速度ですが、もう既に遅いです。
XAMPPのローカル環境ですが、純粋にReadだけなら100pv/s程度で、
PVカウンタをDBに持たせるとそこに書き込みが行われ、2pv/s程度まで落ちます。
投稿ならこの倍遅く、1pv/sec程度になります。
まだ味見程度で、全部で100行くらいしか実行してないんですけどね。DBもスカスカですし。
8Mpv/day=100pv/sというのは、ちょっと言い過ぎでは?
或いは304にするかCloudFlare等活用しないと厳しいと思われます。
8ch.netはvichan(PHP+MariaDB)で40kposts/day=0.46posts/sを処理できませんでしたし、
桁はこれで合っていると思います。
だからってGoやNodeがどれほど速いのかは知りません。
(なお上記はスループットではなくレイテンシからの算出なので、実際はこれより早いはずですが)

なお実はBBx規制されており、代行してもらってます。
あまり面倒をかけるのも悪いので、以下に来てくれれば歓迎します。
https://meguca.org/g/2746787
2017/10/18(水) 06:48:41.64ID:QGH5jOmla
>>718
迷惑だな
2017/10/18(水) 09:38:34.01ID:ZpnTdM5ra
>>713の件ですが
動作を確かめていますが、
phpquery、jqueryのセレクタが全部動いて素晴らしいですね
2017/10/18(水) 09:42:25.90ID:rF9hS7IgM
>>718
どんなマシン使ってるか知らんし、どれくらい書き込んでるし分からんが、いくら何でも遅すぎる
根本的になにかが間違ってると思うよ
2017/10/18(水) 12:36:34.56ID:v7V1Syde0
8Mpv/day=100pv/sが言い過ぎってさ…
実際に10年前に今より貧弱な環境で稼働させて
aspとして金を稼いでたサービスなんだけど(MAXで1000万/日超えた日もあった)

PHP4だったというのもあるけどさ
オブジェクト指向なんて全く理解してなかったしフレームワークも使ってない
クラス1個も使わずにfunctionとヒアドキュメントの組み合わせ
名前空間なんてものも当然なかった

DBへのアクセスが極力発生しないようにはしてたけど俺のレベルは糞低いぞ
サーバーのログはテキストでも壊れない…って事は全部テキストキャッシュにしてそれを読めばいい!と何でもテキストにしてたw
頭の悪い俺なりの発想
2017/10/18(水) 12:37:11.21ID:v7V1Syde0
昔こんな人と仕事をした事がある
色んな言語やデザインパターンを熟知してて
PHPも「これぞオブジェクト指向だ」と唸る程に素晴らしいコードを書ける
めちゃくちゃ頭が良いのが少し話すだけで分かるような人だった(後から知ったが東大卒だった)

でもその人が作ったサービスは激重で運用できなかった
俺は技術もないし頭が悪いからその人の何が悪いかは分からなかったけどw

お前らすごいね
実行レベル?イベントモデル?
pThreadだのGoだのNode.jsだのCloudFlareだの
俺には全然分からんわw

それでどんなサービスができるの?何人ぐらいに使ってもらってどれくらい捌けるの?
って事にしか興味がない

だってさ、使う人にとっては何の言語で書いてるとか関係ないじゃん
これだからPHPerは…って言われるんだろうけどこれでも金はそこそこ自慢できるぐらいは稼いできたからなぁ…
2017/10/18(水) 14:36:39.14ID:ZpnTdM5ra
PHPもwebrickやnode.jsみたいに
それ自体でサーバになればテストに便利なのに
と思って検索したら標準でビルトインウェブサーバーっていうのがあったんですね
2017/10/18(水) 21:26:02.74ID:451ejlL00
君は知らなかったかもしれないがそれ標準で組み込まれてもう5年半なんだ
2017/10/18(水) 22:56:18.69ID:/mn5vVDsa
長い間情報収集を怠っていたので
世の中想像以上に便利になっててびっくりします
2017/10/19(木) 04:05:45.17ID:lZeER9v70
>>721
こちらは桁が分かってないので助かります。
マシンは2007年製のポンコツで、書き込みは数文字だけですね。

レイテンシからスループットへの換算はやはり無理があるとして、
レイテンシだけにしても遅いので、問題もあるのだとは思います。(外部サイトの方が速い)
http://www.techempower.com/benchmarks/#section=data-r4&;hw=ph&test=db


>>722-723
opcacheの無い状態だと、コードを美しく整えれば整えるほど遅くなるから、
それを最初に確認したのです。>>691

君が書いたコードは細切れのバラバラで、
結果的に使う部分だけ走行するから速かったのでしょう。
それの方がよければそうすればいいだけです。

> 全部テキストキャッシュ
結果的に静的ファイルでキャッシュが効いたということでしょう。
今も同じ問題がCloudFlareにもあります。

> って事にしか興味がない
結果指向なのは正しいと思いますよ。
プログラミングはあくまで手段であり、目的ではないので。
特にネット上だと本末転倒になっている人も散見されます。
全く考えないのも問題ですが、考えすぎて手が止まっているのも問題です。
なおPHPerは最も馬鹿にされているらしいですが、JavaScripterよりマシな気はしますよ。
そしてデザインパターン/言語コレクターは使い物にならないと個人的には思います。
2017/10/19(木) 04:06:52.86ID:lZeER9v70
次の質問です。
以下環境でtidewaysが動作している人は居ますか?

A. PHP7.1, Win32, x86
B. PHP7.1, Win32, x64
C. PHP7.1, Linux on VM (つかPHPerの標準環境ってこれ?)
または
D. tidewaysのWindows用ビルドに成功した人、または挑戦する気がある人

こちらはA環境で入れてはみたものの、上手く動きません。
(ライセンス無し、XHPROFの代用での使用)
反応はしており、walltimeが 0, -2,147,483,648, -4,294,967,296 なので、31bitずれています。
おそらくHPETの問題で、以下の
https://github.com/tideways/php-profiler-extension/blob/master/tideways.c#L3308-L3336
のところを修正すれば動く可能性があります。
ただこれはマシンにもよるし、ビルドは嵌る可能性が高い為、
VM等含めて動いている人が居るのであれば動くマシンを探し、駄目なら諦めかと。
誰かビルドに挑戦するのであれば協力はします。
なおビルドオプションは以下が参考になります。
https://ci.appveyor.com/project/tideways/php-profiler-extension/build/4.0.4.215/job/kmxa1he0cjomvjpr

或いは他プロファイラーでいいのがありますか?
2017/10/19(木) 12:16:50.62ID:NzzKiK+50
> プログラミングはあくまで手段であり、目的ではないので。
> 特にネット上だと本末転倒になっている人も散見されます。
> 全く考えないのも問題ですが、考えすぎて手が止まっているのも問題です。

自己紹介乙
2017/10/19(木) 12:28:28.36ID:FE92wYZta
僕はプログラミングが目的で仕事はついでです
2017/10/19(木) 22:44:13.21ID:KjwMHyuL0
Windows CLIアプリで、EMAILなんかのJIS(ISO-2022-JP)文字コードのファイルを、
読み込んで変換して表示することは出来るのですが、
PHP自体をJISにして、そのPHPに書かれている日本語をechoすると、
undifined variable $Bのようなnoticeが出ます。
もちろんちゃんとコードページにあった文字コード(cp932)に変換はしているのですが、
変換以前に日本語が変数と認識されてしまうようで、うまくいきません。
PHPをJISで保存するなんてことは普通しませんが、
JISでPHPを保存した場合でも、Windows CLIでうまく動作させる方法はありますか?
ttp://tsuttayo.jpn.org/bbs/read.php?FID=2&TID=519
このような記事を見つけて、書かれてる設定を加えてみたのですが、エラーは消えませんでした。
2017/10/20(金) 20:31:39.76ID:OAuKO2/4a
PHPをJISで実行しなければいけない理由は何ですか?
2017/10/21(土) 08:07:53.66ID:7N/u1SNi0
>>732
もし数行で対処出来るようなら取り入れようという感じのもので、
出来ないなら出来ないで構わないのですが、
JISで上書きしなおされるというイレギュラーに対処するためです。
2017/10/21(土) 10:33:40.68ID:LXe9cSfz0
PHPで作った自作のフォームに書き込みがなされると
メールで通知してくれるようにしている。

鯖の移転を考えてるんだけど(具体的にはByetという海外無料鯖)
あいにく候補の移転先はsendmailに非対応だったりする
(スパムメール対策だとか)

こういうときってどうやったらフォームへの書き込みを自分宛に
通知させることができるかな?
2017/10/21(土) 13:19:00.37ID:jXM7J8Fl0
>>733
PHPCSに掛けよう
大抵のルールセットはソースがUTF-8以外で書かれていればエラー扱いにしてくれる

internal_encodingの問題じゃないかとは思うが, 不正な文字コードで保存された場合にはリポジトリにpushされる時点でエラー通知が飛ぶようにするべきだな
2017/10/21(土) 13:59:33.75ID:ZxQy+kqda
PHPとGoって何が違うの?LIGが自社サービス開発にGo言語を採用したお話
https://liginc.co.jp/284306
>Go言語がPHP 7の30倍、PHP 5.6と比べるとなんと82倍にも及ぶスピード

こんな記事を見つけました
OPcacheなどを使った場合と比べてどうなのでしょうか?
自分の考えるPHPの魅力は、
Javaからパクったオブジェクト指向、
標準の関数でウェブやデータベースアクセスが色々できて面倒くさくない、
といったものがありますが、
Goのようなモダン言語ならそのあたりもクリアしてるんじゃないかと思います
どうなのでしょうか?
2017/10/22(日) 07:41:34.63ID:6vhnloCO0
他スレへGo!
2017/10/22(日) 08:49:39.36ID:FIB6YbKNa
>>734
このbyetってところいいですね
cronも使えるし
2017/10/22(日) 11:43:49.92ID:hechdin40
>>738
うん、いいところだな、と思ったら肝心のsendmailが動いて無くてな・・・

フォームに書き込みがあるとリアルタイムでメールで通知してくれるプログラムを
PHPで組んでいたんだが、さてどうしたものか・・・
2017/10/22(日) 12:04:54.94ID:UtqkZ3+I0
例えばプロバイダ等のメールサーバを使えばいいんじゃないか?
もしくはAWSのSEDとかも少量なら無料。
2017/10/22(日) 12:08:52.24ID:hechdin40
>>740
PHP(しかも管理人でも無い末端のユーザーに)からGmailのSMTPサーバー利用できるの?
2017/10/22(日) 13:05:50.25ID:4HKeVMJe0
ソケット使ってサーバーとお話し合いすれば出来そう
2017/10/22(日) 18:46:14.40ID:N3puxcTpa
byetでRSSの出力をしようとしていたのですが、どうもうまくいかないので
調べていたのですが
byetに置かれたファイルを他のサーバから読むと、
This site requires Javascript to work, please enable Javascript in your browser
or use a browser with Javascript support
みたいなページに変わることに気づきました
ブラウザ以外のユーザエージェントから読まれることを禁じているようですね
やはり無料のサーバは何かしらあるのですね
ブラウザからPHPも編集できて、これこそプレイグラウンドやんと思ったのですが・・
2017/10/22(日) 19:45:40.22ID:UtqkZ3+I0
>>741
出来ない理由がないでしょ?
sendmailにこだわるんだったら話は別だけど
2017/10/22(日) 20:10:10.98ID:hechdin40
>>744
今までmail()を使ってメールを送信していたんだけど
この関数使ってsendmail以外を選ぶことって可能?
2017/10/23(月) 15:31:30.11ID:fxiC9AE30
>>735
面白そうなものを紹介していただき、どうもありがとうございます。
早速導入して検証してみようと思います。
2017/10/23(月) 18:29:23.56ID:n7tiHTCJ0
環境で詰まったというわけでなくプログラミングを勉強してる時に気になったことがあるのでテンプレ無しですがよろしくお願いします

インターフェースがクラスの設計書っていうのは説明読んでて理解出来たんだけど、例えば問い合わせインターフェースから最終的に問い合わせA,B,C,Dのクラスを作る前提で各クラスにはインターフェースで定義したメソッド1,2,3があるとします
メソッド2,3はクラスによって処理は違うけどメソッド1は処理が同じという場合はどう設計するのが良いのでしょうか?

共通の処理がなければ各クラス共にインターフェースを継承して作ればいいと思ったのですが、共通の処理がある場合まず問い合わせのベースとなるクラスを作ってそれを継承して各クラスを作るのが正解?
2017/10/23(月) 18:54:12.29ID:EbwleLYx0
>>747
抽象クラス
2017/10/23(月) 19:03:19.99ID:n7tiHTCJ0
>>748
もう少し本読み進めてから質問すればよかった・・・
ありがとうございます!
2017/10/23(月) 19:53:41.90ID:1HzbJqCQ0
>>747
トレイト
2017/10/23(月) 21:05:52.52ID:tJp0k/Rla
phpDocumentorの書き方ですが
クラスや関数や変数宣言ではない部分に書くコメントの場合でも
/**
*/
という記法で書くのでしょうか?
2017/10/23(月) 21:39:37.94ID:tJp0k/Rla
それを元にドキュメントを作るのがphpDocumentorの目的ですが
インターフェイスと関わらない部分のコメントはドキュメントに載らないので、
この記法で書く必要はない気もしますが
コメントの記法を揃えないと、それはそれで気持ち悪いです
2017/10/23(月) 23:29:47.09ID:Tv/dpLrE0
>>745
mailだったら何もしなくてもメールサーバー設定すりゃいいだろ
PHPのマニュアルにそのままgmailの送信サンプルあるのに何が不満なんだ?
あまり無料鯖は使わないほうだが規制にひっかかったことないぞ
2017/10/24(火) 00:07:15.92ID:8OgpvEir0
素直にswiftmailerとか使うのが賢いと思うの
2017/10/24(火) 20:09:11.71ID:4zuQt35qa
PHPのバッチプログラムをcronで実行させた時に
期待した通りに動きませんでした
調べたらcron時はカレントディレクトリが
スクリプトのあるディレクトリではなく実行ユーザのホームディレクトリになるので
ファイルが思わぬ場所に作成されていたのでした
ファイルアクセスは基本的に絶対パスでやるべきなのですね
ですが、include_onceは相対パスで書いていたのに正常に動作していました
絶対パスで書く方が安心できるとは思いますが、
includeの場合は気にしなくていいのでしょうか?
2017/10/24(火) 20:22:12.50ID:+CxSIN/Vd
>>755
データ展開を考えると、相対パスの方が便利だ。絶対パスがコロコロ変化する一方で、他方で相対パスが変化しないなら、相対パスの方がデプロイコストが低くなる。
2017/10/24(火) 20:24:10.80ID:vrotHuwu0
オレも相対パス派
2017/10/24(火) 20:38:04.82ID:+CxSIN/Vd
絶対パスを要求する場所では絶対パスを使う。相対パスを使ってもパスのリンケージが壊れない場所では相対パスを使う。
2017/10/24(火) 20:59:24.65ID:yBPDUg+O0
>>754
> 素直にswiftmailerとか使うのが賢いと思うの

swifmailer調べてみた、インストール作業が必要なのね
レンタルサーバーだからインストール作業はちょっと・・・
代わりにPhpmailerってのが使えるみたい。これはファイル置くだけでいいっぽいから。

>>753
> PHPのマニュアルにそのままgmailの送信サンプルあるのに何が不満なんだ?

これのことかな?
Byetってレンサバだからsendmail.iniやphp.iniの改変は不可能なんだわ(´・ω・`)

http://php.net/manual/ja/function.mail.php

Changes required in sendmail.ini

smtp_server=smtp.gmail.com
smtp_port=587
error_logfile=error.log
debug_logfile=debug.log
auth_username=your-gmail-id@gmail.com
auth_password=your-gmail-password
force_sender=your-gmail-id@gmail.com

Changes required in php.ini

SMTP=smtp.gmail.com
smtp_port=587
sendmail_from = your-gmail-id@gmail.com
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
;sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"
2017/10/24(火) 21:09:39.54ID:Q75mHsE3a
>>759
composer使えよ
2017/10/24(火) 22:58:25.66ID:4zuQt35qa
絶対パスと言ってもベタ書きではなく__DIR__を使って
そのファイル基準の絶対パスを実行のたびに作るやり方なら
ファイルの場所が変わっても問題は起きにくいのでは?
でもたしかに絶対に絶対パスを使った方がいい、というわけでもありませんね
ありがとうございました
2017/10/25(水) 16:08:42.06ID:Cr59jy+d0
>>761
__DIR__ あたりで絶対パス取って
chdir()でカレントディレクトリはここだと決めて
それから後は全部相対パスを使うようにすればいい

そうすれば>>755で書いてるようなミスは絶対に起こらないし
テスト環境と本番環境の差異も簡単に吸収できる

あとライブラリの読み込みはなるべくオートローダーを使った方がいい
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況