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の改造 そんなに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)
これが出来てれば良いわけで >>573
マニュアル読んでみ。幸せになれる。スーパーグローバルから開放されるぞw >>554
elseまでいかんでも
$b = $a;
if (!$b) $b = 20; >>575
後々、それが出来てるかどうか、バグを生んだのがそこかどうか確認するのに
文字数少ない代わりにわかりにくい書き方とか最悪だろって話 $aの型が例えばintなどと保証されてるのか?
保証されてるなら!$aなんてint(0)の判別にしかならないのに直感的じゃない
保証されてないなら'abc'やarray(0)が来た時どうすんの 三項演算子の何がわかりにくいのか理解に苦しむな
ワンライナーで書けるってだけでif-elseと変わらんのに
(condition)
?
when-true
:
when-false
; プログラム書く上で1行で書けるかどうかってなんか価値があるの?
コードゴルファーphp? if( ~~~~ ) ~~~~; else ~~~~;
三項演算子の特権じゃないじゃん >>581
1行だ短いだなんだじゃなくて、何がわかりにくいのか理解不能 ワンライナーって見ただけで私アホですと脳内変換されるわ >>585
ワンライナー
-rオプション使いまくってる人?えっ違うのですか?
ぺちぱー
吠えてるだけ 価値はある
行数ベースで費用計算してるとき安くなる 三項演算子は短く書くためのものじゃないが。
その程度の理解なのなら自分で言ってるように使わないのが無難だな。
無駄にマウント取ってるのは笑えるがw
ifelseは組み込み制御構文で三項演算子のように式が要求されるところには置けない(評価されて値になれない) 同じことが実現できる場合の書き方の比較であって
誰もそんな当たり前の話しとらんのだが ないよ。正確にいうと関係ない。
一行で書くためにあるものじゃないからね。三項演算子は。 なんで話の流れと関係ないのに、三項演算子だけの特権でもないのに、ワンライナーで書けるってことをわざわざ書いたの? ん?俺がワンライナーとか言ったのがまずかったのか?
普通三項演算子はワンライナーで書くもんだからそう言っただけなのだが
別にそこはメインじゃないし主題ではない
?:という2つの演算子しか使っておらず、間違い探しをするようなものでもなく
何がわかりづらいのか理解できないって話をしただけ
ちなみに会話してんの俺じゃないぞ・・・ 少ない行がいいなら最期に¥rと¥nを置き換えて1行にすればいいやんm >普通三項演算子はワンライナーで書くもんだから
俺ルール広めようとしないでくれない? ■ このスレッドは過去ログ倉庫に格納されています