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の改造 composerはなぜかパッケージのダウンロードが一個ずつって特徴もある
並列化する非公式プラグインはあるが
何で公式は並列ダウンロードしないのか
https://github.com/hirak/prestissimo 並列ダウンロードが当たり前の他のパッケージマネージャに慣れていると
遅く感じる
プラグイン作者によるプルリクエストがcomposerにあったが
マージされるのはいつか分からない そもそもcomposerってなんで出てきたの?
必要なのこれ
composerじゃなきゃダメなことなんかあるの フレームワーク使いたい奴には必須かもしれないけど
それ以外は別に使わなくても問題ない っていうイメージ
つか何故公式が云々って公式の気持ちなんか知るか国語のテストかよ composerの中の人は忙しいので
並列ダウンロードは皆があったら便利だと思う機能とは知っているが
優先度を低くしている
そんな感じでプルリク作成から2年経った composerは車輪の再発明が嫌いな
再利用大好人間たちがコードを持ち寄って使いあったり
そこから新しいのを作るためのなれ合いツール pear/peclが要らなくなるわけじゃないんだよな composerにあるライブラリって全部PHPでしょ?
pearを進化させたようなもんだよねたぶん ComposerのロゴはGo以来のイラッと感を覚えるわけよ PHPの拡張ってプロジェクト毎にはインストール出来ない?
拡張を実行時に動的に読むdlって関数が昔あったらしいが
削除されてるし
dlは使い物にならなかったのか
他言語ではC拡張のあるライブラリも
他のライブラリと同じ様に
そのプロジェクトだけのインストールができるのが普通 >>459
現状出来ない
実行時に拡張をロードする機能自体が存在しないのでどうにもならない
やりようがあるとすれば実行時ロード機能を提供するPHP拡張を作成することくらい
PECLに登録して最終的に本体にバンドルされるところまで至らないとエコシステムには取り込まれないだろうなぁ
rasmusとかandiとかzeevとかの基幹メンバーがとんでもなく保守的だし正直何やっても絶望的だと思う
この辺は割とマジで根本的に設計上の欠陥だと思うわ .phpから拡張を読み込むことができるようになると
セキュリティホールが量産されそうな気がするが
その辺、大丈夫なのか? 何となくそういう懸念が浮かぶのは分かる
ただ他言語, 具体的にはPythonとかRuby, Nodeなんかでは頻繁に使われてる
system系の関数使って実行ファイルを叩くのとどう違ってくるのかと考えると別に実行時に拡張ロード出来ても良かろう(dlが削除されたのは安定性が理由だと書いてあるし) PHPの用途で動的に読み込めると何が嬉しいのか、
まともな理由がないから削られちゃったんだろ プロジェクト毎にPHPインストールすりゃいいんじゃね >system系の関数使って実行ファイルを叩くのとどう違ってくるのかと考えると
systemやexecは、php.iniで包括的に設定するしか手がない disable_functions 設定で禁止できる
かなり違うんじゃないかね
http://php.net/manual/ja/info.configuration.php#ini.enable-dl
>このディレクティブは、Apacheモジュール版のPHPを使用した場合にのみ 有用です。
>PHPの動的ロード拡張機能をdl()で 仮想サーバー毎またはディレクトリ毎にオンまたはオフに変更することが できます。
>
>動的ロード機能をオフにするのは主としてセキュリティ上の理由によります。
>動的ロード機能により、 open_basedir の拘束を全て 無視することが可能になります。 そもそもdlって最近は削除されて使えないんじゃなかったの? exec使える状態って
アホなアップローダとか置いてた日にはopen_basedirの拘束なんて無視して好き放題されちゃうよね >>466
いや, php.iniだけで動的モジュールロードの可否を与える(php.iniのみで設定可能な)ディレクティブがあれば一緒だろ
自分でdlの例出してるじゃん
mod_phpで実行する場合は権限がWebサーバになるからそれが嫌だというのはよく分かるが dlは安定性に問題があるから削除したって言うけど
他の言語で出来ていることが何で出来ない?
PHPはリクエストの度にメモリの内容破棄するから? extensionの動的ロードしたいってどんなとき 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だけでもいいよねえ ■ このスレッドは過去ログ倉庫に格納されています