X



PHP質問・雑談スレ4【初心者お断り(ROM歓迎)】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
垢版 |
2017/06/28(水) 21:34:09.26ID:???
PHPに関する質問や雑談をするスレです。
初心者お断り(ROM歓迎)と書いてますが、初心者用のスレが用意されているからで、
難しい質問や話題をしなければいけないわけではありません。
PHPマニュアルの読み方を概ね理解していて、関数リファレンスが正しく読める方用のスレです。

PHP未導入の方や、手取り足取りが必要な初心者の方はム板のくだスレへどうぞ。
http://mevius.2ch.net/tech/ (【PHP】で板内を検索)

前スレ
http://medaka.2ch.net/test/read.cgi/php/1486956982/

その他リンク
・PHPマニュアル
 https://secure.php.net/manual/ja/index.php
・コードテスト・貼り付け用
 http://ideone.com/
・プログラミングのお題スレ (求PHPer参戦)
 http://mevius.2ch.net/test/read.cgi/tech/1480579110/

このスレで扱う話題
・PHPのコード,設定や設定値に関する質問
・常識的範囲内でのコードレビュー依頼・改良相談
・PECL,PEARに関する質問
・PHP新機能やPHP関連トレンドの話題
 (FWや非公式ライブラリの話題や特徴比較は良いが使い方から先の話題は専スレへ)
・PHPのバグ発見報告・公式に報告する前の検証依頼

このスレで扱わない話題
・直接関係ない○○特有の質問(専スレへ)
 (HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等)
・PHPの改造
0476nobodyさん
垢版 |
2018/07/06(金) 14:57:23.38ID:P0O2iWzc
PHPは巨大化し過ぎた
山ほどあるビルトイン関数を削除して
プログラミング言語に最低限必要なライブラリだけをOOPで作り
使うかどうか分からない機能は動的ロードするようにすべきだ

そんな事したらもうPHPじゃない?
そんなの知るか
0477nobodyさん
垢版 |
2018/07/06(金) 15:48:38.10ID:g8pVEt14
そこまでするならフォークして別言語にしろ
QIQとかかっこいい名前付けてもいいぞ
0478nobodyさん
垢版 |
2018/07/06(金) 15:51:08.89ID:???
>>477のセンスを向上させるにはどうしたらいいですか
0479nobodyさん
垢版 |
2018/07/06(金) 17:09:27.76ID:???
ビルトイン関数なんて削っても
PHP本体のソースコードがすっきりするだけで
別に劇的に早くなるわけじゃないしユーザ側が受けるメリットなんて大してないだろ
0480nobodyさん
垢版 |
2018/07/06(金) 20:02:27.67ID:AtnEoX2L
すっきりしたら
ごちゃごちゃの状態よりバグが少なくなったり
本体が小さくなるとかのメリットはある

配列とか文字列がプリミティブ型みたいな扱いなのも
なんとかしる
array_系の関数が重ねて適用しようとしたら使いづらいったらありゃしない
0481nobodyさん
垢版 |
2018/07/06(金) 20:52:45.52ID:???
デフォルトでなんでもアリだからこそ受けてると思うんだけどな
今の時代で多少軽くなってもたかが知れている。ってかそもそもそんなに重くないだろう
そんなに重いならsmartyでも使えばphpの負荷は大きく下がる
0482nobodyさん
垢版 |
2018/07/06(金) 21:03:08.11ID:???
smartyでphpの負荷が下がるってどゆこと
0483nobodyさん
垢版 |
2018/07/06(金) 21:30:44.60ID:YHCASoUv
ビルトイン関数使ってたら
テストを書く時モックするのが難しい
time()とかrand()とか

名前空間使ったハック(\timeのように書いてると不可)やPHP拡張を使う方法もあるが
他の言語だとそんなの必要ないじゃん
キモい

テストを全く書いてない奴はお帰りください
0484nobodyさん
垢版 |
2018/07/06(金) 22:22:39.57ID:???
rubyのnokogiriみたくネイティブライブラリをラップするライブラリって使えれば需要あると思うけど
特にcomposerが普及した今なら更に
0485nobodyさん
垢版 |
2018/07/06(金) 23:05:33.81ID:wqmurizE
今どきsmartyって…w
0486nobodyさん
垢版 |
2018/07/07(土) 07:12:24.91ID:???
php4時代のコードでも少しの変更でphp7で動くようにできるというのがphpのメリットで
何するにしても後方互換の問題があるわけで
pythonのような英断をしなければphpが変わることはないし
成熟してしまって時期的にそのチャンスはもう逃した
お前らがforkして新php作ればいいよ
まあオリジナルの差分をコミットする作業が面倒で3日で匙投げるだろうが
0487nobodyさん
垢版 |
2018/07/07(土) 12:18:10.37ID:y8vJRkpl
既にHackで爆死経験済みだろ。
0488nobodyさん
垢版 |
2018/07/07(土) 14:07:12.63ID:???
pythonはpythonで2と3が両立していた時期があってあれはハチャメチャだった
0489nobodyさん
垢版 |
2018/07/07(土) 14:21:17.62ID:???
php++の前段階として既存の糞ビルトイン関数のラッパークラスをphpで作ればいいよ
0490nobodyさん
垢版 |
2018/07/07(土) 14:39:31.14ID:???
namespace php\lang;

class String extends Object
{
 public function __construct($_str)
 {
  if (is_string($_str)) $this->str = $_str;
 }
 public function htmlEscape()
 {
  $this->str = htmlspecialchars($this->str, ENT_QUOTES | ENT_HTML5, 'UTF-8');
  return $this;
 }
}
0491nobodyさん
垢版 |
2018/07/07(土) 15:39:21.40ID:2YJkuak7
あらゆるライブラリがそのラッパークラスとやらに対応してくれないと
何度も変換する必要があって使いづらい
0492nobodyさん
垢版 |
2018/07/07(土) 16:24:29.33ID:???
言語ごとラッパー作るなんてできるのか?
0493nobodyさん
垢版 |
2018/07/07(土) 19:39:28.88ID:???
イメージ的にはJavaScriptに対するjQuery
jQueryの書き方に慣れてきたころにjQueryの構文やオブジェクトを実装したJavaScript2登場みたいな
0494nobodyさん
垢版 |
2018/07/07(土) 20:28:57.57ID:2YJkuak7
PHPの言語仕様が嫌だが
PHPのライブラリや既存コードも使う必要があるってなら
他の言語で書いてPHPに変換出来るAltJSならぬAltPHPを使えば良いかも

ただ、PHPの場合それが出来て
ある程度人気があるのはHaxeだけだと思う
JSは本当に色々あるのに

https://stackoverflow.com/questions/6551089/is-there-anything-like-coffeescript-for-php
0495nobodyさん
垢版 |
2018/07/07(土) 20:35:32.20ID:2YJkuak7
HackはPHPと互換性があるがVMも違うやつ使う必要があるから
AltPHPでは無いよね
0496nobodyさん
垢版 |
2018/07/07(土) 20:43:49.76ID:???
糞だと思うなら使わなけりゃいいじゃん
0497nobodyさん
垢版 |
2018/07/07(土) 20:53:26.11ID:???
JSはPHP以上にカオスだと思うんだけどな
0498nobodyさん
垢版 |
2018/07/07(土) 20:55:25.59ID:???
JSはundifendeの辺りが怖すぎる
0499nobodyさん
垢版 |
2018/07/08(日) 14:20:25.97ID:???
そんなにjsがいいならjsの子になっちゃいなさい!
0500nobodyさん
垢版 |
2018/07/08(日) 15:23:04.10ID:4WOWpkJq
JSはブラウザで動くのがJSしか無いから
AltJSみたいのが生まれたけど
サーバーサイドは別に代わりがいくらでもあるしね
0501nobodyさん
垢版 |
2018/07/08(日) 15:34:54.96ID:???
ブラウザで動くのがjsしかないのが異常というか
jsだけとはいえブラウザで動かせること事態が本来異常というか
0502nobodyさん
垢版 |
2018/07/08(日) 15:47:47.44ID:???
jsで、任意のファイルを読み書きできるの?

出来てしまうとセキュリティ上やばい気がするのだが。。。
0503nobodyさん
垢版 |
2018/07/08(日) 16:18:42.43ID:4WOWpkJq
>>502
なんの話?
ブラウザのJSは勝手に他サイトやファイルシステムの内容を読めるAPIは無いし
脆弱性を利用してブラウザのセキュリティを突破しようにも
サンドボックスがあったりして難しい
0504nobodyさん
垢版 |
2018/07/08(日) 17:48:47.31ID:???
サーバサイドプログラムでjsを使う場合の話です。

任意のファイルの読み書きはできるのでしょうか?
0505nobodyさん
垢版 |
2018/07/08(日) 18:08:13.66ID:???
node.jsならできるよ。
require('fs');
0506nobodyさん
垢版 |
2018/07/08(日) 21:06:37.76ID:???
jsだからどうという話ではないな。nodeがそうだというだけで。
0509nobodyさん
垢版 |
2018/07/09(月) 14:38:37.47ID:???
>>502=>>504なら
なぜPHPならセキュリティ上問題ないと思った?ていう
まぁ多分本人が考えてることと他のやつが考えてることが違うのだろうけど
0510nobodyさん
垢版 |
2018/07/09(月) 14:59:42.48ID:???
まあお茶でも飲んで落ち着けよハゲ
0511nobodyさん
垢版 |
2018/07/09(月) 19:52:51.86ID:???
これが落ち着いていられるか!
0512nobodyさん
垢版 |
2018/07/14(土) 17:07:18.88ID:8nY3xhKd
このスレであってるかな…?
掲示板を作れるようになりたいんだが、正直マジでCSSとHTMLと少しのPHPの知識(スクレイピングなど)ぐらいしか知識がなくてどういう仕組みなのかわからない。
PHPで掲示板って作れる?
理想としてはガールズちゃんねるそのまんまなのが作れたら最高
0513nobodyさん
垢版 |
2018/07/14(土) 17:24:51.99ID:???
掲示板と言っても、DBを使う/使わないで難易度が大きく変わる

作らなくてもその辺にサンプルどころかそのまま使えるものが山程落ちてるよ
それを改造するところから初めてみては
0514nobodyさん
垢版 |
2018/07/14(土) 17:37:27.52ID:8nY3xhKd
>>513
DBを使わないPHPの簡易掲示板はコピペしたり改造したりしてなんとか作れた。
ただ、txtファイルに書き込みデータを保存する方法だと簡易的すぎるかなと。

理想はガルちゃんみたいにユーザーが自由にトピックを立てられる形にしたいから、DBを使ってやりたい…

どっかにわかりやすい雛形でもあればいいんだけど、何から手をつければいいかすらわからない…
0515nobodyさん
垢版 |
2018/07/14(土) 17:46:54.13ID:???
>>514
俺も昔やろうとしたんだけど、掲示板はセキュリティに気をつけないとあっという間に終わる
更にセキュリティ的に問題なくても、連投や巨大投稿、大量の改行コードだけの投稿などをどう取り扱うかで永久に終わらない

トピックというかスレでいいなら
「2ch風掲示板 cgi」
「2ch風掲示板 php」
この辺で検索してみてはどうかな
0516nobodyさん
垢版 |
2018/07/14(土) 17:48:37.61ID:???
要求仕様を実現するのに最低限必要なことと、そうでないことを切り分けられる頭がないと無理

ガルch形式のbbsも2ch形式のbbsもc, perl, php, その他わりとどんな言語でも作れる
それとtxt方式かDB利用かは直接関係ないし
どちらにしてもどのようにデータを読み書きするかという設計を自分で出来ないと話にならない

コピペと改造でなんとか、ってレベルで何が簡易的なのか判断しようとしてる時点でおかしいことに気付け
0517nobodyさん
垢版 |
2018/07/14(土) 17:50:06.34ID:???
まぁこういうアドバイスはガン無視して、結局自分で作ってから気づくんだよね
俺の時もそうだった
とりあえずDBは使わない形がいいよ、セキュリティと言う名の闇が待っている
0518nobodyさん
垢版 |
2018/07/14(土) 17:54:21.71ID:???
技術がなにで出来てるのか勘違いしてるパターン
0519nobodyさん
垢版 |
2018/07/14(土) 17:55:49.32ID:???
cgi拾ってきてcssとjs設定すれば終わりなのに、何でそんなに難しくしたがるんだろう
0520nobodyさん
垢版 |
2018/07/14(土) 18:23:17.42ID:???
テキストかデータベースかは、見た目や運用上の設計には関係ないから、とりあえずテキストでいいと思うよ。
書き込みや読み込みの処理の部分をあちこちでやらずに1箇所で行うように設計すれば、あとでデータベース式に変更するのも修正箇所が少なくて済む。

テキストファイルは拡張子をphpとかplとかにして、直接アクセスされたら実行エラーになるようにしておけばよいかと。
0521nobodyさん
垢版 |
2018/07/14(土) 18:24:08.65ID:???
BBS {
 int createThread(string $title);
 bool deleteThread(int $threadId);
 Gererator readThread($threadId);
 bool writeThread($threadId);
 bool saveHTML(string $template);
}
0522nobodyさん
垢版 |
2018/07/14(土) 18:37:57.75ID:8nY3xhKd
>>515
っぽいねー。
実はtxt自動生成して書き込み保存する簡単な掲示板を設置して見たことがあるんだが、放置してたら謎の大量文字化け(スクリプト?)の投稿で荒らされまくってダメだった…
0523nobodyさん
垢版 |
2018/07/14(土) 18:39:40.35ID:8nY3xhKd
>>516
ありがとう。
txtかDBってとこがポイントではないんだね。
txtファイルでも書き込み内容の分類やら保管やらをしっかり設計できれば運営していけるってことか…。
なんとなく通常のサービスはDBを利用してるからDBが正義だと思ってたわ。
0524nobodyさん
垢版 |
2018/07/14(土) 18:44:13.44ID:???
まぁ最初から完璧なものなんて作れるわけないしまずはウダウダ言ってないで動くものを作れと
0525nobodyさん
垢版 |
2018/07/14(土) 19:21:07.65ID:???
>>522
海外アクセス弾くだけでほぼ無くなる。「htaccess 海外 拒否」などで検索

もしくはNGワードの処理をかます。
これは書き込み後にテキトーに判定してdie()するだけでいい。めんどくさい事は後で考えて、生産的な事をまずやろう
0526nobodyさん
垢版 |
2018/07/14(土) 20:48:13.31ID:???
>>525
私は書き込み文字の中に全角文字がひとつも無かったら、「全角文字を含めてね」ってメッセージを出して弾くようにしたら、海外のスパム書き込みは100%排除できました。
0527nobodyさん
垢版 |
2018/07/14(土) 21:12:36.64ID:???
>526
頭いいな、いろんな意味で完璧な対策と思う
素直にすごい
0528nobodyさん
垢版 |
2018/07/14(土) 21:25:53.98ID:???
中国弾けなさそう
0529nobodyさん
垢版 |
2018/07/14(土) 21:46:15.25ID:???
>>528
確かに中国語だと弾けないですね笑
でも今まで中国語の書き込みは無いです。

てか、もし私が中国のスパム業者なら、日本や欧米の掲示板に中国語で書き込んだりせず、書くならやっぱり英語だと思います。
0530nobodyさん
垢版 |
2018/07/14(土) 23:27:28.81ID:???
ジェレレーターw
0531nobodyさん
垢版 |
2018/07/15(日) 14:57:05.88ID:OQU8pbJ/
考える人より手を動かした人の方が早く覚えるよ
まずは本買うなりサイト見るなりして作ってみればいい
0532nobodyさん
垢版 |
2018/07/15(日) 18:25:13.91ID:???
外部設計と内部設計の違いもわからないような奴が
いくら本を読んでも手を動かしても100%無理
既存のサービスやプログラムをとっかかりにして
仕様も機能もひとつひとつなぜ存在するのかなぜこうなってるのか学ぶしかない
0533nobodyさん
垢版 |
2018/07/15(日) 18:40:30.19ID:???
公開されてるの?
0534nobodyさん
垢版 |
2018/07/16(月) 01:05:08.50ID:???
公開されてるのもある
公開されてないものも設計を考える力を養うにはもってこいの材料
0535nobodyさん
垢版 |
2018/07/16(月) 21:26:48.20ID:???
!omikujiみたいな公開しないとわからん機能じゃなくて
使ってて目に見える部分であれば
たいていどういう風に作るかイメージが沸く
このスレの人はtwitterだろうがfacebookだろうが作ろうと思えば作れるんじゃないか?
気力がない 作っても流行らない うっかり流行ったら500との闘い 解消するためにサーバ月何十万
PHPerの限界とは経済力と時間の限界なのである
0536nobodyさん
垢版 |
2018/07/16(月) 21:30:35.61ID:Jh/2B4in
AWSもLinuxもそこそこ扱えるし作ろうと思えば作れるけど、
レッドオーシャンに飛び込むような元気はない
0538nobodyさん
垢版 |
2018/07/16(月) 22:36:10.37ID:???
機能それぞれ単体なら比較的容易
全部まとめて、さらにセキュリティ、速度、……となると設計だけでも
かなり複雑になってくるから時間がかかるようになる

ただ、10年前の自分じゃ機能単体もおぼつかなかったと思う
0539nobodyさん
垢版 |
2018/07/17(火) 20:43:36.89ID:???
>>536
今の知識もったまま20年前にタイムスリップしたいよな
0541nobodyさん
垢版 |
2018/07/20(金) 17:25:59.13ID:???
JSのように
$a = 10;
$b = $a || 20;
echo $b; //20
にならんかなあ
これ糞便利なんだけど
論理演算子はorだけでもいいよねえ
0542nobodyさん
垢版 |
2018/07/20(金) 17:26:34.38ID:???
$a = 10;
$b = $a || 20;
echo $b; //20
ごめんこれ10だわw
$a = 0って書いたつもり
0543nobodyさん
垢版 |
2018/07/20(金) 17:50:29.12ID:???
null合体演算子(??)を使え
短絡評価した結果何を返すのかなんて後から変えられるわけねぇだろ
0544nobodyさん
垢版 |
2018/07/20(金) 19:43:58.83ID:???
型ってもんがあるからtrue/falseで返してくれないと怖い
0546nobodyさん
垢版 |
2018/07/20(金) 23:26:40.30ID:???
>>545
いっそそこまで覚悟出来るならやればいいとは思う
混乱はあったけど結果としてPythonの決断は正しかったのだろう

とは言え短絡評価を結果をbooleanにするのも最終評価値にするのも良し悪しだからなぁ
0547nobodyさん
垢版 |
2018/07/20(金) 23:57:25.93ID:???
何が入るかわからないのがな
最悪を想定するなら短絡評価の前に中身の判別を入れなきゃならない
想定した型かどうか事前に判別するなら短絡評価要らない
0548nobodyさん
垢版 |
2018/07/21(土) 17:38:08.88ID:gWhxLgcg
$b = (!empty($a)) ? $a : 20;
NULL合体演算子はissetだからだめだな
0549nobodyさん
垢版 |
2018/07/21(土) 19:13:06.04ID:???
JavaScriptも三項演算子使えるんだからそれでよくね
短絡評価は言語ごとに差があるからあんまり使いたくない
0550nobodyさん
垢版 |
2018/07/21(土) 19:16:09.41ID:???
愚直でもわかりやすい判断分岐で書かれてると読む人間にはありがたい
0551nobodyさん
垢版 |
2018/07/21(土) 19:18:20.55ID:???
なんでも短絡や三項にすれば短いだろってより
素朴にIF文使って書いてある方が
読みやすい場合が多々あるな
0552nobodyさん
垢版 |
2018/07/21(土) 19:25:35.94ID:???
ネストしてないに限れば三項演算子は読みやすいな
条件部分を>>548のようにちゃんと()で囲ってればif文の変化形にも見えるし
コーディング規約で禁止してるとこは結構あるし賛否両論なのは確かだが
0553nobodyさん
垢版 |
2018/07/21(土) 19:33:59.72ID:???
phpで三項演算子のネスト書く奴は頭からカレーかけられても文句言えない
ネスト階層が深けりゃコーンスープ付き
0554nobodyさん
垢版 |
2018/07/22(日) 05:26:38.13ID:???
ifだとクロージャー使って即時実行したくならない?
if (!!$a) {
 $b = $a;
} else {
 $b = 20;
}

$b = (function() use ($a) {
 if (!!$a) {
  return $a;
 } else {
  return 20;
 }
})();

上だとなんか感覚的にいやだ
0555nobodyさん
垢版 |
2018/07/22(日) 05:45:59.43ID:???
何に代入しているのかを特に明示したいならそれでいんじゃね

単純な代入ならインデントで即わかるとは思うが

読みやすさわかりやすさを理由に(if等で)わかりやすい分岐を・・・って話の流れで
if使いながら$aそのまま(のbool変換値)ifに流すだけなところと
ifに渡すだけの箇所で!!$aってやってるところが意味不明だが
0556nobodyさん
垢版 |
2018/07/22(日) 06:26:18.55ID:???
> !!$a

これ、 $a == true と等価だよな?

数文字タイプする手間を惜しんで2回反転させる計算コストを発生させてる?
0557554
垢版 |
2018/07/22(日) 06:58:19.63ID:???
booleanキャストのつもりで使ったが
確かにいらんな
0558nobodyさん
垢版 |
2018/07/22(日) 07:54:39.39ID:???
素直メンはイケメン
0559nobodyさん
垢版 |
2018/07/22(日) 08:21:29.99ID:???
!!って書けることを知らなかったw
!!!もできる?
0560nobodyさん
垢版 |
2018/07/22(日) 08:32:08.34ID:???
やってどうすんのよ
0561nobodyさん
垢版 |
2018/07/22(日) 09:22:46.00ID:???
エントロピーを増大させるのだ
0562nobodyさん
垢版 |
2018/07/22(日) 10:22:27.72ID:???
>>560
その発想がなかったから、そんな事できるんだって目から鱗なだけ。
0563nobodyさん
垢版 |
2018/07/22(日) 10:39:15.79ID:???
!!!$varは!$varと等価だろ
0564nobodyさん
垢版 |
2018/07/22(日) 11:57:10.28ID:???
いやだからさ、そんな事もできるんだ!
すごい面白い!
じゃあ何個まで重ねられるんだろう?って話だよ。
どこかでエラーにされて怒られるとは思うけどさ。
0565nobodyさん
垢版 |
2018/07/22(日) 13:15:13.80ID:???
eval()あんだから自分で試してみりゃいいじゃん
0566nobodyさん
垢版 |
2018/07/22(日) 13:35:16.79ID:???
>>554
下はJavaScriptが好きそうだな
「名前空間が汚れる」とか言って
でも上のシンプルな方が読みやすい

>>556
>$a == true
これもこの素朴な方が分かりやすい
「!!$a」とか多用すると読みにくい

トリッキーな書き方より
それを抑えて読みやすくする方が大事
0568nobodyさん
垢版 |
2018/07/22(日) 17:01:30.11ID:???
>>550
>>551
同意
書く方は短い方が書きやすいんどろうけど
0569nobodyさん
垢版 |
2018/07/22(日) 19:17:55.24ID:???
短く書くことが目的化してるコードはバグ出やすい上にデバッグし難いんだよなあ
0570nobodyさん
垢版 |
2018/07/22(日) 19:19:38.87ID:???
でもさすがにisset($_POST/$_GET)は三項演算子使うでしょ?
0572nobodyさん
垢版 |
2018/07/22(日) 19:35:16.04ID:???
まとめて初期化、まとめて確認って手もあるしなあ
スタンダードというわけじゃなし
0573nobodyさん
垢版 |
2018/07/22(日) 19:40:11.51ID:???
filter_inputってバリデーションでしょ?
issetしたあとに使うものだよね?
0574nobodyさん
垢版 |
2018/07/22(日) 19:56:43.65ID:???
転載アフィか何かなの?
0575nobodyさん
垢版 |
2018/07/22(日) 20:01:42.81ID:???
その辺の処理は各々好きにしろとしか
・NOTICEが出ない
・その後の処理でバグを生まないようにする(デフォルト値設定、検証除去etc)
これが出来てれば良いわけで
■ このスレッドは過去ログ倉庫に格納されています

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