X



PHP質問・雑談スレ5【初心者お断り(ROM歓迎)】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
垢版 |
2018/10/04(木) 16:43:56.93ID:r0iGnrNs
PHPに関する質問や雑談をするスレです。
初心者お断り(ROM歓迎)と書いてますが、初心者用のスレが用意されているからで、
難しい質問や話題をしなければいけないわけではありません。
PHPマニュアルの読み方を概ね理解していて、関数リファレンスが正しく読める方用のスレです。

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

前スレ
https://medaka.5ch.net/test/read.cgi/php/1498653249/

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

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

このスレで扱わない話題
・直接関係ない○○特有の質問(専スレへ)
 (HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等)
・PHPの改造
0857nobodyさん
垢版 |
2019/04/16(火) 09:04:00.91ID:???
すでにJavaScriptがあるのにPHP採用するなんてないだろ
そもそもサーバサイドの対応と違って難しいぞ
サーバサイドは開発者が選べばいいだけだが
ブラウザは結局ベンダー次第になるし
ユーザ任せのプラグインじゃまず普及しないだろう
0858nobodyさん
垢版 |
2019/04/16(火) 09:08:10.65ID:???
>>857
じゃあJavascript上でPHPを動かせば良いよ
0859nobodyさん
垢版 |
2019/04/16(火) 09:21:03.96ID:???
>>854 実際こういう記事が出てくるとWP導入するとこも減ってくるだろう
0861nobodyさん
垢版 |
2019/04/16(火) 09:43:19.67ID:???
>>854
これ静的ファイルを出力してるだけだろ
wpのプラグインにそんな機能持ってるのがあるのでフーンくらいにしか思わん
0862nobodyさん
垢版 |
2019/04/16(火) 10:11:56.11ID:???
せめてsmartyっていって
0864nobodyさん
垢版 |
2019/04/16(火) 15:11:13.83ID:WhoMJ2W1
Wordpressは環境を共有するのむずい
何でデータベースにドメイン名含む完全なURLが入ったりすんの?
0866nobodyさん
垢版 |
2019/04/16(火) 16:04:10.12ID:???
>>864
そりゃサブドメインとかでも同じDBで動かせるようにだろ
データベース一つで複数のサイトを運用できるようになってるんだから
ドメイン入ってないとどこのサイトのデータなのか判別できなくなるだろう
0867nobodyさん
垢版 |
2019/04/16(火) 16:21:48.44ID:???
WordPress3.0からマルチサイト対応だからな
0868nobodyさん
垢版 |
2019/04/19(金) 11:53:18.34ID:???
empty関数って何の役に立つ?

「empty($value)」と「$valueの真偽値」は丁度結果の真偽が正反対になるから
empty使わず変数の真偽値確認すれば良いのでは
0869nobodyさん
垢版 |
2019/04/19(金) 11:57:37.19ID:???
>>868
読みやすい

それを言い出すとほとんどの関数いらなくなるので・・・
0870868
垢版 |
2019/04/19(金) 12:07:23.24ID:???
>>869
可読性のための関数ということですか
たしかに!をつけるより読みやすいのかもしれませんな
0871nobodyさん
垢版 |
2019/04/19(金) 12:31:15.94ID:???
でもこれemptyはどう判定すんだっけ?ともなる
0872nobodyさん
垢版 |
2019/04/19(金) 12:32:00.21ID:???
それは真偽値判定でも同じでは
0873nobodyさん
垢版 |
2019/04/19(金) 12:33:43.18ID:???
>>868
empty はnullか空白かゼロの時にtrueになる。それをor 条件で記述するのが面倒くさい

自分はデフォルト値を設定する時に使ってる
0874nobodyさん
垢版 |
2019/04/19(金) 12:34:54.03ID:???
覚える量が増える
0875nobodyさん
垢版 |
2019/04/19(金) 13:11:47.21ID:???
>>868
https://php.net/manual/ja/function.empty.php

返り値
var が存在し、かつその値が空や0でなければ FALSE を返します。 それ以外の場合は TRUE を返します。

次のような値は空であるとみなされます。

"" (空文字列)
0 (整数 の 0)
0.0 (浮動小数点数の 0)
"0" (文字列 の 0)
NULL
FALSE
array() (空の配列)



文字列の"0"や数値の0までFALSE扱いされるんだから
表出力するとき、0やNULLをまとめて空白にしたり、-を入れたりしたいときは使えるんじゃね?
0876nobodyさん
垢版 |
2019/04/19(金) 13:14:22.56ID:???
empty issetは先にシンボルテーブルチェックされる
プロパティなら__issetがトリガされるが__getは呼ばれない
0877nobodyさん
垢版 |
2019/04/19(金) 13:44:39.45ID:SjRzRdFv
>>868
Notice: Undefined variable: value エラーが出ないように使ってる
explodeした時にセットされてないかもしれない配列を判定する時なんかに使う
if(empty($arr[19]))continue;
とか
0878nobodyさん
垢版 |
2019/04/19(金) 20:08:37.69ID:???
>>873
>>868
それは結局empty使わなくても!$valueでも同じって話では。
!$valueでもnull、空白、0、"0"はtrueになる。

ただ>>877の言うとおり変数自体が未定義のときもemptyなら警告が出ないってのは
確かに使えるところかも。
0879nobodyさん
垢版 |
2019/04/19(金) 23:48:02.66ID:5ElWTncv
emptyは0も空白扱いとか
挙動がイミフ
0880nobodyさん
垢版 |
2019/04/20(土) 00:01:06.08ID:???
web フォームでは数字項目でも空白で入力できて
しまうからempty で空か判断できるのは便利だよ
0881nobodyさん
垢版 |
2019/04/20(土) 00:17:31.06ID:???
単なる真偽値チェックでも同じこと
0882nobodyさん
垢版 |
2019/04/20(土) 20:49:26.90ID:???
エラーメッセージ
ご指定のファイル public://media/2019/04/20/無題.jpg はコピー先ディレクトリーが正しく設定されていないため、コピーされませんでした。
ディレクトリーパーミッションが原因かもしれません。詳しくはシステムログを参照してください。

publicプロトコルってなんでしょうか?
0883nobodyさん
垢版 |
2019/04/20(土) 23:13:02.62ID:???
プロトコルじゃなくてpublic_htmlとか公開されてるルートディレクトリじゃねーの?
0884nobodyさん
垢版 |
2019/04/20(土) 23:19:00.37ID:???
オレオレエラーメッセージの詳細聞かれても
作者に聞けとしか
0885nobodyさん
垢版 |
2019/04/20(土) 23:35:43.27ID:???
publicプロトコルなんて無いぞ
オレオレプロトコルが存在する可能性はあるが、まぁ無いだろう。多分。多分な。絶対とは言ってないぞ
0886nobodyさん
垢版 |
2019/04/21(日) 08:38:35.91ID:???
>>883が正解だろうな
かっこつけてpublic://とかやっちゃういたいたしい作者なのだろう
0887nobodyさん
垢版 |
2019/04/22(月) 08:16:08.88ID:???
mb_check_encodingについてですが
普通はmb_check_encoding($var)のようにチェックしたい値を指定して使いますよね
しかし公式マニュアルを読んでみると

> var
> 調べるバイトストリーム。省略した場合は、 リクエスト開始時からのすべての入力が対象となります。

とあります
このvarを省略したときに、すべての入力が対象になるという部分が漠然としているのですが
すべての入力とは何ですか?
GET、POST、Cookieですかね、さらにはファイルアップロードも関係あるんでしょうか

この文字コードチェックは完全でないのは知っていますが、気休め程度にGETやPOSTで送られてきた
パラメーターを1つ1つチェックしていました
しかし引数省略してコールすれば一括して文字エンコーディングのバリデーションできるなんてこと
あるんですかね
0889nobodyさん
垢版 |
2019/04/22(月) 12:30:01.69ID:???
>>887
まあ、省略することは考えないほうがいいでしょう。
$_GETや$_POSTは配列を含む可能性があるので、
そのへん考えて、それらの入力値はarray_walk_recursiveのような関数を使うのがいいらしい。
http://gihyo.jp/dev/serial/01/php-security/0020
0890887
垢版 |
2019/04/22(月) 20:08:37.95ID:???
>>889
レスありがとうございます

やはり1つ1つチェックした方が良いのですかね
たしかに配列の場合もありますし、そのときのmb_check_encodingの挙動が
わかりませんしね
0891nobodyさん
垢版 |
2019/04/23(火) 01:02:03.75ID:???
すべてのとは$_FILES以外
配列は再帰で処理されるよ
すぐ上のリンクに書いてある
あとストリームだけじゃなくシーケンスも検証すべき
0892nobodyさん
垢版 |
2019/04/23(火) 06:10:42.00ID:???
不正な文字エンコーディングによる攻撃って、何を心配してんのだろう?
mb_check_encodingなんて使ったことないけどな…
想定した入力値かどうかをチェックすればいいだけちゃいますのん?
0893nobodyさん
垢版 |
2019/04/23(火) 18:08:22.38ID:???
エロティーヤーティーヤッ
0894nobodyさん
垢版 |
2019/04/24(水) 00:21:00.07ID:W8CxzoJs
何でmb版があるとかよく分かんない仕組みなんだ?
phpの文字列って
全部UTF-8で良いじゃん
0895nobodyさん
垢版 |
2019/04/24(水) 00:42:22.30ID:???
>>894
新規サイトはもちろんそう
古いサイトがこれまたね・・・
0896nobodyさん
垢版 |
2019/04/24(水) 10:15:01.81ID:???
>>894
うちはezwebにもimodeにも対応しているよ
0897nobodyさん
垢版 |
2019/04/24(水) 19:01:28.66ID:???
自慢にもならねえ
老害見る目で見られるんだぜ
0898nobodyさん
垢版 |
2019/04/24(水) 19:16:57.00ID:???
imodeって今でもあるの?
hdmlとかもうマヂ無理…
0899nobodyさん
垢版 |
2019/04/25(木) 02:58:55.52ID:???
最近はutf8mb4とかあるからな…
0900nobodyさん
垢版 |
2019/04/26(金) 02:13:22.85ID:???
どうせ統一されないから内部表現はバイナリで良いという発想のため
そもそもunicode勢でもstringがutf8の言語なくない?
0901nobodyさん
垢版 |
2019/04/26(金) 05:06:51.79ID:???
mb_check_encodingの引数省略callで
$_FILES以外の入力の文字コードチェックできて
しかも配列の入力も再帰的にチェックされるなら
引数省略でお手軽に入力チェックした方がいいと
思うのだが何か問題あるの?
0902nobodyさん
垢版 |
2019/04/26(金) 06:30:21.92ID:???
どうせバリデーションしてんだろ?
とりあえず全部やるって人もいるけど
本当に必要なのか考えたほうがいい
0903nobodyさん
垢版 |
2019/04/26(金) 11:41:16.88ID:???
$_POST['name'] = "\xad";

if(!mb_check_encoding())
die('invalid encoding');

とやっても何も反応しなかった

mb_check_encoding($_POST['name'])
にすれば反応があった

引数省略はインチキくさいな…
0904nobodyさん
垢版 |
2019/04/26(金) 14:58:40.97ID:???
変換こけたらカウントする仕様だからねえ
0905nobodyさん
垢版 |
2019/04/27(土) 13:52:32.41ID:o/Gfy+Vo
              _              _          /
       もっと |稼| ぎたい!! お金 |超| 大好き!! ./ ∧   ∨
               ̄               ̄      /   /\  \ \
      >'´', ∨>、 .┌、 ┌┐ __ __  __ l  / ⌒介トム`<∨
        〈  .∨ ./ ̄',| ヽ| ├ ┤ | ! |  /  ',l  l ,.ィ兮、   ,イ^兮∨
       ∨   / △∧    .|  |  |__| └  △ ',  l ^ー‐'",   `¬'''"∨
       ∨   / ,‐、 ∧_ヘ_」  |__|─‐  ,-、  ', ',     `' ,,     ∨
       ∧_/ ̄   ̄   └‐┘    '─'  ⊂⊃ ゝ  `', ̄/   /}
                    /7、ヘ¨ ⊂⊃ ⊂⌒7\>、 ‐'  x< /
           高収入求人情報 ム/ ヽゝ ⊂ニ⊃ ∠/ {   //`´ / j }/ /
                                 ゝ l/£`ーイ /   /
                                     ヽ ゝ'⌒>‐' /
                                         `l    \
0906nobodyさん
垢版 |
2019/04/28(日) 01:05:06.77ID:???
>>889
この記事見て思ったんだが
$_SERVERもバリデーションする必要あるもん?
改竄される可能性あるのかな
0907nobodyさん
垢版 |
2019/04/28(日) 12:30:42.80ID:???
例えばHTTP_USER_AGENTなんかは簡単に偽装できるからね
使わないならバリデーションの必要ないけど何かで使うなら普通にやる
0908nobodyさん
垢版 |
2019/04/28(日) 14:23:20.44ID:???
PHPerなんて、無意識にhtmlspecialcharsをencoding指定でちゃんと不正な文字か出力時にチェックしてるはず。
0909nobodyさん
垢版 |
2019/04/28(日) 14:35:34.42ID:???
個人叩きはしたくないけど、
こんな共感出来ない記事書いてたっけなと不思議だったが、人違いだった。
あれは大垣さんじゃなくて徳丸さんだったな。
どっちもPHP界じゃメジャーな人だった気がするが。
0910nobodyさん
垢版 |
2019/04/29(月) 06:16:31.94ID:???
refererも偽装できるんだっけ
0911nobodyさん
垢版 |
2019/04/29(月) 08:28:34.82ID:???
HTTP_USER_AGENTやHTTP_REFERERに、クライアントが制御文字を仕込むことって
可能なんですか?
0912nobodyさん
垢版 |
2019/04/29(月) 09:27:46.06ID:???
Chromeの拡張機能にユーザーエージェントを偽装できる奴あるじゃん
0913911
垢版 |
2019/04/29(月) 09:44:07.85ID:???
偽装はできましょうが、Fiddler使ってUser-Agentに改行文字やらタブ文字を仕込んで
送信してみると、Bad Requestエラーが返ってきますね
Apacheがはじいてるんでしょうか

$_SERVER['HTTP_USER_AGENT']に制御文字を伝えるのは難しいってことですかね
0914911
垢版 |
2019/04/29(月) 10:17:01.24ID:???
おっとTabはセーフでした
改行はBad Request行きですね
0915nobodyさん
垢版 |
2019/04/29(月) 13:57:23.89ID:???
ヘッダに制御文字をセットして送れるようなアドオンがあった気がするから
多分そのままやろうとしてもブラウザ側でなんかしてんじゃないかな
0916911
垢版 |
2019/04/29(月) 19:46:34.04ID:???
ブラウザで止めてる可能性もあるわけですか
0917nobodyさん
垢版 |
2019/04/30(火) 16:16:15.00ID:???
オレオレWebサーバとWebブラウザで
制御文字受け付けるソフトウェアを作ることはもちろん出来るが
そもそもRFC違反なので
まともなWebサーバやWebブラウザであれば
そのへん対応はしてる
0918nobodyさん
垢版 |
2019/05/01(水) 09:45:11.48ID:???
じゃ結局$_SERVER['HTTP_USER_AGENT']のバリデーションは
mb_check_encodingかましておけば良いということで
0919nobodyさん
垢版 |
2019/05/01(水) 14:49:28.76ID:???
ファイルの重複登録をさけたいのですが
ファイルのハッシュ値計算ってどうやるんですか?
md5(file_get_contents('a.jpg'))
こんなんでいいんでしょうか?
jpgならまだいいんですけど
これが例えば動画とかだったらメモリとか大丈夫ですかね?
0921nobodyさん
垢版 |
2019/05/01(水) 16:37:42.57ID:???
sha1_fileのほうが良くない?

でもハッシュを格納して保存しておくコストとかハッシュ計算して比較する時間より、
直接比較したほうが早かったから直接比較してるな…↓みたいな感じで
〜2MBくらいまでのjpeg or pngファイルの話だけど

(binary)file_get_contents($path1) !== (binary)file_get_contents($path2)
0922919
垢版 |
2019/05/01(水) 16:46:57.24ID:???
>>920-921
どうもありがとうございます。
専用関数があったのですね。早速試して早い方を採用してみます。
binaryへのキャストなんて機能あったんですね。知りませんでした。
新発見に感謝です。
0923nobodyさん
垢版 |
2019/05/02(木) 15:17:11.58ID:IrXSQyv/
教えてください。
header関数とini_set関数を記述する場合、どちらを先に記述すればいいですか?
よろしくお願いします。
0924nobodyさん
垢版 |
2019/05/02(木) 15:58:58.51ID:???
headerはスクリプト中で初めてechoする前(htmlに埋め込む場合はそれより前)に入ってればいい
try-catchブロックで最後の最後にheaderでエラーページに飛ばすとかいう処理は認証ロジックでよく書いたりするのでは?
0925923
垢版 |
2019/05/02(木) 16:08:51.31ID:IrXSQyv/
>>923です。

>>924さん
教えてくださり、ありがとうございます。
まだ未熟なため、そこまで頭が回りませんでした。
改めて、ありがとうございました。
0927nobodyさん
垢版 |
2019/05/03(金) 13:14:27.31ID:q6AE+Q6a
>>926
使ってる?
0929nobodyさん
垢版 |
2019/05/03(金) 14:22:53.19ID:???
LAMP環境でPHPを保守運用するときのアドバイスお願いします
0930nobodyさん
垢版 |
2019/05/03(金) 23:06:26.24ID:???
SQLインジェクションにきをつける
0931nobodyさん
垢版 |
2019/05/03(金) 23:07:41.56ID:???
それLAMPじゃなくてもじゃね
0932nobodyさん
垢版 |
2019/05/04(土) 00:40:16.77ID:???
mysql_secure_installationを実行しておく
0933nobodyさん
垢版 |
2019/05/04(土) 09:22:50.85ID:74tfT9f9
Apacheではなくnginxにする
0934nobodyさん
垢版 |
2019/05/04(土) 13:52:18.13ID:???
質問ざっくり過ぎて答えようがないわw
0935nobodyさん
垢版 |
2019/05/04(土) 19:50:01.68ID:HZeq1bgi
令和元年をイジメ撲滅元年にしましょう

>大阪府三島郡島本町のいじめはいじめられた本人が悪い
>みんなそう思ってる
>誰もいじめの被害者に同情しない
>はよ死ねイジメられるクズ
           ↑
島本町民以外の皆さん
イジメは卑劣な行為なので隠ぺいするのは学校や加害者側に後ろめたい気持ちがあるからですが
いじめがあったことを認めたうえで被害者に責任をなすりつけるなんて最低最悪ですね

イジメ撲滅は島本町から
島本町は自浄能力のない腐った町なので
外圧でイジメを撲滅しましょう

大阪府や大阪府教育委員会は
島本町みたいな糞町を放置しておくのか?
0936nobodyさん
垢版 |
2019/05/06(月) 12:36:34.85ID:???
訪問者がまだいるかってどうやって検知すればいいですか?
非同期通信で30秒おきぐらいにクライアントからサーバに通知する方法は思い浮かびますが
最近はこんなことしませんよね?
0939nobodyさん
垢版 |
2019/05/07(火) 14:58:52.45ID:H3VnEucY
MySQLではなくPostgreSQLにする
0941nobodyさん
垢版 |
2019/05/07(火) 17:50:01.58ID:???
>>936
どういう理由で訪問者を知りたいのかによるだろう
チャットのように訪問者同士でやりとりするようなシステムなら
Server-Sent Eventsを使えばいい。event-streamを送ってる間は訪問者がいる状態だ。それをカウントしろ

ただ自己満足で訪問者数を知りたいだけなら
Google Analyticsでも仕込んでおけ
0943nobodyさん
垢版 |
2019/05/08(水) 06:05:48.82ID:???
チャットみたいなリアルタイムなwebアプリはnode.jsがいいって聞くけどphpでも問題ないの?
0945nobodyさん
垢版 |
2019/05/08(水) 11:53:27.50ID:kDAnwyo4
zend_framework3使ってる人いますか?
1からの移行なんだけど、
本も出てないみたいだし日本語の記事もあまり見ないから2にするか迷ってます。
3ってリリースから1年以上経ってると思うけどコケてるのかな?
0946nobodyさん
垢版 |
2019/05/08(水) 12:03:07.05ID:???
そんな書籍も出てないバージョンに移行するくらいなら
フレームワークごとまるっと変えちゃえば?
今はLaravelほぼ一択でしょ
0947nobodyさん
垢版 |
2019/05/08(水) 12:08:32.78ID:???
fuelphpでいいと思うよ
0948nobodyさん
垢版 |
2019/05/08(水) 12:45:15.91ID:???
Laravelって遅くない?
0949nobodyさん
垢版 |
2019/05/08(水) 14:11:45.33ID:???
>>948
バリおそだよ
あと日本語サイトがクソ
0950nobodyさん
垢版 |
2019/05/08(水) 14:25:34.71ID:KtraEh0E
Symfony4は?
0951nobodyさん
垢版 |
2019/05/08(水) 16:29:23.82ID:???
今から使うならSymfony5の方がいいだろ。
0952nobodyさん
垢版 |
2019/05/08(水) 17:26:25.23ID:???
DB処理をPDOでゴリゴリ書けばいくらかましになる
0953945
垢版 |
2019/05/08(水) 18:12:34.81ID:???
zend製だし1がかなり使いやすかったからいいかなって思ったんだけど誰も使ってないのか。
今一番シェア率高いのってsymphonyなのかな?
0956nobodyさん
垢版 |
2019/05/08(水) 21:54:31.23ID:Vc4r9yn5
速度求めるならPHPを選ぶな
レス数が950を超えています。1000を超えると書き込みができなくなります。

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