PHP質問・雑談スレ4【初心者お断り(ROM歓迎)】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
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の改造 PHPは巨大化し過ぎた
山ほどあるビルトイン関数を削除して
プログラミング言語に最低限必要なライブラリだけをOOPで作り
使うかどうか分からない機能は動的ロードするようにすべきだ
そんな事したらもうPHPじゃない?
そんなの知るか そこまでするならフォークして別言語にしろ
QIQとかかっこいい名前付けてもいいぞ >>477のセンスを向上させるにはどうしたらいいですか ビルトイン関数なんて削っても
PHP本体のソースコードがすっきりするだけで
別に劇的に早くなるわけじゃないしユーザ側が受けるメリットなんて大してないだろ すっきりしたら
ごちゃごちゃの状態よりバグが少なくなったり
本体が小さくなるとかのメリットはある
配列とか文字列がプリミティブ型みたいな扱いなのも
なんとかしる
array_系の関数が重ねて適用しようとしたら使いづらいったらありゃしない デフォルトでなんでもアリだからこそ受けてると思うんだけどな
今の時代で多少軽くなってもたかが知れている。ってかそもそもそんなに重くないだろう
そんなに重いならsmartyでも使えばphpの負荷は大きく下がる ビルトイン関数使ってたら
テストを書く時モックするのが難しい
time()とかrand()とか
名前空間使ったハック(\timeのように書いてると不可)やPHP拡張を使う方法もあるが
他の言語だとそんなの必要ないじゃん
キモい
テストを全く書いてない奴はお帰りください rubyのnokogiriみたくネイティブライブラリをラップするライブラリって使えれば需要あると思うけど
特にcomposerが普及した今なら更に php4時代のコードでも少しの変更でphp7で動くようにできるというのがphpのメリットで
何するにしても後方互換の問題があるわけで
pythonのような英断をしなければphpが変わることはないし
成熟してしまって時期的にそのチャンスはもう逃した
お前らがforkして新php作ればいいよ
まあオリジナルの差分をコミットする作業が面倒で3日で匙投げるだろうが pythonはpythonで2と3が両立していた時期があってあれはハチャメチャだった php++の前段階として既存の糞ビルトイン関数のラッパークラスをphpで作ればいいよ 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;
}
} あらゆるライブラリがそのラッパークラスとやらに対応してくれないと
何度も変換する必要があって使いづらい イメージ的にはJavaScriptに対するjQuery
jQueryの書き方に慣れてきたころにjQueryの構文やオブジェクトを実装したJavaScript2登場みたいな PHPの言語仕様が嫌だが
PHPのライブラリや既存コードも使う必要があるってなら
他の言語で書いてPHPに変換出来るAltJSならぬAltPHPを使えば良いかも
ただ、PHPの場合それが出来て
ある程度人気があるのはHaxeだけだと思う
JSは本当に色々あるのに
https://stackoverflow.com/questions/6551089/is-there-anything-like-coffeescript-for-php HackはPHPと互換性があるがVMも違うやつ使う必要があるから
AltPHPでは無いよね そんなにjsがいいならjsの子になっちゃいなさい! JSはブラウザで動くのがJSしか無いから
AltJSみたいのが生まれたけど
サーバーサイドは別に代わりがいくらでもあるしね ブラウザで動くのがjsしかないのが異常というか
jsだけとはいえブラウザで動かせること事態が本来異常というか jsで、任意のファイルを読み書きできるの?
出来てしまうとセキュリティ上やばい気がするのだが。。。 >>502
なんの話?
ブラウザのJSは勝手に他サイトやファイルシステムの内容を読めるAPIは無いし
脆弱性を利用してブラウザのセキュリティを突破しようにも
サンドボックスがあったりして難しい サーバサイドプログラムでjsを使う場合の話です。
任意のファイルの読み書きはできるのでしょうか? node.jsならできるよ。
require('fs'); jsだからどうという話ではないな。nodeがそうだというだけで。 >>502=>>504なら
なぜPHPならセキュリティ上問題ないと思った?ていう
まぁ多分本人が考えてることと他のやつが考えてることが違うのだろうけど このスレであってるかな…?
掲示板を作れるようになりたいんだが、正直マジでCSSとHTMLと少しのPHPの知識(スクレイピングなど)ぐらいしか知識がなくてどういう仕組みなのかわからない。
PHPで掲示板って作れる?
理想としてはガールズちゃんねるそのまんまなのが作れたら最高 掲示板と言っても、DBを使う/使わないで難易度が大きく変わる
作らなくてもその辺にサンプルどころかそのまま使えるものが山程落ちてるよ
それを改造するところから初めてみては >>513
DBを使わないPHPの簡易掲示板はコピペしたり改造したりしてなんとか作れた。
ただ、txtファイルに書き込みデータを保存する方法だと簡易的すぎるかなと。
理想はガルちゃんみたいにユーザーが自由にトピックを立てられる形にしたいから、DBを使ってやりたい…
どっかにわかりやすい雛形でもあればいいんだけど、何から手をつければいいかすらわからない… >>514
俺も昔やろうとしたんだけど、掲示板はセキュリティに気をつけないとあっという間に終わる
更にセキュリティ的に問題なくても、連投や巨大投稿、大量の改行コードだけの投稿などをどう取り扱うかで永久に終わらない
トピックというかスレでいいなら
「2ch風掲示板 cgi」
「2ch風掲示板 php」
この辺で検索してみてはどうかな 要求仕様を実現するのに最低限必要なことと、そうでないことを切り分けられる頭がないと無理
ガルch形式のbbsも2ch形式のbbsもc, perl, php, その他わりとどんな言語でも作れる
それとtxt方式かDB利用かは直接関係ないし
どちらにしてもどのようにデータを読み書きするかという設計を自分で出来ないと話にならない
コピペと改造でなんとか、ってレベルで何が簡易的なのか判断しようとしてる時点でおかしいことに気付け まぁこういうアドバイスはガン無視して、結局自分で作ってから気づくんだよね
俺の時もそうだった
とりあえずDBは使わない形がいいよ、セキュリティと言う名の闇が待っている cgi拾ってきてcssとjs設定すれば終わりなのに、何でそんなに難しくしたがるんだろう テキストかデータベースかは、見た目や運用上の設計には関係ないから、とりあえずテキストでいいと思うよ。
書き込みや読み込みの処理の部分をあちこちでやらずに1箇所で行うように設計すれば、あとでデータベース式に変更するのも修正箇所が少なくて済む。
テキストファイルは拡張子をphpとかplとかにして、直接アクセスされたら実行エラーになるようにしておけばよいかと。 BBS {
int createThread(string $title);
bool deleteThread(int $threadId);
Gererator readThread($threadId);
bool writeThread($threadId);
bool saveHTML(string $template);
} >>515
っぽいねー。
実はtxt自動生成して書き込み保存する簡単な掲示板を設置して見たことがあるんだが、放置してたら謎の大量文字化け(スクリプト?)の投稿で荒らされまくってダメだった… >>516
ありがとう。
txtかDBってとこがポイントではないんだね。
txtファイルでも書き込み内容の分類やら保管やらをしっかり設計できれば運営していけるってことか…。
なんとなく通常のサービスはDBを利用してるからDBが正義だと思ってたわ。 まぁ最初から完璧なものなんて作れるわけないしまずはウダウダ言ってないで動くものを作れと >>522
海外アクセス弾くだけでほぼ無くなる。「htaccess 海外 拒否」などで検索
もしくはNGワードの処理をかます。
これは書き込み後にテキトーに判定してdie()するだけでいい。めんどくさい事は後で考えて、生産的な事をまずやろう >>525
私は書き込み文字の中に全角文字がひとつも無かったら、「全角文字を含めてね」ってメッセージを出して弾くようにしたら、海外のスパム書き込みは100%排除できました。 >526
頭いいな、いろんな意味で完璧な対策と思う
素直にすごい >>528
確かに中国語だと弾けないですね笑
でも今まで中国語の書き込みは無いです。
てか、もし私が中国のスパム業者なら、日本や欧米の掲示板に中国語で書き込んだりせず、書くならやっぱり英語だと思います。 考える人より手を動かした人の方が早く覚えるよ
まずは本買うなりサイト見るなりして作ってみればいい 外部設計と内部設計の違いもわからないような奴が
いくら本を読んでも手を動かしても100%無理
既存のサービスやプログラムをとっかかりにして
仕様も機能もひとつひとつなぜ存在するのかなぜこうなってるのか学ぶしかない 公開されてるのもある
公開されてないものも設計を考える力を養うにはもってこいの材料 !omikujiみたいな公開しないとわからん機能じゃなくて
使ってて目に見える部分であれば
たいていどういう風に作るかイメージが沸く
このスレの人はtwitterだろうがfacebookだろうが作ろうと思えば作れるんじゃないか?
気力がない 作っても流行らない うっかり流行ったら500との闘い 解消するためにサーバ月何十万
PHPerの限界とは経済力と時間の限界なのである AWSもLinuxもそこそこ扱えるし作ろうと思えば作れるけど、
レッドオーシャンに飛び込むような元気はない 機能それぞれ単体なら比較的容易
全部まとめて、さらにセキュリティ、速度、……となると設計だけでも
かなり複雑になってくるから時間がかかるようになる
ただ、10年前の自分じゃ機能単体もおぼつかなかったと思う >>536
今の知識もったまま20年前にタイムスリップしたいよな 【放射能の影響か?】 道路の真ん中で直立不動で失神しているトンビ、多発している認知症事故と関連!?
http://rosie.5ch.net/test/read.cgi/liveplus/1531880720/l50
動物まで意識障害? JSのように
$a = 10;
$b = $a || 20;
echo $b; //20
にならんかなあ
これ糞便利なんだけど
論理演算子はorだけでもいいよねえ $a = 10;
$b = $a || 20;
echo $b; //20
ごめんこれ10だわw
$a = 0って書いたつもり null合体演算子(??)を使え
短絡評価した結果何を返すのかなんて後から変えられるわけねぇだろ 型ってもんがあるからtrue/falseで返してくれないと怖い >>545
いっそそこまで覚悟出来るならやればいいとは思う
混乱はあったけど結果としてPythonの決断は正しかったのだろう
とは言え短絡評価を結果をbooleanにするのも最終評価値にするのも良し悪しだからなぁ 何が入るかわからないのがな
最悪を想定するなら短絡評価の前に中身の判別を入れなきゃならない
想定した型かどうか事前に判別するなら短絡評価要らない $b = (!empty($a)) ? $a : 20;
NULL合体演算子はissetだからだめだな JavaScriptも三項演算子使えるんだからそれでよくね
短絡評価は言語ごとに差があるからあんまり使いたくない 愚直でもわかりやすい判断分岐で書かれてると読む人間にはありがたい なんでも短絡や三項にすれば短いだろってより
素朴にIF文使って書いてある方が
読みやすい場合が多々あるな ネストしてないに限れば三項演算子は読みやすいな
条件部分を>>548のようにちゃんと()で囲ってればif文の変化形にも見えるし
コーディング規約で禁止してるとこは結構あるし賛否両論なのは確かだが phpで三項演算子のネスト書く奴は頭からカレーかけられても文句言えない
ネスト階層が深けりゃコーンスープ付き ifだとクロージャー使って即時実行したくならない?
if (!!$a) {
$b = $a;
} else {
$b = 20;
}
$b = (function() use ($a) {
if (!!$a) {
return $a;
} else {
return 20;
}
})();
上だとなんか感覚的にいやだ 何に代入しているのかを特に明示したいならそれでいんじゃね
単純な代入ならインデントで即わかるとは思うが
読みやすさわかりやすさを理由に(if等で)わかりやすい分岐を・・・って話の流れで
if使いながら$aそのまま(のbool変換値)ifに流すだけなところと
ifに渡すだけの箇所で!!$aってやってるところが意味不明だが > !!$a
これ、 $a == true と等価だよな?
数文字タイプする手間を惜しんで2回反転させる計算コストを発生させてる? booleanキャストのつもりで使ったが
確かにいらんな !!って書けることを知らなかったw
!!!もできる? >>560
その発想がなかったから、そんな事できるんだって目から鱗なだけ。 いやだからさ、そんな事もできるんだ!
すごい面白い!
じゃあ何個まで重ねられるんだろう?って話だよ。
どこかでエラーにされて怒られるとは思うけどさ。 eval()あんだから自分で試してみりゃいいじゃん >>554
下はJavaScriptが好きそうだな
「名前空間が汚れる」とか言って
でも上のシンプルな方が読みやすい
>>556
>$a == true
これもこの素朴な方が分かりやすい
「!!$a」とか多用すると読みにくい
トリッキーな書き方より
それを抑えて読みやすくする方が大事 >>550
>>551
同意
書く方は短い方が書きやすいんどろうけど 短く書くことが目的化してるコードはバグ出やすい上にデバッグし難いんだよなあ でもさすがにisset($_POST/$_GET)は三項演算子使うでしょ? >>570
filter_input 使うから、使わない まとめて初期化、まとめて確認って手もあるしなあ
スタンダードというわけじゃなし filter_inputってバリデーションでしょ?
issetしたあとに使うものだよね? その辺の処理は各々好きにしろとしか
・NOTICEが出ない
・その後の処理でバグを生まないようにする(デフォルト値設定、検証除去etc)
これが出来てれば良いわけで ■ このスレッドは過去ログ倉庫に格納されています