PHP質問・雑談スレ5【初心者お断り(ROM歓迎)】
レス数が1000を超えています。これ以上書き込みはできません。
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の改造 ログイン済みの人にだけ表示させたいっていう場合、
ログインフラグみたいな特定のセッション変数があるかないかをみるっていう感じでいいんですよね?
テンプレートの先頭をこんな感じにして、die/exitで止めてしまえばいいんでしょうか?
<?php
session_start();
if ($_SESSION['user'] === NULL) {
header('HTTP/1.1 401 Unauthorized');
die('<html><body><h1>401 Unauthorized</h1></body></html>');
}
?>
<!DOCTYPE html>
<html>
<body>
<h2>Hello <?= $_SESSION['user'] ?>.</h2>
</body>
</html> こまけーこたぁ色々あるけど、骨子としてはおっけー! random_bytes(32)
なんで32なのん?(´・ω・`) 別スレで(予想通り)無反応だったのでこちらでお願いします
□は全角スペース
<p>あいうえお</p>
<p>□□うえ□</p>
<p>あい□□お</p>
例えば「え」が縦3つがそろうようにしたいです。
HTMLに直に書くとブラウザで固定幅フォントとしてそろいます
ところがphpで
echo "<p>あいうえお</p>\n";
echo "<p>□□うえ□</p>\n";
echo "<p>あい□□お</p>\n";
とするとバラバラ(段々)になってしまいます
どうしたらいいでしょうか? どう変わるのかわからん
もしかしてcssあたってないとかそんなことなのか ブラウザの開発者ツールでも見て
同じフォントが表示に使用されているか、その他差がないか、確認すればいい 昔改行するしないでデザインが変わったことがあったが
\nを\r\nにしたらうまくいったりして
仮にうまくいっても色々問題ありそうだけど >>12
なんで?それならなんで直書きだとそろうの? 9です
みなさんすみません、くだらない勘違いで>>10の通りcssで
font-family: "Hiragino Kaku Gothic ProN", Meiryo, sans-serif;
が当たってるか否かでした
当たれば直に書いてもphpからでも同じ位置に同じソースなのだから
当然同じ結果になりました
どうもお騒がせしました >>15
9のコードよく見ろよ
「え」が縦3つ揃うはずがないだろw え?
えはしっかり3つ並ぶじゃん
えっと、もしかしてお前には見えてないの? >>18
ウザいだけの行為をユーモアだと勘違いしてるバカ 質問したいことがあるのですが
って書こうとしたけどその前にphp.netを探したら問題解決しました php.netの内容は本当にすごいから一回読破して欲しい
phpで何が出来るかよく分かる php内で出力をgzencodeして吐き出すのと
Apacheのmod_deflate.cにお任せするのとどちらが負荷が少ないですか? >>26
現実的に差がセロなので、わざわざ試す暇人がいない
自分で試した方が早い
その書き込みする労力でできるんじゃないか? 試したアホがここにいる…phpでやったほうが30%ほど早くなった… phpでidentityで書き出してアパッチが回収して圧縮とか二度手間 filter_input関数の 「 FILTER_FLAG_STRIP_LOW 」 を使うと0〜31までの制御文字が除去?されますが、
nl2br関数で改行を反映させたい場合、preg_replace関数の正規表現で対応するしかないですか !?
良い方法を教えてください(´・ω・`) 最近のChromeやFirefoxって、完全にアプリを落とすまでCookie削除が効かないですよね?
自分がヘボいのかもですが、
ちゃんとCookieを削除してログオフされる方法はありますか?
PHPとJavaScriptで二重に削除してるけど管理ツールで見ると残っています。
ログアウト後に、そのままサイト内URLを叩くとアクサスできるのがカッコ悪いです。 きちんと削除できてないか、pluginとかが悪さしてるのではなく? いえ、アドオンとかは特に入れてなくてすっぴんです。
削除はPHPではdestroyや過去のCookie食わせて削除、
JavaScriptはjQueryでremoveしてます。
サブドメインまできっちり指定しろということなのでしょうか?
アホなのでわかりません。
http://yukihane.hatenablog.com/entry/201511/chrome-cookie-bug ちなみに、つい最近までFirefoxはちゃんと消えるブラウザでした。
アップデートしたらChromeと同じ挙動に変わっていました。 $_SESSION = array();
setcookie(session_name(), '', time() - 42000);
session_destroy();
この3行を順番に書けば消えるということで良いでしょうか?
session_unset() ;
も書いてあったと思います。
常駐するブラウザを落とさないと消えないですよw へ?
とりあえず極力シンプルな10行ぐらいのコードで試してみます。
ありがとうございました。 ここのスレの猛者に説明などは不要かと思うので割愛します。
リファクタリング時の凡ミスでした。
CookieもHTTPのやりとりをキャプチャして解決しました。
アホなのにブラウザのせいにして本当に申し訳ございませんでした。 CSRFがわからない(´・ω・`)
type="hidden"でトークンを隠してもウェブマスターツールで見られそうだし、さっぱり爽やかだ。 対策系なんていたちごっこなんだからCSRFの手法自体を勉強してきなさい
じゃないと確実な対策を書くことはできない セキュリティはほんと地獄
そうそうにあきらめてフレームワークに丸投げしてるわ >ウェブマスターツールで見られそうだし
理解できてない証拠 ある適度の規模になったらフレーワークだよね。
ネイティブな実装レベルを知らない人でも、
爺さんよりいいサイト作れる。 無知が使うなら規模関係ない
小規模だろうと大規模だろうと
必要なセキュリティ対策が何かすらわからないのだから ちょっとおかしいな
何らかのフレームワークを使っているからといって
CSRFを含めてセキュリティ対策が万全と保証されるわけではない
あくまでフレームワークを使って作った人の責任
フレームワークを使って作ったものにセキュリティホールがないかどうか確認できるスキルが必要になる
そんなスキルがあるなら自前でセキュリティ対策を書ける
するとフレームワークを使う理由は特化による労力削減しかなくなる そういう事をしなくて済むのが最近のフレームワークじゃん。
もちろん知識は必要だけど下のレイヤーは知らなくていい感じ。 どんな無知カスが使ってもセキュリティリスクゼロなんてフレームワークあるのですか グーグルやフェイスブックでさえお漏らしするからムリ オレオレ実フレームワークこそ正義と思ってたけどあっというまにセキュリティホールだらけになって辛かった 無知じゃ無理ってことだ
機能面もセキュリティ面も同じだが問題が出ないことはツールは保証してくれない
結局自分で仕組み上問題がないことを確認して
結局自分で実際上問題が出ないことをテストしなきゃいけない フレームワークでも何でもいいがツールが責任を持ってくれないのだから
自分(というか自社)が有事の責任を回避したいなら
最大限自衛できるスキルを持たないといけない
知らなくても済む、とはならない
高セキュリティを謳うフレームワーク使ってました、だけで裁判で過失ゼロ認定される自信があるなら良いけど 俺実装のまずさはPHPの関数が非推奨になったりするせいもある 逃げられないってやつだなあ
どうあっても回避できないもんは回避できない でもPHPもかなり良くなってきたし、NodeとかのJavaScriptよりはマシだよなあ。
あっちもPromiseとかで美しくなってきてはいるが… CSRFのワンタイムトークンって本当に有用なの?
今は同一生成元ポリシーがあるから余計なことしてなければ問題はないが
サーバでOriginの設定に問題があったりブラウザで余計なことしてる状態として
JavaScriptでGETで1回トークン含んだソースとってきて
2回めで実際のPOST先にトークン含めて送ると受理してしまわない? >>63
CSRF対策にワンタイム性は必要無いだろ >>70
ワンタイム性は必要ないというと
固定トークンとか有効とか言っちゃうのか? トークンなんてフレームワーク丸投げで何も意識せずに勝手に裏でやってくれりゃいいよ。 セキュリティのこと勉強しないやつは会話に入ってこなくていいのよ 質問
アンチウィルスソフトが重いからって止めてしまっている人のこと考えたら
ウィルス対策が100%万全でないメールクライアントなんてゴミクズだよね?
回答
止めんなよバカ 以下のページにアクセスした時、
バックグラウンドで処理を走らせようと思います
http://example.com/foo.php
foo.phpに通常のユーザーもアクセスできてしまうのですが、
404などを返したほうが良いのでしょうか?
また、その際はhtaccessを使用すれば良いでしょうか
それともphpのheaderから404を返すのでしょうか?
以下は実際の流れになります
小売業のHPで、wordpressを使っています
ルーチンとしてチラシが発生したときにページを作成し、pdfファイルと画像ファイルを添付して投稿
定期的に、一年以上前に投稿された記事とファイルを削除する必要があるので、その部分を自動化したいと思っているのです cron使え
どうしてもcron使えない状況でwp使ってるならwpに載せて管理者ログイン時以外利用不能にしろ
最悪でも単独の認証でもつけとけ 自分で管理しきれるならサードパーティのpluginを利用する手もあるが自分で管理しきれる場合だけ >>80
cronも併用していますが、シェルスクリプトを書ききれませんでした
(現在はshの中身はfoo.phpにアクセスするという物になっています)
>wpに載せて管理者ログイン時以外利用不能
>単独の認証
どちらかで実装します
ありがとうございました >>81
サードパーティーのプラグインはいつの間にかエラーだらけになりそうなので、出来る限り回避しています いやcron使えるなら使えよ
perl-cgiなんかと同様に*.phpの頭に
#!/path/to/php
って書いてchown/chmodしとくだけで済むから
sh書く必要ないし公開ディレクトリに置かずに済むだろう >>84
そんな方法があったんですか、ありがとうございます
なんとか頑張ってみます どこに書いたら良いのかわからずでここに。。。場違いだったらゴメンなさい。
Aサーバ = php.ini編集NG .htaccess内にphp_value記述OK
Bサーバ = php.ini編集OK .htaccess内にphp_value記述NG
の場合、A、Bサーバで共用できる.htaccessの書き方ってありますか?
要は、%{HTTP_HOST}などでサーバを判定して、Aサーバの場合のみ、php_valueの記述行がイキになるような書き方が出来ないものかと。 >>86
そういうことはできないと思う。
CGI(FastCGI)として動作している時の問題だと思うが、
そういうサーバではphp.iniか.htaccessに書かなくては意味のない設定を書く環境があるのでは?
それがないチープなサーバなら諦めるしかないかと。 ってか、どんなサーバーなんだよw
統一するかVPSにしとけ。 >>79
通常のユーザがアクセスできないように
ログイン認証設ければいいだけの話では レンタルなのはわかってるだろw
無駄に苦労するより統一しろよーって話だよ。 Basic認証レベルならwgetでいいし、
フォーム認証でもライブラリ使ってセッション食わればいいんじゃない? cronというかいわゆるwebcronをやろうとしてるんだろう?
>>94のとおりだよ >>97
>(現在はshの中身はfoo.phpにアクセスするという物になっています) >cronも併用していますが、シェルスクリプトを書ききれませんでした
書けないっていってんじゃん
curlかwgetいれてるだけだろうが
そんなのシェルスクリプトでもなんでもない >>97「(技術的には)sh書けないって言ってるじゃん」
>>98「(サーバーの仕様では)sh書けてるだろボケ」 みんな年末のカンファレンスに参加するの?
Web業界独特の気持ち悪いイベントに トークンで思い出した
bin2hex(random_bytes(32));ってのを見かけたんだけど これが今の主流なんかね >>101
しない
>Web業界独特の気持ち悪いイベント
これは同意だけど、まぁ最先端の金持ちオタクの集まりだから仕方ない webcronって
定期バッチ動かしたいけどサーバ仕様上cronが使えないから外部からHTTPで叩きましょう
ってなもんでしょ
他になんか意義あんの 0円 = \0 === null (ASCIIのnull 文字列)
思いついただけ WordPressのサイトで、
function.phpの中で複数のphpファイルをインクルードするのと、
---------
include_once 'file1.php' ;
include_once 'file2.php' ;
include_once 'file3.php' ;
function.phpの中に全部のコードをベタで書くのとでは、WEBサイトの表示速度に差が出ますか? C言語の
#if 条件
#else
#endif
みたいなのはPHPにはありませんか? >>113
無い
そういうのはプリプロセッサと言ってコンパイル前の処理なんだけど、
phpはコンパイル自体が無いので存在しない 自分で対象の*.phpを前処理するプログラムをphpでもcでもなんでもいいから書いて
前処理した後にphpに引数とともに引き渡せば、あるいは いや、あれ?>>116取り消し
解決とか考えなくて良いんだからcのプリプロセッサとか考えるまでもなく
普通にifで条件括って、分岐でincludeすればいいんでないかな
到達し得ないincludeは、たとえパースエラーになる代物が指定されてても無視されるわけで >>117
それで同じ事を実現できるけど、
それじゃめんどくさい事をしたいんだと思う
実は#difineもしたいとかそういうことじゃないかな。知らんけど >>115
例えばf()の改良版を作りたいので取り敢えず
古い方のf()は無効化しておきたい場合です。
#if(0)
function f(){ ・・・ }
#endif
function f(){ ・・・ } //改良版
f(); //実行 >>119
普通のifでいいじゃん
えっ と思うかもしれないが、できてしまう
if( ENABLE_EVOLVE ){
function f(){ echo 1; }
}else{
function f(){ echo 2; }
}
f(); この辺はなんかこうjsに近いんだ
とでも思って納得しておくしかないけど、まあできる if等の中に放り込むと、function定義前に呼び出したりはできなくなる
たとえば>>120の1行目にf();を突っ込むとfatalが出る
そこんとこにさえ気をつければ大丈夫なはず
逆に言えばそういう柔軟処理をやってくれてるということ (…質問者よ…聞こえますか…関数を分けるのではなく引数で分けるのです…聞いていますか…) (……(∩゚Д゚)アーアーキコエナ-イ……キコエナーイ……) >>124
良く分かりません。
解説お願いします。 俺はC知らんしよくわからんが
コメントアウトしとけばいいって話じゃないんか >>126
>>120の書き方だと関数をまとめられ無くなって収集つかなくなるよ
小ネタとして覚えておく程度ならいいけど、実用的な場面はない
そもそも関数の定義は別ファイルにまとめてincludeする方が分かりやすい
あんまり変な書き方すると自分がめんどくさいだけ
という事を数年前に俺も教わった こんな感じが後々楽と思う
function f(flg){
if(flg){
return 1;
} else {
return 2;
}
};
echo f(flg); 引数で分岐させちゃったらその関数使ってる箇所全部修正しなきゃじゃん
後々ってなんだ 引数の数や型で動作を分けるとかもあるけど結局呼び出し側の修正必須
どっちかっていうとコードそのものを残さなくていいならcvsに任せるほうが
>>127
/* */形式のコメントは入れ子にできないから
内部で/* */使ってると面倒 どうやってもキモい(設計が悪い)けど例えば
<?php
function f1() { echo 1; }
function f2() { echo 2; }
const ENABLE_EVOLVE = true;
if (ENABLE_EVOLVE) {
$f = f1;
} else {
$f = f2;
}
$f(); なんでこれどうやってもキモイんだろう?
と思ったらクラスにしてないから変なのか classにしても同じだろう
ifかませての別定義やincludeがやりづらいからなおさらキモい >>132
よこからだけど
$$f();
これってなんて言うんだっけ?ドルマーク2つ付ける奴 ${$f}
{$f}()
まあ原理は一緒
>>137
意図と状況による
が既存関数の改良で、呼び出し側の変更が必要になるのはナンセンス過ぎる >>134
上のコードはキモいけど変数に関数突っ込んで呼ぶこと自体は別にキモくない
いやPHPではあんまりやらんけども >>141
jsとかで変数に関数を放り込むのは
そもそも変数に関数を放り込める仕様、名前空間の欠如や使いづらさ、グローバル領域汚染の防止、というような理由がある
それらを解消するメリットが「どこで内容かわるかわからん変数を経由する」というデメリットを超過するから使う意味がある
phpで変数に関数そのものを放り込めるかといえばNO
$f = f1; $f(); なんてwarningとともに f1 が 'f1' に変換されて、文字列変数経由で呼び出されてる
なので>>132みたいにやるのは合理性に欠ける
というふうに俺は考える もとからobjectの一要素となってたみたいな前提条件があれば話は別だけどな jsはグローバルなDOMがあるからこその無名即時関数
でなければせいぜいアクセス解析だ
実際使いづらい部分もあるが、DOMの有無が一番大きい
PHPとは前提が違いすぎる 勘違いしてて改良だとimproveのところevolve(進化)って書いちゃったんだけど突込みが入らなかったことにやや驚愕 >>145
>>129だけどなんか違うけど、そんな文化があるのかなー?無知なまま突っ込んでマウント取られると嫌だから
ワイ文化(flgに変更)にそっと変えてごまかしたれっと思って突っ込めなかったチキンで御座います
とりあえず見たことない単語だから検索した人は結構いると思う mail関数の$messageの説明に「各行の長さは 70 文字を超えては いけません。」って昔から記載してあったっけ(´・ω・`) >>147
眉太よ
http://web.archive.org/web/20080506012510/http://www.php.net:80/manual/ja/function.mail.php
少なくとも10年前に記載があるのだ >>148
親切に教えてくださりありがとうございます(・ω・)
勉強不足でした。 ステータスコード404がうまく返りません
http_response_code( 404 );
でステータスコード404が返らず、
header("HTTP/1.0 404 Not Found");
だと404が返る場合、どういう可能性が考えられますか?
phpのバージョンは5.4で、
function_exists()で調べた所、以下2つの関数は存在していました
http_response_code()、header()
関数の前には何も出力されていない状態です
原因がわからず、結構ハマってしまいました
お助け下さい headerじゃダメでhttp_response_codeならOKってどういう場合なの その関数は使ったことないけどリファレンス見るかぎり
404出すには2回呼び出す必要があるようだが2回やってる?
https://secure.php.net/manual/ja/function.http-response-code.php
> var_dump(http_response_code(404));
> var_dump(http_response_code());
最初404設定するときに返ってくるのは設定した404ではなく
設定前の(おそらく)200であるようだけど ああ、すまない
>>153は忘れてくれ
ユーザノートみてたらhttp_response_code(404)だけで返るみたいだから
実際にやってみたらちゃんと404返ってきたわ include_once('file.php');
は読み込めるのに、
include_once('./file.php');
だと
failed to open stream: No such file or directory
と出るのだけれどなぜよ? >>159
サンキュウ。
読めたよ。
も一つ教えてくれよ。
Windowsで
include "C:\path1\path2\file.php"
みたいに絶対パス指定して読み込む事は
出来ないの? >>161
できる
realpath()を使えば絶対パスの取得が出来るので、それを利用すればok
https://webkaru.net/php/function-realpath/
ちなみに絶対パスはサーバーによって変わるので、
どういったものになるかは不定だ
あと>>159だけど、
dirname(__FILE__)単独よりも、reaalpathと併用するのが最も良かった事を思い出した
https://ja.stackoverflow.com/questions/37252
まぁrealpathなしでバグるなんて相当変な場合じゃないとないけどね >>164
ありがとう。
ところでPHPファイルって
<?PHP で始まって
・・・
?> で閉じる場合と、閉じない場合が
あるようなのだが、閉じなくてもいいの? >>1
> PHP未導入の方や、手取り足取りが必要な初心者の方はム板のくだスレへどうぞ。
> https://mevius.5ch.net/tech/ (【PHP】で板内を検索)
>>165 続けるなら↑で質問すると良いよ
ライブラリなんかの純粋なPHPのみのコードなら閉じタグはいらないしむしろ省略を推奨されている
HTML(view)にPHPのコードを埋め込むような書き方をする時はHTMLとの境界を示すために必要
http://php.net/manual/ja/language.basic-syntax.phpmode.php
初心者は閉じておくと間違いはない phpって拡張子がださいから変えようと思うのだけど
おまえら何にしてる?
aspxとかdoとかかっこよくね? >>168
その感覚は俺も学生の時にあったわ、懐かしい
やるべきことは、拡張子を表示しなくていいように設計する事だ
例)
https://news.yahoo.co.jp/pickup/6304566
まぁまともなFWなら大抵こうなる Laravelのソースコード読んでルーティングの仕組み調べようとしたけど
最近のソースの読み方がわからないぜ・・・ それ時間の無駄じゃね
全部index.phpに飛ばして後はURLを規則通り振り分けるだけだ >>171
それってPHPだけで出来るの?
サーバがPHPで書かれてるというなら理解出来るんだけど
なんか最小限のコードないかしら >>172
//.htaccess
RewriteEngine On
RewriteRule . index.php
//inddex.php
<?php
echo 'URL:'.$_SERVER["REQUEST_URI"];
要はこの.$_SERVER["REQUEST_URI"]を元にルーティングしていくんだけど、
パターンが死ぬほど多くてくっそめんどくさい
homeですら
example.com
example.com/
example.com/index.php
とある
深入りはやめたほうが良いよ >>173
ありがとう
やっぱりPHP単体でやってるというわけではないんだね
想定内でちょっと安心 https://github.com/PHPMailer/PHPMailer
のページについて質問です
Installation & loadingの箇所で、
requireの前にuseがありますが、なぜでしょうか?
感覚的にはrequireしてからuseするので、requireを先に書きたくなります
これは単純に好みでしょうか
以下の部分です
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'path/to/PHPMailer/src/Exception.php';
require 'path/to/PHPMailer/src/PHPMailer.php';
require 'path/to/PHPMailer/src/SMTP.php'; 自分も感覚的にはそうする
でもそもそもrequireをべた書きするのはだいぶ前のスタイルなのでは なぜcomposerのautoloaderを使わないのか >>176
ありがとうございます
compoer知りませんでした、勉強してみます LambdaでPHPが動くので、とりあえずWordPressをいれてみた
https://wp-kyoto.net/try-to-run-wordpress-in-aws-lambda/
AWS LambdaでもついにPHP対応ktkr 従量課金制のって使ったことないけど
費用どんなもんなの?
CPU実行時間とかよくわからん・・・
同じコンテンツでも言語によって差が出るってことなのかな?
その場合PHPを選択するというのは理にかなっているのだろうか >>180
CPU・ストレージが超強力なので、大量の画像データのリサイズや機械学習が主な運用方法
機械学習で使うと費用を超抑えられる
場合によってはエンコードや圧縮・解凍に使うのも良いかも知れない
間違ってもチャット掲示板なんて作っちゃだめだゾ >>182
アクセスする度にカネがかかる。従量課金にする意味がない
通常のサーバーで良い >>183
アクセスする度に金かかるのはチャットだけじゃなくない?
転送量もあるからでかいファイル送るのと小さな文字データを回数多く送るのは変わらん気するけど 記事に出てるPHPレイヤーじゃmysql使えないからWordpressは無理だな
簡単にスケール出来るのもLambdaのメリットだが
大量に同時実行するとmysqlの接続数が増え過ぎて
DBの動作に支障が出る
なのでスケーリングが必要な場合
接続が比較的軽いDynamoDBが使われたりするが
色々とクセがあるようだ Lambdaは無料枠あるけど
実際サービスを作ろうとしたら
Amazon S3とかAPI GatewayとかCDNとかも必要
アプリの内容によってはDBも
あとデータ転送も課金される >>184
別にチャットでもHPでもAWSでやりたいなら好きにしていいぞ
金を払って初めて分かる事もあると思う ラムダはリレーショナルDBは無理ってAmazonセミナーで言ってた >>187
一般的なサイトならレンサバでいいと思うのはそうなんだが 単に安いのが欲しいってだけならVPSにすれば?
AWSにもVPSっぽいのがある
安い代わりにサーバーを停止しても課金されるのと
AWSの他サービスとの連携はしづらい
最近のアップデートでMySQLも使えるように
[アップデート] Lightsail で月額 $15 からマネージド・データベースが使えるようになりました!
https://dev.classmethod.jp/cloud/aws/new-managed-databases-for-amazon-lightsail/ >>189
でかいデータを任せる理由は、
>CPU・ストレージが超強力
という点
廉価版のスパコンと思えば良いかも知れない
もちろん自前で環境用意できるならわざわざサービスに頼る理由はないぞ なるほど
どちらかというと低速でも普段自分のPCでやってることを肩代わりさせるようなものなのね
縁はなさそうだな 自分もよくわからないが、話の流れ見ててふと疑問に思ったのは、
なぜ>>179のリンク先の人は、そんなものにWPなんていれようとしたのだろう。
もちろん公開ブログツールとしてではなく、
自分用のタスク管理みたいのにも使えるとは思うけどさあ。 YouTubeの動画形式変換してダウンロードさせるようなサイトの
バックエンドに使ってるんだろう
ああいうサービスはめっちゃ金かかりそうだな >>195
サイト名ェ・・・「wordpress-kyoto」
どっちかというとwordpress使いがAWSに手を出したって事じゃないかな 質問させてください
「XXXXX7TgeVPTUvhSST1rkJfXHdTEdQ0+UKDXXXXXS1o40pXtyJTy3APdvWylT2m」
↑
このような文字列を、先頭の文字「XXXXX」で
このように分けたい
↓
「XXXXX7TgeVPTUvhSST1rkJfXHdTEdQ0+UKD」
「XXXXXS1o40pXtyJTy3APdvWylT2m」
よろしくお願いします。 納品後に勝手に他所で使われないように、客のサーバ上でしか動かないようにしたいんだけど
何か良い方法あるかな
IPアドレスか何かをチェックする処理を、ソース見てもわからないように入れれればいいと思うんだけど ソース渡す時点で対策しても無意味だな ソース読める人がみたらすぐバレる
ソース読まない前提ならipチェックでもいれればいいかと >>201
if(ip==xxx){
}
if(ip_address_dummy!==xxx){
}
address_ip==xxx ? foo() : bar();
if(sitename==yyy){
}
if(sitename_false!==yyy){
}
とず〜〜〜っと書いて
「これなら1から書いたほうが早い!」
と思わせることができればコピーされないという手法を思いついた
なお自分が死ぬ模様 exeファイルならクラッキングの難易度をいくらでも上げることができるけど
ソースファイル渡しちゃったらどうぞ改造してくださいと言っているようなもの >>203
ipとかで抽出かけちゃえばどの行で対策してるかすぐバレちゃうよ 一見動くようにして、たま〜〜〜に動かなくなるとかでいいんじゃない
/* ここ見てるって事はコピーされたんですねwwwちーっすww */
とか煽っとけばok 相手がどのレベルかによるだろう
ソース丸見えのインタプリタの場合リバースエンジニアリングもくそもないしな
何したって無駄であるしライセンス条項に明記して
違反した時の脅しをかけるしかない そういやサーバーのipってメンテとかで変わる事あるの?
xサーバーとかsakuraとか サーバがどういう運用してるかによるだろ
元々動的IPでDDNSで運用してるならともかく
固定IPプランで固定IP前提で運用してるのに(DNS更新は手動)
それが勝手に変わっちまったらサーバを利用してる事業者は
外部からアクセス不能(IP直打ちで物理的には可能だが)になり
事実上のサービス停止を余儀なくされ信頼が低下する
そんなサーバを提供した事業者は例え免責事項に責任取らないと書いてたとしても
過失が大きすぎて可能な限り最大の損害賠償を請求できるレベル アクセス可能なら覗かれるに決まってんだろ
アクセス不可能なら覗かれないに決まってんだろ 別に覗かれても困るようなもんじゃないけどな
レン鯖業社とかphpinfo普通に公開してるし 今PHPの試験受けるより来年2月からの方がいいよね 初心者以前のくっだらねえ質問続いてるようですが
スレチじゃないっすか〜 FWでORMとか使わないでPDO使うのってアリ?
Laravelに興味があるんだけど遅いことで悪名高いEloquentは使いたくない
PDOはクエリ直接書かんといけないからそれはそれで別の問題が出るけど
Laravelみたいな低速FWを少しでも高速化しようとなると仕方ないよね >>219
pdo自体が完成されたクラスだから
あえてORMなんか使うよりクエリーの中身が見えるからパッと見わかりやすいし
あとデバッグもしやすい >>220
SymfonyでDoctrineバンドルを使ってれば
ログにクエリーを記録したり、
プロファイラー(ブラウザで動くデバッグ用のツール)でクエリーを表示出来るので
そこまで不便は感じない
それどころかプロファイラーでは
explainを見たり、フォーマットされたクエリーやパラメータを埋め込んだ状態のクエリーも表示可能
DBALはORMより抽象度が低い
異なるプラットフォームのDBの抽象化とスキーマ管理のみに特化している RedBeanPHPは使ったことないが
アノテーションやXMLを使ったスキーマ定義が不要とか(開発中に自動的に作られるから)
DoctrineみたいにQuery Builderがなくて
普通のSQLっぽく書けるのが特徴のようだ
5分で分かる公式のクイックツアー
https://redbeanphp.com/index.php?p=/quick_tour PDOが抽象化するのはDBへの接続だけでSQLの抽象化はほぼ行わない
その部分が必要になったら結局自分で書くかライブラリ使うかになる
というか計測もせずに速度のことを考えたってどうにもならん
とりあえずEloquentなりDoctrineなり使って組んでみて後でボトルネックになるようなら必要な部分を最適化する 最近はSQLベタがきする人を馬鹿にするような風潮があって嫌だ Doctrine DBALやORMでもQuery Builder使わずに
直接DQL/SQLを書くのは出来る ハードコーディングしないに越したことはないが
SQL書けない人がコーディング出来る怖さも感じる
高級プログラマーはアセンブラやれってレベルの老害話に聞こえるかもしれん いや、SQLくらい自分で書けよw
html並に簡単すぎるんだが 並べてるのがHTMLな辺り分かって書いてるんだろうなぁと思う HTML並って動くだけってならそれでもいいけど
高負荷な実用に耐えるようなSQLかけるようになるには
結構なスキルと知識が必要 いやそんなにスキルいらんわ
件数数えるのクッソ重い!!!!
↓
件数記録するテーブルつくって終了
JOINクッソ重い!!!!
↓
JOINしないでJOIN元テーブルに列追加してそっちに必要なデータ入れて終了
とにかくデータ多すぎて重い!!!!
↓
パーティションつくって終了 x スキルいらない
o スキルない>>232はこれしかできない >>232のような素人は下手にSQL書くよりORMやクエリビルダに任せたほうがいいだろうな
ハイパフォーマンスが必要な場合は高度なスキルを有するDBエンジニアにまかせればいいわけだし
スタートアップやITドカタには必要 >>234
んなわけねーだろバーカ笑笑
>>235
だからクエリービルダ使ったらどう速くなるんだよ?
答えろ >>236
君がいるとプロダクトが汚れる
はよ廃業しろ世の中のためだ >>237
いいから答えろ
クエリービルダ使ったらどう速くなるんだよ!!!!!? え、今ってSQLをViewに登録とかしないの?
最近NoSQLばっか使っててSQLDB知らんけど Viewなんかつかわないよ
移植性が悪くなるし保守が大変 最強はSpefificationパターンだろ
QueryBuilderでは検索条件の再利用が難しい
Happyr Doctrine Specification
https://github.com/Happyr/Doctrine-Specification
This library gives you a new way for writing queries. Using the Specification pattern you will get small Specification classes that are highly reusable. 生のSQL使うかどうかってのが問題の本質であってだな >>216
結論としてはQueryBuilderを使うと速くなるってことだ Cでインラインアセンブラ使うってのと通ずるとこがある ORMやクエリビルダは、メリットあるのか??
ふつうにSQL書けばいいじゃん。 取得したデータに型があった方がIDEでの補完が出来て分かりやすい
phpstanでエラーの検出も簡単になる
OneToManyの関係にある物も扱いやすい
QueryBuilderは関数と関数の間で受け渡しして
検索条件を追加していけるメリットがある
文字列連結で同じ事やるなんて間違えやすくて面倒 素のSQL書くよりQueryBuilder使ったほうが動作が速いらしい ORMにしてもQBにしても所詮ラッパーだし
ステップ数が増えるのに早くなるわけないわ 毎度思うがそれをいったら話が進まねえだろ
PHPが遅いなら遅いなりに速度を求めるってのは別に悪い話題じゃない 駐留型でない再起動不要 インタプリタ
この辺の条件じゃPHPは一歩頭抜けてるのでは? 駐留型って言葉はじめて聞いたけど、IT用語?
てかCGI実行でなければPHP.iniの設定変更したらWebサーバの再起動は必要よ。 よほど計算負荷の高いアプリケーションでない限り
ボトルネックはPHPではなくデータベースになる >>256
いやそういうことでなくファイル差し替えで
プログラムをメモリにロードするタイプって意味でいったんだが
駐留じゃなくて常駐って言いたかったん PDOにてプリペアドステートメントを使用してmysqlにUPDATEを実行したいと思っています
値0x0001をバイナリで設定したいのですが、プレースホルダを使用して実行すると意図しない結果になってしまいます
どのようにすればよいでしょうか?
//成功パターン
$stmt = $pdo->prepare('UPDATE users SET progress = 0x0001 WHERE id = ?');
$stmt->execute([$_SESSION['id']]);
設定される値:0x0001
//失敗パターン@
$stmt = $pdo->prepare('UPDATE users SET progress = ? WHERE id = ?');
$stmt->execute([0x0001,$_SESSION['id']]);
設定される値:0x3100
//失敗パターンA
$stmt = $pdo->prepare('UPDATE users SET progress = ? WHERE id = ?');
$stmt->execute(['0x0001',$_SESSION['id']]);
設定される値:0x3078
//失敗パターンB
$stmt = $pdo->prepare('UPDATE users SET progress = ? WHERE id = ?');
$stmt->bindValue(1,0x0001, PDO::PARAM_INT);
$stmt->bindValue(2,$_SESSION['id'], PDO::PARAM_INT);
$stmt->execute();
設定される値:0x3137
//失敗パターンC
$stmt = $pdo->prepare('UPDATE users SET progress = ? WHERE id = ?');
$stmt->bindValue(1,'0x0001', PDO::PARAM_STR);
$stmt->bindValue(2,$_SESSION['id'], PDO::PARAM_INT);
$stmt->execute();
設定される値:0x3078 phpは複数書き方がある時、どれがベストかを教えて欲しい
気づかない内に非推奨、廃止とか悲しい PDO::PARAM_バイナリ みたいなやつってある? >>261
配列を直接指定せず変数に代入してからだとうまくいくのでは? bit(16)にして"b'".base_converter('0x0001', 16, 2)."'"とか? $sql = "insert into test (
progress
) values (
:progress
)";
$stmt->bindValue(':progress', 0x0001, \PDO::PARAM_INT);
これでできた
やり方じゃなくて確認の仕方を間違えてたりしない? 目的は16進数表示(0x〜〜〜)のデータをint型でDBに格納したいで合ってる? 配列
$arrayは$array[0]と同等とのこと
ならば
$array="foo";
を
$array="foo";
$array[]="bar";
とするとエラーになりました
これは、
$arrayは$array[0]と同等に”見做してあげてる”という感じなのでしょうか? コードかくとなぜかブロックされてかけねーから日本語でかくけど
失敗パターン3で
プログレス=キャスト(? as ヴァーバイナリ(n))
とかDB側でキャストすればいいんじゃね?
試してないけど >$arrayは$array[0]と同等とのこと
え? >>268
$array=“foo”の意味
“foo”という文字列を変数arrayに代入 ←配列の変数じゃない
$array[]=“bar”の意味
“bar”という文字列を配列変数arrayに代入
エラーになるのはarrayが配列の変数じゃないのに
“bar”を突っ込もうとするから >>270
c言語にそういうのが合った気がする
ただ、単純に見づらすぎるので書い
たことないけど すいません、なにか勘違いしてたようです
特に意味もないようなので、
array[0]
と書くようにします >>272
Cにだってそんなものはない
array[i] と i[array] が同じ(どっちも *(array * i) の糖衣構文)というのはあるけど c言語だったら参照の話じゃない?
&arrayと&array[0]は一緒 (だった気がする) >>276
あぁ、多分それです
お騒がせしました、申し訳ありません ありがとうございます
教えていただいた方法を色々試してはみたのですがやはりどうもうまくいかず、
DB側の型をINTにして対応することで想定通りの動作にできました
実はもう一点悩んでいるところがありまして、
jQueryのAjaxからPOSTでPHPを呼び出すと、呼び出し元からのPHPセッションが切れてしまいます
そもそもこういう使い方はできないのか、何か間違っているのか教えていただきたいです。
js部分が若干スレチ気味かもしれませんが、よろしくお願いします。
//update.js
function Update(){
$.ajax({
type: "POST",
url: "update_progress.php",
data: {
progress: 0x0001
},
}
}
//update_progress.php
<?php
session_start();
(中略)
$stmt = $pdo->prepare('UPDATE users SET progress = :progress WHERE id = :id');
$stmt->bindValue(':progress',$_POST['progress'], PDO::PARAM_INT);
$stmt->bindValue(':id', $_SESSION['ID'], PDO::PARAM_STR); //$_SESSIONがNULLになる
$stmt->execute();
(後略)
?> ajax使ったことないから分からんのだけど
クッキーは送られてるの? クロスドメイン?
このページをみると色々設定してるみたいだけど ぱっと思いつく要因は二つ
・クッキーが送られてない
・セッションが切り替わってる ありがとうございます!
クッキーかもしれません
送り方を調べています >>261では$_SESSION['id']と小文字になってるが >>284
送り方調べるより先に原因調べたほうがいいよ
・ブラウザにクッキー(PHPSESSID)が保存されているか
・ブラウザからpost先(update_progress.php)にクッキーが送られているか >>285
すみません、こちらにコードを起こすときに打ち間違えたみたいです
大文字になってるのが本来は正しいです var_dump($_SESSION)もやってみてくれ >>286の調べ方は
クロームだったら
・アドレスバー左のアイコンをクリック → クッキーを見る
・右クリック→検証→Networkタブをひらく→update.js実行→通信が発生してグラフに線が表示されるのでクリック→リクエスト名をクリック→中段のcookieタブを開く >>289
正常にセッション情報が取得できるページで使用しているクッキーに保存されているPHPSESSIDと、
update_progress.phpに送信されているRequest CookiesのPHPSESSIDは同じになっていることを確認しました
なんでだ... var_dump($_COOKIE)は表示される? >>292
直前のページで使用しているクッキーのPHPSESSIDと同じものが表示されます print_r(ini_get_all('session'));
でもみてみれば >>293
PHPSESSIDを仮に”abc”だとして
1)
直前のページでセッションデータ保存する
→ var_dump($_SESSION) セッションデータ表示される
var_dump($_COOKIE) “abc”が表示される
2)
update.js実行
→ var_dump($_SESSION) セッションデータ表示されない
var_dump($_COOKIE) “abc”が表示される
↑今こんな状況? すみません分割になります
[session.auto_start] => Array
[global_value] => 0
[local_value] => 0
[access] => 2
[session.cache_expire] => Array
[global_value] => 180
[local_value] => 180
[access] => 7
[session.cache_limiter] => Array
[global_value] => nocache
[local_value] => nocache
[access] => 7
[session.cookie_domain] => Array
[global_value] =>
[local_value] =>
[access] => 7
[session.cookie_httponly] => Array
[global_value] => 0
[local_value] => 0
[access] => 7
[session.cookie_lifetime] => Array
[global_value] => 0
[local_value] => 0
[access] => 7
[session.cookie_path] => Array
[global_value] => /
[local_value] => /
[access] => 7 [session.cookie_secure] => Array
[global_value] => 0
[local_value] => 0
[access] => 7
[session.gc_divisor] => Array
[global_value] => 100
[local_value] => 100
[access] => 7
[session.gc_maxlifetime] => Array
[global_value] => 1440
[local_value] => 1440
[access] => 7
[session.gc_probability] => Array
[global_value] => 1
[local_value] => 1
[access] => 7
[session.lazy_write] => Array
[global_value] => 1
[local_value] => 1
[access] => 7
[session.name] => Array
[global_value] => PHPSESSID
[local_value] => PHPSESSID
[access] => 7
[session.referer_check] => Array
[global_value] =>
[local_value] =>
[access] => 7 [session.save_handler] => Array
[global_value] => files
[local_value] => files
[access] => 7
[session.save_path] => Array
[global_value] => /tmp
[local_value] => /tmp
[access] => 7
[session.serialize_handler] => Array
[global_value] => php
[local_value] => php
[access] => 7
[session.sid_bits_per_character] => Array
[global_value] => 4
[local_value] => 4
[access] => 7
[session.sid_length] => Array
[global_value] => 32
[local_value] => 32
[access] => 7
[session.upload_progress.cleanup] => Array
[global_value] => 1
[local_value] => 1
[access] => 2
[session.upload_progress.enabled] => Array
[global_value] => 1
[local_value] => 1
[access] => 2 [session.upload_progress.freq] => Array
[global_value] => 1%
[local_value] => 1%
[access] => 2
[session.upload_progress.min_freq] => Array
[global_value] => 1
[local_value] => 1
[access] => 2
[session.upload_progress.name] => Array
[global_value] => PHP_SESSION_UPLOAD_PROGRESS
[local_value] => PHP_SESSION_UPLOAD_PROGRESS
[access] => 2
[session.upload_progress.prefix] => Array
[global_value] => upload_progress_
[local_value] => upload_progress_
[access] => 2
[session.use_cookies] => Array
[global_value] => 1
[local_value] => 1
[access] => 7
[session.use_only_cookies] => Array
[global_value] => 1
[local_value] => 1
[access] => 7
[session.use_strict_mode] => Array
[global_value] => 0
[local_value] => 0
[access] => 7
[session.use_trans_sid] => Array
[global_value] => 1
[local_value] => 1
[access] => 7 session.save_pathのところにセッションファイルが保存されていると思うけど
>>295の(1)から(2)に遷移するタイミングでファイルが上書きされてる? セッション保存した後にunset関数呼んじゃってるとか? >>301
上書きされていました
たぶんこいつが原因ですよね
なんでや...
>>302-303
ログアウト処理では行っているところもありますが、それ以外だと無い感じです そのテストはどの環境でやってる?本番?ローカル?
本番なら共用サーバー? session_destroyかsession_regenerate_id実行してる位しか思いつかない 共用サーバなら/home/user/public_htmlがドキュメントルートだとして
/tmpじゃなくて/home/user/tmpとかに変更するとうまくいく場合がある >>310
再現しないよ
cookie無効になってるだけでは? update.jsは正常に動作してる?
jquery読み込めてなくてajaxが動作してなくてupdate.php叩けてないとかじゃない? >>312
叩けてなければセッションが取れないとか言わないでしょう
たふん…
どっちにしろPHP関係ない可能性大だね 謎だね
ブラウザから直打ちでupdate.php叩いたらうまくいくの? ajaxに関係なくセッションデータが利用できない環境なのか
ajaxが絡むとセッションデータが利用できなくなる環境なのか ちなみに俺も(>>311とは別人)ローカル環境で試してみたけど上手くいった とりあえず書いておくがGCPのGAEで確認したがIE11のセキュリティゾーンがインターネットだとcookieがガードされてセッションは取得出来なかった
セキュリティゾーンを信頼済みに変えるとOK
スレチなのでこの辺で PHP側で確認するならタイムアウト時間とかセッション管理をDBにしてみるとかか? 遅くなりすみません
>>312
再配布いいんだっけと思って、jquery同梱していませんでした
update.js自体は動作しました
>>314
update.phpのPOST要素を無くして、login.php開いてる状態からupdate.php直打ちしてもうまくいきませんでした
>>316
$_SESSIONが拾えなくてSQL失敗しててもjs側では成功と表示されるのですが、
そういう意味ではなく・・・?
使ってる環境がバリュードメインのコアサーバー+Chromeなんですが、そのせいなのかな・・・ >>321
セッション拾える
>update.phpのPOST要素を無くして、login.php開いてる状態からupdate.php直打ちしてもうまくいきませんでした
セッション拾えないって意味? login.phpでセッション保存できてもupdate.php直打ち実行で
セッション表示されないって話ならajax関係ないな 別ブラウザ、別PC・スマホとか端末かえてみてもだめなら、
サーバ側に問題があるのでは?
ユーザ設定ファイルのphp.iniや.htaccess設置してたら削除してみたり、
cronの設定削除してみたり、
削除してだめならsave.path変更とか、phpのセッション周りの設定変えてみたり、
レンタルサーバだと問題の特定は難しいけど、
デフォルトでPHPセッションがおかしくなる環境が提供されてるとは考えにくい。 お世話になっています
セッションが切れてしまう問題ですが、原因がわかり問題が解決いたしました
結果を言いますと、update.phpの先頭1行目に空白の改行があったことが原因でした
本番用のコードにもテスト用の最小構成コードにも空白行があり、そのため動作していなかったようです
色々手助けしていただき助かりました
ありがとうございました 解決してよかったけど、うーん、死ねってのが本音だぁ・・・ 「再現可能な」←再現しないコードをばら撒いて騒いでました
ペチパーはほんと民度が低いな きっとおまえんちの部屋の中も
お前のコードと同じように無秩序で
足の踏み場もない汚部屋なんだろうな IDE(いったい 誰が気にする ええじゃないか)を使えばジャンプできるから問題ない 再現したコードをこのスレに上げたけど環境によって
再現しないって話だからしょうがないと思うけどな
まー次からはこのスレ使うといいよ
【PHP】下らねぇ質問はここに書き込みやがれ 10
http://mevius.5ch.net/test/read.cgi/tech/1543392526/ よくしらんがバリュードメインのコアサーバーって
無料のやつで先頭に広告が挿入されるようなやつか?
そうだとしても先頭空行でPHPが機能しないとか謎すぎる なるほど、headers already sentか。
確かにsession_start()はset-cookieしなきゃいけないからな。
しかし完全にオマ環だな。こりゃエスパーでも難しい。
WARNINGまで切っちゃってるのはレン鯖にありがちだが、
開発段階ならちゃんとerror_reportingだすようしないと。 俺のローカル環境php.iniみたらoutput_buffering 4096になってたわ
>>261のレンサバはオフになってるのだろう 気づけばプロ並みPHP読んでるけど難しというより面倒くさすぎて挫折しそう
会員登録システム作るだけでこんな面倒くさいのかよ 俺は今PHPで汎用型POSレジシステムを構築しようとしているぜ >会員登録システム
これはかなり鬼門だぞ。フレームワーク使ったほうが良い
セキュリティ方面はマジで沼だから初心者が手を出すべきじゃない 初心者から勉強するならフレームワーク使うな
自分でセキュリティ含めて考えながらやるべき
その後フレームワークを使え 期間決めて考えながらプロトタイプを作ってみる事はアリだと思うけど、
それをそのまま本番で使ってしまわないか心配だ ろくなフレームワークすらなかったPHP4の時代から独学で身につけたけど
今からPHPやるならフレームワークから入るってのもありなのかね
※今からやるなら他の言語をやれというのは無しでw
色々と便利なものはたくさんできたが
昔はウェブアプリといえばperlかPHPって感じで選択肢はあまりなかったけど
今から始める人は、選択肢がたくさんありすぎて訳わかんなくなったりするんだろうな 最近は古い記事が検索にかかりにくくなっているから大分マシじゃないかな
昔は古い記事が普通に残っていたので本当に混乱してたわ でもPHP関係の質問を見てると
未だにDB処理にリペアドステートメント使ってないとか
酷いのになると mysql 関数をまだ使ってるとか
結構あるんだよなぁ
ああいうのは何を見てまねしてるんだろ
PHPならまずはこの本を読め!ってのが無いのも問題か
ひょっとしたら今は決定版みたいな本があるのかもしれないが
少なくとも俺はPHP関係の本を買った事が一度もないw mysql 関数はmysqli 関数に置き換えれば済む・・・そう思っていた時期が僕にもありました
古いwordpressは内部的にmysql関数使っててびびったゾ 別にmysqliでもいい
無理してPDOにする必要はない
公開するわけじゃないし
結局PDOで書いても対応DBは1つなんだから PHP使ってるならSQLiteを使わないのはもったいないと思うけどね
個人の趣味程度のサイトならSQLiteの方がよほど手っ取り早い
もし負荷的にSQLiteで問題が出てきたらMySQLに変える
なんて事が、PDO使ってたら一瞬でできる
MySQLでしか使えない関数ももちろんあるけどさ
基本的なSQLはほぼ完全互換だし(当たり前) まずAUTOINCREMENTとAUTO_INCREMENTとSEQUENCEで既に違うのが面倒い
複数DB対応するならSQLを抽象化したい >>349
>基本的なSQLは「ほぼ」完全互換
ライトユーザーはwordpressだし、その辺がねぇ >>350が全部言ってるけど
結局PDOじゃ修正が必要になるわけで
将来的に別DBへのアップデート考えてんなら
最初からORM使っとけよって話だし >>351
WordPressはSQLite使えるでしょ
ひょっとしたら今のバージョンは使えなくなってるのかもしれないけど
つまり、実際にMySQL⇔SQLiteを柔軟に切り替えられるものはあるってこと
ライトユーザーこそWordPressなんか使っちゃ駄目だと思うんだよなぁ
2018年末頃頃だけでもプラグインの致命的な脆弱性のニュースを
何回も見て笑ってしまったw
そりゃ乗っ取られもするわ ”個人の趣味程度”って話へドヤ顔でORMとか言われても…な
sqliteはたしかに楽だよな
ファイルがロックしちゃうのが弱点だが更新の少ないウェブアプリなら全然あり >353
どんなFWでも使えるし、プラグインなら更に楽に導入できる
問題はセキュリティ面やphp・SQL・apacheなどの低級なところで問題が見つかった場合
SQLliteはなんだかんだでマイナーなので、その辺を担保できる補償がない
てか、俺hは無理だ 俺はスマホアプリもやるんでSQLiteがマイナーとか言われちゃうとモヤっとしちゃう wordpressならUPDATEよりSELECTのが圧倒的に多いし
ユーザー詰め込んでるレンサバならmysqlよりsqliteのが速度が出るまである
googleが表示速度を重視するってかなり前から言ってるのに
あんなくそ遅いcmsよく使うよなあ
どうせチューニングする知識もないだろうに さおりゃそうだよ、やっぱり使いやすいrCMSが最古ウさ CDNとか使わないなら、よっぽどの馬鹿が作らない限りセキュリティ面は大丈夫だろ
CDNとか下手にキャッシュさせるとそこから漏洩が始まるが。 wordpressのプラグインにサイト乗っ取り余裕でしたレベルの脆弱性が立て続けに見つかってたのに
何言ってるんだこいつ >>360
よく分からんけど、便利なプラグイン導入>アップデートしたら乗っ取られたってこと?
それとも最初からプラグイン入れたら乗っ取られたってこと?
前者は分からんでもないけど、校舎はうくえないなあ このなかで一番美人なのって真ん中だよね?深キョンレベルだと思うのだが
ちなみに向かって右は目も鼻も整形してるって本人が公言してるけどそれ抜きにして誰が一番美人だと思う?
http://bigsta.net/media/1933567086757747003_3564907098 IPAやJVNの発表を全然見てないのか知らないが
なんかPHPerがバカにされる理由がよく分かるな…
PHPも結構好きだから悲しくなってくるわ なんだかんだPHPって結局まるごとフロントエンドみたいな分野だからな >>354
それをいうなら個人の趣味程度でDBのスケールアップが必要か?
PDOなら書き換えが楽っていってるから
そうでもないだろうっていう話をしてるわけで >>364
何でPHP使って自前で組むのに
WordPressの情報なんて見てると思うんだ?
↓これならプラグイン使うなよってだけの話じゃん
WordPress 用プラグイン「WP Job Manager」におけるアクセス制限不備の問題について(JVN#56787058)
https://www.ipa.go.jp/security/ciadr/vul/20170615-jvn.html WordPressなら静的書出しすれば無敵っしょ。
できないサイトもあるだろうけど。 ペチパーじゃないから知らんけど
wordpressてphpとなんかかんけーあるの? ありまくり。PHPの3割ぐらいはWordpress案件じゃないの IPAやJVNって別にWordPressだけ・PHPだけの話を扱ってるわけじゃないから
日頃からアンテナ張ってる人なら
WordPressの話も自然と目にするし知ってて当たり前
1件2件どころの話じゃないんだから尚更
実際、今年一年ほとんどPHP案件無かった俺ですら知ってるよ
とマジレスしてみた
その昔IPAが
セキュアなウェブアプリを作りたいなら
PHPなんか使うな(意訳)と公で書いて
散々叩かれてたけど
まあそう書きたくなる気持ちは分かるなw
PHPが悪いんじゃなくて使う人間の質の問題 そういう専門的なところ見てなくても知ってるのが普通じゃね?
あちこちでニュースになってたんだから知らない方がおかしいわ ペチパーはPHPが世界の中心だとでも勘違いしてそうだな
マイナー言語界隈のマイナーな話題などニュースとすら言えない >>375
現実と合ってない情報で貶めようとするのやめよう
韓国人じゃないんだから 世界の中心(笑)
あれだけしょっちゅうあちこちで取り上げられてたら嫌でも目にするから
さすがに知らないのはただの無知かと
今年1年だけでもWordPress絡みの脆弱性発表は10数件はあったんじゃないかってのが個人的な印象
PHP案件絡んでない俺ですらこれなんだから
実際はもっとあったんじゃない? 知り合いの鯖缶やってるのがWPに親殺された勢いでWPを嫌ってるけど
WPでブログやってアフィで稼ぐみたいな安易な輩が増えまくってるんだってな
IQ80以下じゃないのか?ってレベルのやつやHTNLも全くできないレベルのじじいが
サポートに連絡しまくってくるんだと HTNLとかありそうでないワード出されると不安になる >>377
wordpressなんか使ってねーつーの >>380
知的障害の指標として今でも普通に使われてるけどね
IQ70未満が知的障害
80だと疑い高めの境目ってとこだからバカの例えとしてはいい線ついてる 過去のcake資源引き継ぐとか理由ない限りLaravelでok >>383
ブログでアフィ自体は大昔からあったが
ここ最近流行?のパターンは、スキルの全くない人間が情報商材みたいなのに騙されて自分にもできると勘違いして手を出すんだとよ
だからサポートに来る問い合わせの内容が知的障害者レベルなんじゃね?
>>382
それな
プログラムやるやつにコミュ障が多いって言われる理由がよくわかるわ 問い合わせのサポート対応できる人は尊敬する
俺なら
んなもん人から教わるようなもんじゃねぇんだから
ググればすぐ分かる事を他人に聞いてる時点でセンスねぇよ
やめちまえ
とか言いそうw https://www.techempower.com/benchmarks/
ここのベンチ見るとphpのswooleとやらが
4位になってるがどういうこっちゃね WordPressなんてブログツールとしか思ってないし
使わないから全く興味ないから、ニュースになっててもスルーだわ JVNの脆弱性レポートが偏ってるのは
ベンダーが掲載を許可するという大前提があるからだ
掲載されてないだけでサイボウズやWPが特別多いわけじゃない Linux難しいぉ
リポジトリみたら5.4だったからしょうがないからソースからいれたんだけど
#!/usr/local/bin/phpとかよく見るしそこに狙ったつもりが
/usr/local/bin/php/bin/phpにインストールされてるw 狙ったところに直接インストールするんじゃなくて
バージョン管理しやすいところにインストールして
シンボリックリンクを張るんだよ
そうすればバージョンの切り替えも簡単だから
Apacheとかも一緒 どうせCentOS7だろうから素直にremiのやつ入れとけ 今日でPHP5.6≒PHP5.xのサポート終了か
7にしても5時代となんもコードは変わってないけど
そろそろナウでヤングでイケてるPHP7のコードかけるようにしないとな! HackはPHPとほぼ同じシンタックスってだけで中身はほぼ別物じゃないの?
2週間前に3.30が出たみたいだしGithubみても更新は活発に見えるし心配はいらんかと HackのPHP5サポートはすでに終了していて
PHP7の機能も積極的には取り入れないとのこと
PHPはこれからもHackの成果を取り入れるだろうから
HackからPHPへの移行は簡単だろうがその逆は大変になるだろう 最近SQLiteでなんかバグあったような気がするけど、
phpinfo見てるとライブラリのバージョンが3.7.17でちょっと不安。
これバージョンアップ出来ない? RHEL7かCentOS7か?
そもそもPHPの sqlite3.so と pdo_sqlite.so は libsqlite3.so (sqliteパッケージ) に依存していてその中身を呼び出してる
更新するなら
1. PHPモジュール sqlite3.so と pdo_sqlite.so を新しいバージョンのsqliteを静的リンクするようにビルドして入れ替える
2. システムの libsqlite3.so を新しいバージョンのsqliteをビルドしたものに差し替える
のどちらかになるわけだがぶっちゃけRed Hatがバグレポ受けた上でwon't fixなら大概大きな問題はなかろうし費用対効果考えたらやってらんねー
それにsqliteはyumとかのコアパッケージが依存しているから切り戻せるかどうか怪しいバージョンアップは危険過ぎる >>400
とてもいい情報ありがとう。
ちょっと試してみる。 セキュリティの勉強をしているのですが、CSRF対策で使用するトークンは、【入力】→【確認】→【実行】の場合、どのタイミングで生成するのが一般的ですか?
IPAの安全なウェブアプリケーションの作り方や、徳丸浩さんの参考書も見ているのですが、難しいです。
詳しい方、アドバイスをください。
よろしくお願いします。 入力-確認を経ないでいきなり実行が出来る場合は実行時に
入力-確認-実行と遷移してきたのを保証(改ざん検出)する場合は全てに 最近増えてるけどCSRFでパスワード再入力求めるとこってユーザビリティ悪すぎだよな >>403
俺、詳しくないけど、【確認】だと思うよ >>404さん
>>407さん
アドバイスありがとございます。
日付が変わってしまい、申し訳ありません。
いただいた助言を踏まえて学習を続けます。
ありがとうございました。 基本は重要な操作をする前の画面でトークン入れて、次の重要な操作で突き合わせる。
例えば、情報を編集する カートに入れる 決済する といったもの。
一番重要な最後の決済だけでやればいいと、カートに入れるに対策をしなかった場合、
よそのサイトでカートに詰め込められたあと、
カートに入れてる品物を確認せず、気づかずに決済を実行してしまうケースも考えられる。
またここで気づいたとしても、覚えのない物を買わされそうになったという不信感が生まれる。
ということで実害は少なくても、カートに入れるにも対策をするべき。
という感じで、どこに必要かを考えてみるといい。
入力→確認画面→実行で考えると、
入力をCSRFで受け付けてしまっても、確認画面に行くだけで攻撃に有効性はないが、
よそからのリクエストを受け付けてしまうことが、脆弱性を生むそもそもの原因なので、
実害はなくてもトークンがなければ全ての画面でリクエストを受け付けないと、
全画面に入れるのも全然あり。 >>409さん
実装によって必要な箇所が変わるのですね。
わかりやすい例えをありがとうございます。 そもそもの話
CSRF対策用のトークンは出力の際に自動で付与するようにし
チェック処理も自動でやるようにしないと
駄目だと思う
XSS対策なんかもそうだけど
こういう事にいちいち人の手を入れる余地があると
必ずミスが発生する
要するにフレームワークに任せなさいってこと
勉強のために自前で実装したいならトークンは
output_add_rewrite_var()
を使って自動付与してチェック処理内に
そのトークンを必ずチェックするような処理を加えればいい
トークンはセッションIDに何らかの種を加えたハッシュ値を使うのが楽
そこまで手間ではない
https://qiita.com/mpyw/items/8f8989f8575159ce95fc
この例を output_add_rewrite_var() を使って
トークンを自動付与するように改造してみるといい mktime,gmmktime,strtotimeで9時間遅いタイムスタンプが出力されてしまいます。
time()の値は、正しい今のタイムスタンプが出ます。
ズレが9時間なので標準時からの時差なんだろうと推測していますが、原因、解決策が分かりません。
どの様な所をチェックしてみるべきでしょうか? >>412
ロケールの設定が適切でないからじゃね
date_default_timezone_set('Asia/Tokyo'); >output_add_rewrite_var()
これは知らなかった
テンプレートに明示的に書きたいし
必要性を感じないけどさすがPHPなんでもアリだな >>414
ありがとう。
ハマって午前中潰してしまったのが、一発で上手くいったよ。 >>413
PHPの生みの親自らがそう言ってるしな >>411さん
アドバイスありがとうございます。
output_add_rewrite_var()は初めて知りました。
フレームワークについては脆弱性をしっかりと理解して、対処方法を学んでから使おうと考えています。
ありがとうございました。 むしろフレームワークを使わない方が脆弱性が増えると思う
セキュリティは最低限の知識しかないけど、追いかけてたら人生終わるってのはよくわかった >フレームワークについては脆弱性をしっかりと理解して、対処方法を学んでから使おうと考えています。
これがプログラマーとしてあるべき姿
>追いかけてたら人生終わる
問題があったときに対処できる幅が広がるから
高級言語やるなら低級言語からやれっていう極論は見たことあるし
時間の無駄だしそれはさすがにないわーって思ったけど
XSSとXSRFとSQL Injectionの3つぐらいは
時間もたいしてかからんしPHPerなら仕組みから知っておくべきだと個人的には思う >>421
ちょうどその3つだわ、師匠から教わったの
プリペアードステートメンド、htmlspecail quat〜
とか言ってたな
もう俺はFWに全部任せるけど、FWを避ける派はどうしてんだおるな スキルのないやつの
XSS対策した(つもり)
CSRF対策した(つもり)
ほどたちの悪いものない
そんなの全く知りません
と言ってくれた方が100万倍マシ
勉強のために車輪の再発明をする事自体は大いに推奨するが
自分のスキルのなさは自覚してもらわないと困る XSS程度のものならFWも度々やらかしてる
一度導入したらアップデートはなかなかされないというのもFWにはありがち
サーバのログ見てもわかるようにある物を導入してるのを前提に攻撃してくるので
オープンソースのものを使うというのは狙われる危険性も増える
FWを使うなら最新情報もちゃんと追うように >>423
そうそう
完全に自覚してるし、だからFWに完全に依存
クライアントにも言っているよ、本気でデータ保護やりたいなら別の業者にお願いしますってね あらゆる攻撃から守り続けることができるベンダーは本当に羨ましい アマグラマーが商売してんじゃねえよ!
適当なもん組んでんじゃねえぞ!オラ!!!!! >>411は別に脳死で既存のフレームワークに丸投げしろという意味ではないんだけどね
俺々マイクロフレームワークでもいいから
そういう処理を自動で行うように設計した方がいいってこと
例えばXSS対策なんかは htmlspecialchars() をいちいち通してたらミスが起こるから
テンプレートエンジン側で {{ $var }}のようにすれば
自動でエスケープするようになってるわけだ
人はミスをする生き物だからミスが入り込みにくい設計を考えるのも大事 どうして誰もがPHPレベルでの整合性を求めるのか,私には分かりません。整合性をとるのはフレームワークの役割です。
フレームワークは問題を解決するための全体的なアプローチを定める場所ですから。
PHPはその下のレベルにあって,ただ低レベルにあるライブラリとか関数とかへのアクセスを提供するだけの存在です。
ラスマス・ラードフの発言な
PHPの立ち位置を理解してないやつが多すぎ 自動処理は必要のないものにまで処理をすることになるから
FWを使わないような層(≒速度重視)とは思想が相容れないんでないか ところでなぜwordpressは毎回毎回セキュリティアップデートしてるの?
それだけ攻撃される穴があるの?
それとも新たな攻撃方法がみつかってそれに対処してるの?
ということはフレームワークにもいろいろ穴があるわけだよね?
なのにwordpress並にはアップデートしてない
なぜですかい? フレームワークを使わない=速度重視ってより
他人の作ったプログラムに囚われたくないんだろう
フレームワークのバージョンアップを適用したら動かなくなったとか
適用したら設定項目が増えてたとか、面倒でしょう?
使ってるフレームワークに脆弱性が見つかったとか言われ
その脆弱性で今まで被害があったのか?とか面倒なこと聞かれたら大変でしょう? >>433
高機能だkら山程セキュリティホールがある
他のFWは低機能だからセキュリティホールが少ない
>>434
まぁセキュリティホールをの説明なしにフルスクラッチで作りがる業者や個人は疑ったほうが良い
脆弱性による被害は無い→今後ある可能性がある、そのコスパは非常に悪い
こういうとこまで説明する必要がある WPはCMSでFWでない
セキュリティアップデートは利用人数と開発者人数によるとこが大きい
潜在的な問題はほぼ100%どのソフトウェアも抱えている
それが表に出ないだけ WPは設計が古すぎる
今だに低レベルなxssが起こってるのは、
テンプレートエンジンを通してないのが理由だし
プラグインで低レベルなxsrfが起ってるのは、
そこの処理がプラグイン開発者に依存してるから
良く言えば自由度が高いと言えるが、
一貫性のある手法を提供しきれてないから、
プラグインで致命的な脆弱性が頻発してる。
この辺りは430の話にも通ずるな
コードレベルでいえばglobal宣言だらけな時点でお察しだし まぁwordpressは世界のサイトの3割だかが
これで作られてるってぐらいシェアがあるから
その分攻撃対象になりやすいってのもある
サバのログ見てりゃ分かるが
中国あたりからwordpressの脆弱性をチェックする
ボットが飛びまくってくるからな PHPでフレームワーク使う必要なくね?
フレームワーク使うぐらいなら別の言語でよくね?
なんでPHPつかってまでわざわざフレームワークなんて使ってるのか?
俺にはペチパー思考はさーっぱり理解できないわw フレームワークを使うのは、既にあるものをわざわざ自分で0から作る必要なくね?ってやつだろう >>440はPHP以外にどんな言語ができて
その言語ではどのフレームワーク使ってて
例えばSQLの組み立てはどうやってるのか教えて FW使うにもプログラム言語を少しは触る必要があるわけで
PHPが簡単という嘘に惑わされた初心者がPHPから始めてるから仕方ない
最近は充実してるけどもっと早く豊富な日本語ドキュメントにアクセスできれば
圧倒的にPythonが流行っていただろうにな >圧倒的にPythonが流行っていただろうにな
無いかなぁ
日本ではHSP、ツクールが流行ってたからな。
なんやかんやでゲームとKAWAIIの国
pythonはないかなぁと思う
pythonメインのDXライブラリみたいなのがあれば流行ってたかもね >>443
俺はJava、Swift、Objective-Cとか
古い言語だとPerlも触れるけど>>440みたいな考えは全く理解できないんで
どんな言語でどんな環境だったら440みたいな考えになるのか興味があるので 芸能人レベルの一般人美女(真ん中)
向かって右端は目と鼻整形済み(本人公言)
左は高身長でナチュラル
ランク付けてみて
https://www.instagram.com/p/BrVaQVblRk7 FWを使う使わないが速度云々とか
WPとFWの区別も付いてないとか
PHPでFW使う意味が分からないとか
もうね…
このスレに初心者お断りって書いてる意味がないと思うの そういやもうwpを長らく触ってるから私は中級者ですっていわれりゃそれはそうだし、
何を持って初心者かだよな >>430
前後の肝心なとこ抜くなよ
この発言はPHPの一貫性のなさや批判に対して開き直った発言で
ラードフが初期にあんま深く考えずオレオレライブラリとして作ってたことを示してる
批判に対して整合性が欲しいならフレームワーク使えばいいということに言及したに過ぎず
ラードフ自身フレームワークの遅さを指摘しPHPでは使う必要はないと言っている
Strutsあたりで流行しRoRで完成したMVCが今主流ってだけで(MVVMも流行ってるが)
PHPはそれ以前に流行したHTML埋込み型のWebアプリケーションFWであるというのは知っておけ
>>448
速度重視するならPHP使わないとか言い出すいつものキ○ガイ?
サーバチューニングして半ば強引に最近WPは早くなってきたけれど
肥大化したアプリケーションというのは元々遅くなるもの
FW(特にフルスタック)なんてのはそういうアプリケーションの代表格 PHPの利点を殺さずMVCでコード書きたいならPhalconかSlimでも使えばいい
LaravelやCakePHPは脳死した人間が使えばいい PHPのコードを手っ取り早く早くするには
ZephirでPHPエクステンション書けばいい
WPをPHPエクステンションに移植したら有名になれるよ 可変引数でうまいバリデーション方法あったら教えて下さい
ルールとしては
・引数の数は3か4である
・$args[0]は1か2か3である
・$args[1]は1-100である
・$args[2]は$args[0]が1か3の場合1-100で$args[0]が2の場合1-10である
・$args[3]は$args[0]が3のもので英数字が入る ただし1文字目は数字はいけない
素直にコードにするとこうなります
function foo(...$args)
{
$len = count($args);
switch ($len) {
case 3:
if ( ($args[0] === 1) && ($args[1] > 0) && ($args[1] <= 100) && ($args[2] > 0) && ($args[1] <= 100) ) {
// pass
} elseif ( ($args[0] === 2) && ($args[1] > 0) && ($args[1] <= 100) && ($args[2] > 0) && ($args[1] <= 10) ) {
// pass
}
break;
case 4:
if ( ($args[0] === 3) && ($args[1] > 0) && ($args[1] <= 100) && ($args[2] > 0) && ($args[1] <= 100) && (ctype_alnum($args[2])) && (!ctype_digit($args[2][0]) ) {
// pass
}
break;
}
}
もうちょっときれいにかけたら書きたいです
これでは見直すたびに鬱になりそうです アプリケーションの文字エンコーディングがUTF-8で統一されている時、
<input>要素から送られてくる文字列の文字エンコーディングの検証は必要ですか? >>455 こういうコード書く奴とは一緒に仕事したくないなと思う 引数の数チェックいるか?俺なら最大4つ想定して無視するが
$list($w, $x, $y, $z) = $args;
switch ($w) {
case 1:
case 2:
case 3:
}
でわけたほうがすっきりする
filter_var($x, FILTER_VALIDATE_INT, [
'options' => [
'default' => FALSE,
'min_range' => 1,
'max_range' => 100
]
]);
(function($x) {
if (is_int($x) && $x > 0 && $x <= 100) return $x;
else return FALSE;
})($x)
こうしてみると下はシンプルだけど上の方がより直感的でわかりやすいと思う バリデーションは本当面倒だよね
なんかいいライブラリない? PHPで制御文字を除去する仕組みを学んでいるのですが、肝心の制御文字の送信方法がわかりません。
ツールなどを使わなければ制御文字は送信できないのでしょうか。
詳しい方、アドバイスをください。
よろしくお願いします。 ADCEBという文字列があるとし、
BとCとDの文字のうち、どの文字が最初に来るのか調べて、
最初に来た文字を変数にしまいたい場合、どのようにするのが
いいでしょうか?
>BとCとDの文字のうち
この部分はAとBを調べたかったり、CとDとEを調べたかったり
可変なのでどう処理すべきか悩んでいます。 >>465
言葉足らずだったので補足です。
ADCEBという文字列の中で、「BとCとD」の文字うちどれが最初に来るのか
調べたい、ということです
この例だとDが答えです。 全部の順序調べたりする必要もなく
最初に見つかったの返すだけならstrposすらいらぬ
$str = 'ADCBE';
$array = ['B', 'C', 'D'];
for ($i = 0; $i < strlen($str); $i++) {
foreach ($array as $char) {
if ($str[$i] == $char) {
echo $char;
break 2;
}
}
}
もうちょいコード短くしたいならforeachのとこはin_array使えばいい
つうか初心者スレ案件 >>465
ほい
$text = "ADCEB
";
if(preg_match("/([DEF])/",$text,$m))
echo $m[1];
>>468
ダッさwww 配列作ってfor/foreach回すと遅重くなるよね?
文字列操作のstrposを必要なだけ並べてやった方が速軽いんじゃないかな? みなさんありがとうございます。
>>470さんのものが簡潔なので利用させていただきます。
preg_matchをこう使う方法もあるのですね…驚きです。
ありがとうございました。 計算量考えたコード書けよ
preg_matchなんて短いだけだからな >>465-466の条件でならstrposよりも早そうだけどな
計算量だけがボトルネックじゃないから
例えば最速であろうハッシュマップを参照するのも
array_key_existsみたいな関数使わんといけないし(じゃないとエラー出る) $str = 'ADCBE';
$array = ['B', 'C', 'D'];
$pos = strlen($str) + 1;
foreach ($array as $char) {
if (($idx = strpos($str, $char)) !== false && $idx < $pos) $pos = $idx;
}
if (strlen($str) > $pos) echo "found {$str[$pos]}";
preg_matchのほうがちょっとだけ早い
1文字でいいならpreg_matchのほうがよさそう preg_matchでパフォーマンスも読みやすさも十分だろうに 複雑なバリデーション以外に正規表現は使うべきでない
それも正規表現以外には手がないという最後の最後
1文字チェックに使ってたら笑うわ
>if (($idx = strpos($str, $char)) !== false && $idx < $pos)
if (($idx = strpos($str, $char)) < $pos)
でいいしこれでpreg_matchなんてぶっちぎれるだろ >>478
なんか速そうに見えるだけのコードよりも
ライブラリ内で爆速で動く方がそりゃ速いよ >>476 逆
$str = str_split($str);
$array = implode('', $array);
foreach ($str as $char)
if (strpos($array, $char) !== false)
return $char; 先頭のほうで見つかる保証がないのならあんまよくない。 >>481
面白いけど、まだ遅いね
サービスで$strと$arrayの生成をループの外に置いても
実測でpreg_match版の1.5倍くらい遅い iconv_strlen()ってmb_strlen()と何が違うんや・・・ array_intersectとか使う方法を思い浮かんだが
コードは短くてもどう考えてもおせえな >>483
自分の環境だとpreg_matchより倍ぐらい速かったよ
GoogleCloud GAE PHP5.5の環境で1000回実行したときの時間
preg_match 1.7ミリ秒
strpos 0.8ミリ秒
ちなみに配列ブン回すロジックは1.9ミリ秒だった 468、476、481 はプログラマの適正なし!
ふつうのコードは470だろ
計算量?速度?そんなの元の質問にねーよw >>487
言われなくても考慮するのがプログラマってもんだろ ユーザビリティに影響するなら考慮するけど、
>>486にもあるように0.0008秒の差でしょ。それ考慮して何かあるのけ 正規表現は荒れるからやめろよ
>>468はとても説明的で初心者向けだと思うがな >>489
この測定はあくまでも5文字から3文字分の先頭を求めるロジックの測定
質問者が例題でそうしただけでとんでもない容量のデータを対象にした場合は結果も変わってくるでしょう
preg_matchはレングスによっては動作しなくなるみたいだし >>487
速度の話になって対比で書いただけだから
ま、実際strpos使って正規表現は使わんけどね 単純検索や置換で正規表現止めとけは分かるけどこの内容なら普通に正規表現でいいわ /[DEF]/
$m[0]
でいいだろ
グルーピングする理由がない >>491
>preg_matchはレングスによっては動作しなくなるみたいだし
これマジ? どのくらいから動作しなくなるの?
ちょっとソース教えてクレメンス >>491
100回でも0.1秒差だぞ
>>465の処理をそんなにループさせる場面を想定してるの?w
それともこんな変な処理ばっかり押し付けられてるの? >>496
一回では測定出来ないから1000回の時間で比較しただけだよ >>495
気になったので試してみた
4億8000万文字でも大丈夫だった
$text = str_repeat ( 'D' , 480000000 );
if(preg_match("/([DEF])/",$text,$m)) echo $m[1];
4億8000万文字はphpがエラーになった。
$text = str_repeat ( 'D' , 490000000 );
制限無いと思う
>>491
嘘つきは朝鮮人の始まりだぞ >>487
ペチパーってレベル低いな
そのまま解こうとしててバカみたいだわ
>>465の要件がおかしいんだからそれを直せよ 単純な文字列検索は配列でもstrposのほうが安全 if (preg_match('/[DEF]/', $text, $matches)) {
// $matches[0] <-
}
って書いといてパフォーマンスが気になるなら計測してから直す
最初からパフォーマンスが―ってのは無能 >>470はきれいなサンプルコード書いてやれよに呼応して出したんだろ
JavaScriptの小技的なサイトにのってそうな初心者受けしそうなコードじゃないか
質問者も満足して帰ったんだしそれでええだろう スレ的にはトリッキーでも面白いコードをみたいところだが
そんなコードが出てきても
速度 読みやすさ コードの長さ どれかに欠点もっててボロクソ叩かれる運命 >>506
動かなかったのは仕様をちゃんと読まなかった私の責任です
と書いてあるね >>507
質問者はpreg_match使うって言ってたからこの辺のリスクも知ってもらわないといけない /[DEF]/とかバックトラックも再帰もスタックもO(1)だろ >>499の言う通り
どうせ実際の用途は違うんだろ 正規表現のほうが改修ラクだしいいだろ
文字一文字じゃなく文字列になった場合でもちょっと変えるだけで済むし 改修が楽なわけないじゃん
strposなら配列に文字列のリスト突っ込むだけに対して
正規表現は何するつもりだ?orでつなぐのか?アホくさw 正規表現はどうしても荒れるね
>>512みたいな低レベルが自覚せずにしゃしゃりでてくる >>513
じゃ答えてみろよ
まさかただの文字列検索にpreg_matchで配列渡すとか愉快なこというんじゃないだろうな? >>514
その前に君の意見をどうぞ
随分と高尚なのでそれに見合った意見があるのだろう
別にコードで書かなくてもいいぞ 正規表現に変数突っ込むのはあかんのか?
<?php
$text = "ADCEB";
$match = "DEF"
if(preg_match("/([".$match.""])/",$text,$m))
echo $m[1]; >>515
>>512で答えてんだろうが
理解出来ない雑魚は引っ込んでろよ 3日間も大盛り上がりしてるから仕切り直してみよう
"PHPに関する質問や雑談をするスレです。" *1
この文字列において、
("PHP","質問","雑談") *2
の単語のうち最初に出てくる単語を返しなさい
実際の運用において*1の文字列は大変長いものであり、
*2の単語や数は変わりうるものとし、
実行速度を考慮した上で最適なコードを述べよ
ファイッ >>519
大変長いってのはマジでやめてw
保守性だけに笑点しぼってほしい ああ、スマン
複数の文字列から検索ってのに脳内変換してた
$match = ["DEF", "CEB"];
foreach ($match as $var)
if (strpos($text, $var) !== false) //match
アホくさと言ったコード↓
$match = implode("|", $match);
if (preg_match("/(".$match.")/", $text)) //match
>>516見て>>511の言いたいことは理解した
preg_match("/(".$match.")/", $text)って言いたかったのね
ただそれだとpreg_match使う意味が全くないし
strposに比べて改修楽って主張も全く意味わからんけど >>512
| を知らんのか?正規表現を知らない初心者かよ >>522
こいつ殴っていい?
orと|が別物とか言っちゃうの? >>519
$pdo = new PDO("sqlite::memory:");
以下略 <?php
$text = "PHPに関する質問や雑談をするスレです。" ;
$match = ["質問","雑談"];
$boolean = strpos($text,$match);
if($boolean){
var_dump($boolean );
}
これあかんのか strposに配列渡せるのは知らんかったわ
うえのほうでforeachで回してるもんだからてっきりそういうもんかと
オーバーロードはマニュアル分けてほしいわややこしい クライアントが使っているレンタルサーバーが全部5系で絶望中
7系に対応してないサーバーや、7.0系にしか対応してないサーバーが多い
5系でも5.6系じゃなくて5.1系とか5.3系とかとっくに死んでるのも多い
5.1系でWP4系を動かしてる無茶なサイトもあるし
そもそも互換性がないから安易に7系に移行できない
セキュリティーサポート終了は知らなかったことにしたい
あるいはガッツリ金と時間を取って対応したい クライアントからクレーム来た
アルファメールのphpバージョンが5.4→7.0
どっちにしてもセキュリティ的に問題があるだろってさ
知らんがな、それ選んだのは君だろう >>529
うおっとすごい奇遇だね
なんか流行りでもあるのかね。スパムメールで営業でもしているのだろうか
とりあえず金とって対応スべきだとは思う
これはハイハイといっていい案件ではないわ array()とかcreate_functionとか書かなきゃいけないサーバは勘弁してほしいわ >>531
金と時間の話も絶望的だが仮に金と時間が取れたとしても
全てのクライアントのサーバー引っ越し作業が必要になる絶望感 >>529
うるせーぞ
保守案件とはいえ いまだに4.4使ってんだこっちは 4.4とかセキュリティ的に怖いすぎる
調べるのも面倒なレベルだ 保守案件だからこそバージョンが問題になるんじゃないのか・・・
ネットに繋がってないシステムなら話は別だけど
結局、まだどこも5系使っているし、
赤信号皆で渡れば怖くない的な状態?
いやこの場合、皆だと更に怖いんだけど 零細相手だと金がないからその場しのぎでアップデート渋ってるんだろ
結局そっちのほうがコストかさむのにな お問い合わせフォームで入力してもらう件名や本文の文字数の上限って皆さんどんな感じで決めてるんですか? >>538
それができるなんてうらやましい
妄想じゃないよな? 対応出来るかどうかは別にしてもセキュリティについて責任持てませんは言わなきゃダメよ実際責任持てんし まぁこれはweb業者側から言って置かないとダメだな
書面にして残しておくぐらいでも良い
ってか、アップデートぐらいしようよ、普通に だってレンタルしているサーバーが対応してないんだもん
同じ会社の新しいサーバーは対応しているけど、
クライアントはいっぱいいて1つ1つ移行を代行するのも大変なんだもん
わからない?
わかったらどーしたらええか教えてくれや 暇があれば移行できるとはなんとも小規模事業者のような考え方
あるいはその逆で大規模技術者集団か
うちみたいに人員と技術力に見合わない規模の事業やっている、
中途半端なところが大変なんです >>538
じゃあ 6 でお願いしますね(ニッコリ 開発が頓挫してリリースされなかっただけで存在しないわけではないのでは? >>543
金を請求して、サーバー移行作業を行うのが正しい姿
最低限蔵には現状ヤバイ状態と言うだけ言っておかないと、
今後何か合った時に大惨事になるよ >>550
そりゃそうなんだけど、
クライアントに説明して金を貰うところまでは
(一社一社やっていくわけだから面倒だけど)とりあえずはいいとして、
その後の実際の仕事の量に絶望するよね
うちサーバー移行のノウハウないし 世の中素人なのが当たり前
だからこれだけPHP5が使われている 素人なのは恥ずべきことであって
決して開きなおるようなことではない 一部の7使いが高みの見物をする中、
多くの5使いがいつか大殺戮に遭うんだろうな
素人なのは嘆かわしいことでもある 個人情報取り扱ってなかったらHPがエロサイトになるぐらいで済む
平気平気 今までextだったのがバンドルされてたり廃止されたりして設定がなくなってたりするけど
そのへんdllや設定読み込み無視したりでPHP5の設定をPHP7でそのまま使える?
まあめんどくさいしソースからビルドはしないで
パッケージから入れて使うext有効にするだけなんだけど…
最近じゃ専用PHPが必要なlsws使ってるからリリースすぐに最新のPHPアプデ出来るしな lswsってどう?Apacheと同じ感覚でつかえる? LSWSはPHPerなら非WPユーザーにもおすすめ
Apacheのルールが使えるからリライト設定も楽だし
PHP製の設定ツールが標準でついてて
設定ファイル編集からサーバ再起動までWebで出来るのも良い
http2も証明書設定すませるだけで使えるようになってたしとにかく楽
肥大化しすぎたApacheをシンプルにまとめたような代物
信頼性堅牢さの評価はわからんが特に問題にもなってないし大丈夫だと思う >>540
え、むしろ君のところでは出来ないの?
保守案件なんかは仕方ないかもしれんけど、新規は5系切り捨ててるよ。
だって実際5系切り捨ててるフレームワークやライブラリ増えてきてるし。
Laravelなんかはバージョン5.5から5系のphp切り捨ててるよ。 phpバージョンってずーっとほっといたら強制的にバージョン上がったりする? >>567
俺たちじゃ分からないからサーバー管理者に聞こう 今からFWやCMSみたいな第三者に使ってもらう前提のものを作るとして
5系は全く配慮しなくてもいいだろう(少なくとも国内は)
数百円でも有料サーバなら今どき7も使えるように配慮してるわ
たとえ4時代から使ってるような古いサーバであっても
15年ぐらい前に使い始めて未だアカウント有効なxreaがまさにそう(放置して無料プランだけど)
昔はサーバごとに入ってるPHPのバージョンはバラバラで
なかなか上がらないバージョンに不満があってだいぶ昔に見限ったけど
いつのタイミングかどのサーバでもPHPのバージョン選択出来るよう仕様変更したらしい 今はサーバー会社がphp複数入れておいて、ユーザーが選択って方式ばっかりだね
全く利用者がいなくなってから古いバージョン削除とかそんな感じだと思う うーん。うちの場合は保守運用している案件で、
サーバー引っ越さないと駄目なところが多いんだよなあ。
レンタル会社の選択ミスったか。
いや、選んだの俺じゃないけど、
クライアントに提案したのうちの奴だしな。 >>571
ちなみに失敗したサーバーってどこ?
俺はアルファメール
未だにphp7.0が最新、サポートきれとる >>572
ちょっとコンプライアンス的に厳しいかな。ごめん。 >>573
気にするな
全く別の質問スレで、
「xxのサーバーのセキュリティ的にどう?」と、あくまで感想を聞くのは問題ないと思うぞ 選択できるバージョンのphpってcgiモードでしょ?
7.2提供開始ってことで選択して使ってみたけど、cgiエラーで時々500 Internal Server Error出すからモジュール版の5.6に戻した
cgi版は不安定という印象で、安定求めるなら使えなくない? そもそもPHPで○○求めてるのが間違いと開き直って
適当に富豪的プログラムやってる結果だろう サーバリソースないくせに ね
あるならいいんだよ好き勝手やって >>575
普通に使えるし500エラーは見当たらない
コードがどこか変なんじゃないか コマンドラインからの対話型アプリケーションを作ろうと思ってるんですが
操作途中でctrl+cみたいな強制終了された場合destructorは呼ばれますか?
OSやシェルによっては呼ばれなかったりしますか?
あと
class C {
function __destruct() {
echo "DESTRUCT";
}
function _echo($str) {
echo $str;
}
}
$t = new C;
$t->_echo("test");
$t->__destruct();
$t->_echo("test2");
このコードはちゃんと動くんですが
このようにdestructorは任意のタイミングで呼んでもいいのでしょうか?
終了メソッドが減らせるのでおかしくなかったらこれにしようかと思います $t->__destruct();
動くか否か以前に、こんなの書いたら末代まで笑いものにされるぞ。 上の例ではテストでechoしてますが
明示的に呼びたかっただけでdestruct呼び出したあとは
オブジェクトには用事はないので単にnullを入れることにしました
それでも呼べるようなので 制御文字が含まれているかを調べるためにpreg_match関数を使っているのですが、他に代替できる関数はありますか?(´・ω・`) >>582
あるけどpreg_matchがだんぜん速い
スクリプトでループを書くより、ライブラリ内でループさせた方が良い >>583
アドバイスありがとうございます。
がんばります(´・ω・`) str_replace(["\r\n","\n","\t"], "", $string)
一括で抹殺 バイナリかどうかのチェックならstrposでいい
if (strpos($line, '\0') !== false) インターネットに接続しない閉鎖ネットワークで使える
TinyPNGのような高圧縮の画像ライブラリって無いでしょうか?
TinyPNGは外部サーバーに接続するので… PNG-8にしてるだけなんじゃないかな
Imagickが使えるならImagickでできるはず
それかこれ試してみるといいかも
https://pngquant.org/ 左の入力例に対して、変数の中身を右のように変化させたいです
+1 | 1
+2 | 1 2
-1 | 2
+3 | 2 3
現在は以下のプログラムを使用して、配列変数poolの添え字に保存しています
しかしこの方法は処理に無駄があると思うので、もっと良い方法を教えてください
if ($operator == '+') $pool[$operand] = 1;
else unset($pool[$operand]); >>590
例のパターンが少ない
+1 | 1
-2 |
や同じ項目が複数あった場合どうしたいのか分からない ・オペレーターが + のときは、そのオペランドは必ず存在しない
・オペレーターが - のときは、そのオペランドは必ず存在する
という前提でお願いします >>590>>592
unsetって変数の破棄じゃないの?
array_shiftでは?
それ以上の最適化はあるかもしれないけど、思いつかない
ってかよほど重い処理でも無い限り、やらんでも良いと思う
そもそも処理というより仕様に無駄がある
>・オペレーターが - のときは、そのオペランドは必ず存在する
なら、マイナスの時は数字は不要だろう
+1 | 1
+2 | 1 2
- | 2 >>590
その方法で時間効率はかなりいいと思うけど
メモリ効率が気になるならハッシュテーブルか赤黒木でも作れば?
ただPHPの連想配列の実装によってはその方法でもハッシュテーブルでも変わらない気もする そろそろWebSocketに手出してみようとおもうんだけど
どれ使えばいいかな?Ratchetの記事が多いようだけど
おとなしくサーバはnode.jsにしたほうがいい?
https://postd.cc/websocket-shootout/
当然のようにPHPは入ってなかったけど
ここに入れるとしたらRuby並みのパフォーマンスになるのかね PHPでhttp以外をやるのは面倒臭そう
ajaxですらダルいのに
バックグラウンド実行になるからなあ
いや、やったことないから知らないけど 正直なところperlだけどMojoliciousがWebSocketの扱い楽だった アドバイスをください。
件名、本文、メールアドレスだけのメールフォームで入力値を検証する時、これは検証した方がいいというのがあれば教えてください。
・文字エンコーディング
・制御文字
・文字数
・未入力
・メールアドレスの形式
よろしくお願いします。 要件次第だが文字エンコーディングや制御文字はいらんだろ >>598です
アドバイスありがとうございます。
今回は自分の勉強のために調べていました。
文字エンコーディングや制御文字については参考書で検証した方がいいとあったので検討していました。
覚えることが多いですが頑張ります。
ありがとうございました。 フォームを使う送信者が誰なのかチェックするとか、悪用されないように対策するとか
フォームからサーバーに送る際にtslとかで暗号化するとか コードは頭使って考えた方が良いと思うけど、
セキュリティなんかは考えても分からん事が多すぎるからさっさと聞いたほうが良い
というかFWに投げたほうが良い。生兵法は怪我の元だ >参考書で検証した方がいい
ログイン処理とかならまだわかるが本当にそう書いてたのか?
よくわからんけどとりあえずやっとけみたいな参考書は参考にはならんのですてとけ >>605
徳丸本を買ってきて頭から順にチェックしていけばよいよ この程度ならどれを検証すべきか調べてる間に
検証した方が早いと思うのは俺だけだろうか 文字コードって何か検証することあるのか?
変換するだけじゃない?
今はBase64にすればutf-8だって行けるでしょ 609みたいなのがいるからPHPerはばかにされるんだろうな…
文字コードチェックの必要性なんか大昔からずっと言われてるだろ
http://gihyo.jp/dev/serial/01/php-security/0019
605の言う通り、こういうやつはFWに丸投げした方がはるかにマシ
自覚のないやつが一番たち悪い PHPの文字コード変換が微妙にバグっぽい挙動なの何とかして欲しい 付けざるを得ない設計思想ではあった
ただ、あれは大失敗だな >>615
アロー演算子はphpだけじゃないだろう
最初に自走したのはjavaか? ->はCの構造体のポインタからメンバーにアクセスするときの演算子だろ?
Cではポインタじゃなかったら.でいいんだが、
Perlでは.は文字列結合演算子だからな
いや、お前らが話しているのはラムダ式のことなのか? PHPはタイプ量多いが明示的でわかりやすい気がするな
今の言語はfunctionがfnだもんな 今更変えられないのかな
function使用頻度非常に高いから何とかして欲しい 通常は補完でするっと入力するから
多少の長さは気にならないかな ていうかなんでfunctionなんて必要なんだっけ? 定義かどうか分からないからだっけな
functionがないと何かと混同するからだったはず mysqlにコネクションプールが無いのは何故なんだぜ?
PHPは全リソースをリクエスト終了時に解放するからって言うけど
遅いでしょ?
パーシステント・コネクションは
コネクションプールとは無関係な別機能だった 単にphpのプロセスが死ぬまで接続を維持し続ける機能らしい
異なるphpプロセスでコネクションを共有する機能ではない
PDOには最大数の設定はない
また、phpがエラーになるとテーブルがロックされたままになったりする
mysqliはPersistentでもクリーンアップを行おうとする
ただし性能と引き換え ソースファイルのBOMのせいでクッキーが使えないバグが出て原因究明に苦労したぞ
BOMを付けるエディタが悪いんだがPHPの側もどうにかしろ
というのは頭悪い主張ですかね・・・ >>629
BOMのせいでクッキーが使えないなんてことあるの!? >>629
それ具体的にいつの話?
7.2環境で今確認したら、UTF8のBOM付きとBOM無しが混在しててるんだが普通に動いてる
モジュール部分の大半はBOM無しだっだが、デザインとか外観の部分はBOM付きで動いてた >>630
BOMがphpタグの外のテキストと見なされるから、
あらゆるテキスト出力より前に呼び出す必要があるsetcookieが動作しないのよ。
>>631
未だ現役だが古い5系のサーバーの話。
7系はBOMがあっても平気なのか?
ちなみに5系でもWindows版は平気らしく、
XAMPP環境で開発していたソースファイルが
なぜかサーバーに上げると動かなくなるから、
しばらくさっぱり意味がわからなかった。 lambdaとかcloud functionにphpがない理由って需要ですか?
それとも用途が少ない? PHPはいずれ導入されるが導入時期は他のよりあとにされるってのは
この手のクラウドではよくある話
需要がないといったらそのとおりなのだろう
PHPの用途は小規模向けであるのでスケールアップの必要がない
VPSなんかでもっぱら使われるのでは PHPって組み込み関数とか標準ライブラリ多過ぎない?
仕様も完全に固まったとは言えず、破壊的変更がちょこちょこあった
ライブラリ毎にバージョン上げる事も出来ないので毎回リスキーなビッグバン的アップデートになる
Goとは全く逆だよね
Goへの誤解について
http://golang.rdy.jp/2017/12/20/go-fact/
Goは機能追加の優先順位が
「ライブラリ>>外部ツール>>言語仕様」
というのを徹底しています。 課題を解決する方法にいくつかの方法があれば より優先度の高い方を選びます。
おかげで、Goを気に入ってから5年目だけど その間、変化した言語仕様はごく小さな変更数点しかありません。 どこらへんがphpは小規模向けで、pythonやgo、node.jsと違うんですか? >>636
かなり多い
要はwebでぱーっとなんでも出来る言語て立ち位置
実際本当に便利
pythonも2→3で凶悪な変更があったから、あまり他言語を強く言えない
Goはバージョンアップについてはよく知らない
phpはバージョン5の利用者が多いが、サポートが切れた
Xデーがそのうち訪れるかな
>>637 >>637
ぱーっと作れるのでとにかく利用者が多い。業者も多い
とにかくwebに特化していて、FWも非常に多い マルチスレッドにもろくに対応してないのがPHPの現状
pthreadっていうモジュールがあるにはあるが不便 これ見るとPHPでは不便以前に使えないのも同然では?
https://www.webprofessional.jp/parallel-programming-pthreads-php-fundamentals/
Shared-Nothingアーキテクチャを採用しているPHPでは
スレッドが使えたとしてもリクエストの度に生成する必要がある
スレッドは生成も切り替えも重いから却って速度が遅くなる
使えてもなんの意味も無い >>640
マルチスレッドが必要に思えないけど、
使い所あるんけ 延々と応答しないリソースをどうやって待つかって問題にぶつかる人はいるかも
待っている間は他のリソースの応答を処理したいとか >>643
それ非同期I/Oで良くね?
スレッドを使う必要がない
同じくスレッドの無いJavaScriptもそうしてる
Node.jsはPHPのようなシェアード・ナッシングではないが >>644
非同期I/Oは応答があったときに、手が空いていたら処理するだけでしょ?
別の処理が走っていたらそれが終わるまでは待つことになる 別プロセスでスクリプト起動してリソースの要求から応答待ちまでやればいいじゃん そもそもそんな応答がめちゃくちゃ遅いリソースを扱うことってあるか? DBの事なにもしらない時に作ったプログラムがそうだったな
インデックスなしでDB構築しって、検索するだけで30秒ぐらいかかってたw
ついでにセキュリティホールの塊
・・・はいいとして、少しでもまたせたくないってことじゃね
webは2,3秒待たせるだけでも人がどんどん減る スレッドやプロセスは重量級リソースだから
そんな大量にそもそも生成できないだろ?
1秒で1000スレッド生成+切り替えとか無謀
非同期I/O基本にして
足りなければサーバー増やした方が
利用効率が高い
その証拠にPHPのようなプロセスを大量に生成するスタイルを
他言語のフレームワークは使ってないw 外部サイトのリソースとかならあるんじゃね?
ウェブスクレイピングしてるとかなら応答にも時間が掛かるだろう
それも複数ページ、もしくはページの画像などのリソースも取得するとなれば複数スレッド立ち上げたくなる気持ちもわかる。
DBの検索時に別スレッドで何かするってことはないだろ
まぁ複数人で使うプログラムに一人当たり何スレッドも使うとサーバーが死ぬけど
管理者一人だけが使うようなプログラムなら100スレッドだろうと使っても良いだろう 人間という応答が遅いくせに即反応してやらないとすぐにイライラしちゃうリソースがあってだな
UIとバックグラウンドはスレッド分けたい時もある
javascriptもそれができるようになったし Webサーバーではpthreads使えないよな
CLI専用
手動でコマンド実行された時か
定期的にコマンドを実行するバッチ処理内でなら使える
時間の掛かる処理を予めやっておいて
DBに結果を入れる
WebではDBから取得して表示するだけ ちょっとマジで聞きたいことがあるんだが、cgiからブラウザに対してCP932でHTMLが出力されている。
もちろんヘッダも正しく指定されている。
んで、そのHTMLの中に、
<IMG SRC="あいうえお.jpg"> などと言う日本語のファイルが指定されているわけだ。
その日本語のファイル名も、CP932だ。
んで、ご丁寧にブラウザが自動でURLエンコードしてくれるようなのだが、
%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A.jpg
となるのだ。これは "あいうえお.jpg" をUTF-8として解釈した時の文字コードだ。
俺としては %82%A0%82%A2%82%A4%82%A6%82%A8,jpg (CP932の文字コード)となってもらわなくては困る。
聞きたいことは2つで、これを解決するにはどうしたら良いか?
もう一つは、ブラウザごとの仕様によりこの挙動は違うのか?
の二点だ
よろしく頼む >>653
あっちこっちに同じ質問するなカス野郎!
なにがよろしく頼むだ
テメーは一緒悩んでろ PHPのソースからコメント取り除きたいんだけど、何かお手軽な方法ないかな
php -wだと改行もなくなっちゃうので、エラーを追いづらくなるから改行は残したい 正規表現で置換とか?
コメントを捨てる理由は良く分からんけど 皆さんはどうやってアクセスログなどを作成してるんですか? >>659
俺はアクセスログは作成しない
たぶんしないと思う
しないんじゃないかな
apacheやnginxにしかできないこともあるから アクセスログはサーバーが自動で作ってくれるからそれに任せてる >>660
>>661
参考になります。
ありがとうございました。 掲示板やチャットに書いた人のIPとプロバイダは保存してある >>663
当たり前だろう
保存してない完全な匿名掲示板なんて無いよ >>665
?
2chは最初からip全部記録してるよ
大昔から普通に逮捕者でてるでしょ 最初はしてなかったから運営者が責任とらされたんじゃなかったっけ ネオ麦茶思い出した
あれ以前の事件はもう覚えてないな 永久保存なんてしてんの?
投稿内容と一緒に保存してるだけで、いらなくなったら消してくでしょ 永久保存なんて現実的には無理だから求められないはずだが
何年間保存しろみたいな義務ってあるんだっけ?
うちのアクセスログ半年ぐらいで古いのから消えてるぞ見てないから知らんけど多分 GDPR的には永久保存はNG
アクセスログのIPも個人情報だかららしい GDPR「消せ」
日本の警察「出せ」
ってなったらどうすればいいの? GDPRはよく分からない
なんか具体的なことは書いてないらしいし
ログを永久保存しててもセキュリティのためだって言えば大丈夫? GDPRなんて無視一択だろ どこの誰だよって感じ
ここは秘境の地ジャップランドやぞ 治外法権やぞ error_log() とか fopen() とかあった気がする https://github.com/symfony/symfony/issues/8703#issuecomment-323608103
https://stackoverflow.com/questions/12378644/how-can-i-retrieve-the-current-error-handler
PHPのset_error_handlerってワケワカメな仕様だよね
・set_error_handlerはハンドラを一つしか設定出来ない。複数使うためには自分で元のエラーハンドラを呼ぶなど工夫が必要。上手くやらないと元のエラーハンドラは動かなくなる。
・現在のエラーハンドラを変更せずに取得する方法は無い。set_error_handlerが元のエラーハンドラを返すので、何か適当なエラーハンドラを設定後にrestore_error_handlerを呼ぶ必要がある。
エラーハンドラのネストはややこしくて
SentryがSymfonyのエラーハンドラを上書きしてしまい、動かない原因になった エラークラスに手をつけるとあっという間にぐちゃぐちゃになる
特に7.0で仕様が大幅に変わってからは何もしてない。全部FWに丸投げ error_get_lastとerror_clear_last何回も呼ぶほうが賢そう Apacheの減少が続く - 2019年2月Webサーバシェア
https://news.mynavi.jp/article/20190301-779845/
Apacheのオワコン化が止まらない >>682
otherが伸びてるグラフあるがなんなんだ? nginxのシェアをまるごととってるとなると
nginxのフォークかなんかと考えるのが妥当
というわけで調べたらNGINX Unitなるものがあるらしい nginxって静的コンテンツならいいだろうけど、
phpを使うならNginxの下にApache入れて処理してやる必要があるだろ
nginxはwebサーバーの元締めみたいなヤツだからシェアがあがるだけじゃね? すまんけどPHPについておしえてくれない?
PHPってどこで動くの?
ちなみにCGIは知っていて、
クライアントからサーバーにリクエスト(アクセス)があった場合、HTTPDが特定のプログラムを起動して、そのプログラムから出力を受け取る。
HTTPDは受け取った出力を必要なら整形してクライアント(ブラウザに返す)。
PHPの場合、どこで動いていて、どういうふうに呼び出されて、どういう風に出力を返すの? PHPマニュアルにSAPIについてちゃんと書いてある項が見当たらないんだけど, そもそもそういう項はないのか単にマニュアルの調べ方が悪いだけなのか
とりあえず ttps://www.slideshare.net/do_aki/php-sapi-zendengine3 この辺読んでみるのがええんちゃう lzma形式の圧縮ファイルを展開できるスクリプトって無いかな ajaxで複数のオブジェクトを同時に送ることって出来るの?
jsonデータとFormDataを同時に送りたいんだけど 掲示板等の機能を持った半登録制のウェブサイト作ってるんだが
ROMは誰でも出来て
書き込んだり新規トピックを立てようとするには垢登録が必要な仕様にしてるんよね
書き込んだ人のIPアドレスやプロバイダはどの様に記録したらいいかね?
ipぐらいなら平文でもええのかな?
キーワード使ってワードを暗号化出来る関数とかなんかある? >>692
application/jsonとmultipart/form-dataを一つのリクエストで送りたいのか?
contentTypeはリクエストにつき一つしか指定できないのにどうしろと
別々のリクエストにして両方のPromiseを待つなら出来るが >>692
↓な感じでまとめて送り、受信先でパースすれば?
[
{contentType:"application/json", content:"送りたいjson"},
{contentType:"multipart/form-data", content:"送りたいFormData"}
]
>>693
書き込みに垢登録が必要なシステムならログイン時にアクセスログの記録をしといて
書き込んだ時点では、アカウントのIDを記録しておけばいいだろう さして重要な個人情報でないIPやプロバイダをわざわざ暗号化する必要もないだろ
可逆じゃないと警察から照会があったときとかも意味もないし
そもそも暗号化のためにさくリソースが無駄
というか普通はhttpdのログにも記録される情報だろうそれ httpdはリクエストに対する記録しか残さないのでサイトの中で何をやっていたかは不明です IPや逆引きホスト名に関しては二重取りになり
しかもそっちのログは暗号化もなにもされてないってことを指摘してるだけで
さすがに投稿日時ぐらいは記録するのは想定してるよ phpやったことないんだけど、cgiとはどう違うの?
httpfとphpの関係ってどんな感じなの? アクセスしたURL見りゃ大体何やってたかわかるじゃん URLにhttpdの仕様なんて書いてなくね・・・? >>700
CGIはオワコン
リクエストの度にコマンドを実行する方式なので、遅すぎる
ApacheはWebサーバー自体にPHPモジュールを含んでいる
CGIと比べたらスクリプトの実行は速いものの
Apache自体のWebサーバーとしての速度はnginxなどに劣る
また、Webサーバーの中で動くので分離度が低く、セキュリティ上不安がある
FastCGIは両者のいいとこ取りみたいな感じ
一度立ち上げたプロセスとソケットで通信するようにして、プロセスを再利用可能にしてCGIの分離性を保ちつつ
それなりの高速さを実現した
この方式だとApacheだけでなく、nginxも使える 何で初心者お断りのスレで、phpやったことない初心者がいるんだよ
スレタイも読めねーのか? WSGIはWebサーバーとアプリケーションサーバーを繋ぐという点はFastCGIに似ているが、FastCGIは言語を問わないのに対し
WSGIはPython専用
FastCGIより上位の層にあり、抽象度が高いらしい
FastCGIが通信の仕様だけなのに対して
WSGIはワーカープロセスの制御も仕様に含むとか
そのため、FastCGIを利用したWSGI実装もある >ApacheはWebサーバー自体にPHPモジュールを含んでいる
Apacheがサーバーなんじゃないの?
Apache自体にPHPモジュールを含んでいるってこと?
モジュールを含むってどういう意味?
んでそれがなんで速いことになるの?結局インタプリタと同類だからcgiと同じじゃないの?
もしかしてプロセスが常駐してるの? >>705
前から思ってるけどphpくだスレがないからここに来るしかない
初心者お断りって書いても意味ないぞ >>709
あぁ板が違うのか
気づくわけねーだろハゲ PHPは設定が多過ぎて本番環境で動かす時の設定をどうすれば良いか分からない
セキュリティはともかく性能的にはどうチューニングする?
その設定で本当に速くなってる事はどう確かめる?
Webサーバーはnginxにしている 教えてください。
アップルのウェブサイト(https://www.apple.com/)のContent-Lengthをget_headers()で取得すると値が53394であるのに対して、
ブラウザでウェブサイトを表示してウェブマスターツールでContent-Lengthを確認すると8222になっているのは何故ですか?
変なことを聞いていたら申し訳ないです(´・ω・`) こちらの勘違いでした。
質問を〆ます。
ありがとうございました。 httpで接続するとphpは実行されるんだが
httpsで接続するとphpがそのまま表示されるんよね(´・ω・`)
これは何が問題なの?
初めてSSL化したからよく分からんとよね サーバ再起動したら上手く行ったわ(´・ω・`)
すまんな自己解決した 指定日から指定日までの「年月」一覧を
もっとも簡潔に角煮はどうしたらいいかな WordPress、PHP 5.2から5.5までのサポートを終了
https://news.mynavi.jp/article/20190322-793657/
> これで、WordPressがサポートされる最も古いバージョンはPHP 5.6となり、WordPressを利用する場合にはPHP 5.6よりも新しいバージョンを使うことが必須となる。
5.6もクソ古いんだからね切れよwwwwwwww サポート終了ってだけで別に使えなくなるわけではないんじゃね
あえて使えないようにPHP5.6からの関数やら機能やら使ってるのかもしれないが 5.6サポート切れた時、色々な中小企業のHPが見れなくなるのだろう >>732
それはphpのサポートだね
今回はwpのphp5.6に対するサポートの事だよ だからサポート切れた言語を生かすなっていいたいわけ そもそもサポート切るなよ
サイト運営者は一生アップデートしなきゃいけないのか?無理だろそんなの そうだよ
アップデートというか、数年に一回作り直しになる そうなんだよなあ
でも開発だけで保守を依頼せず放置のクライアントばかり
世の中にそういうサイトいっぱいあるんだろうな、そして攻撃されて流出やらやらかす
俺は知らんぞ そんな所はそもそもセキュリティパッチの適用すらして無い
意識の低いところだろ? ブログサービスなりグーグルサイトでもつかっとけよな 当面は大きなセキュリティリスクが見つかれば有志がパッチ作るだろう パッチ当てるのもアップデートするのも手間は変わらんだろ
有志とかいう非公式のパッチに変なコードが仕組まれていたらと思うと
とてもじゃないが公式が出すアップデートを適用した方がマシ >>741
日本人なら信用できるだろ?
未だにWindows2000とか日本人が非公式でパッチ出してるけど
余裕で信頼されてんぞw >>744
もうvbaは脆弱性にもならないんやなって PHP shares three of Ruby’s top 4 most common CWEs, with XSS at the top. However, PHP is the only language with SQL Injection (CWE-89) vulnerabilities featured so prominently at the top of the list. SQLインジェクションは使う側の問題では?
それだけPHPユーザーはアホが多いってことか PHPのなんらかのバグに起因する想定外の動作でそうなるっていう話で
ユーザに問題があってっていう話じゃないだろ そうじゃねえだろw
PHPの動作自体に問題があるんじゃなくて
パラメーター化したクエリーを使わないアホが多いだけだろ
言語設計自体が駄目だからそういう糞コードを書くやつがあとを絶たない
There are PHP haters out there that say that some the design flows and bad practices built into the language make it hard to write secure code and maintain a high level of secure coding standards. XSSはユーザーの入力にスクリプトがあるかとかをチェックせずに
レスポンスとして返す事で起こる脆弱性
HTTP処理等が言語にくっついてない
RubyとかにもXSSがあるとされているのは
そういう事 もうめんどくさいからフレームワークのORMしか使わないから、インジェクションなんか起きようがないなうちの場合 WordPressはORM使ってなくね?
パラメーター化クエリは流石に使ってると思うが 動作を少しでも軽快にさせようというのはわからんでもないが
htmlspecialcharsには草 PythonとかRubyあたりの雑魚と速度を比べて勝ってるからってなんだ
GoとかJVMに勝ってみろ
swoole?phpで非同期とかこわい PHPとGoって何が違うの?LIGが自社サービス開発にGo言語を採用したお話
https://liginc.co.jp/284306
PHP遅すぎwwwwwww コンパイラと比べて遅い早いとか何初心者みたいなこといってはしゃいでんだ?
Goなんて特段早くもねえよ TechempowerのベンチでもPHP遅い
他の動的言語も遅いが c#に比べたらgoなんてゴミだよ
VSとの組み合わせは最強すぎる 速度で言ったらphp7-jitはphp7の25倍速い >>766
CPUをぶん回すタイプのWebアプリケーションは少ないため
JITになっても大半のアプリは高速化はしない
それよりシェアードナッシングを止めたほうが
効率良くなるが現在も大半のアプリがそれに頼って作られている 徳丸浩さんの参考書で勉強している者ですが、次のようにセッション変数のトークンを確認しているのはなぜですか?
PHPは勉強中のため変なことをお伺いすると思いますが、どなたかお教えください。
if (empty($_SESSION['token'])) {
$token = bin2hex(openssl_random_pseudo_bytes(24)) ;
$_SESSION['token'] = $token ;
} else {
$token = $_SESSION['token'] ;
} >>767
ほほー、じゃあ想定してんのはwebアプリ以外なんだろうかな
phpはwebのイメージだけど >>769
WEBアプリならなおのこと、エンジン部分は基本使いまわしなので
JITなら案外と高速化しまくると思うよ >>770
wordpressの速度は大して変わらないと>>764にある >>768
トークンなかったらその関数で作って、トークンあればそいつを使うだけじゃん >>768です
>>772さん
アドバイスありがとうございます。
おっしゃる通りなのですが、例えば先のコードから次の部分だけを抜き出した場合
$token = bin2hex(openssl_random_pseudo_bytes(24)) ;
$_SESSION['token'] = $token ;
この場合だと、リロードするたびにトークンが変更されます。
参考書には if() と empty() でトークンの有無を確認していますが、上の抜き出した部分だけでは不十分だったのかなと思いまして。
変なことを言っていたら申し訳ないです。 トークンの有無を確認しないなら、何のためにトークンを発行してるんだ? コードよりトークンがどう利用されるのか仕組みの方を勉強することだわな >>773
参考書に有無の処理書いてんのになんでお前が勝手にソース抜き出して毎回上書きされて困るとか吐かしてんだよ
参考書のとおりにやりゃいいだろ
アホなの? >>768です
お返事が遅くなり申し訳ありません。
>>774さん
ご指摘の通りです。
考えが及びませんでした。
>>775さん
アドバイスありがとうございます。
仕組みから理解できるよう努めます。
>>776さん
おっしゃる通りです。
これから参考書を熟読します。
>>777さん
ありがとうございます。
皆さん様々なアドバイスありがとうございました。
早く1人前になれるよう頑張ります。
ありがとうございました。 外部サービス連携みたいなやつあるじゃん
OpenIDっていうのかな?あれって審査とかいらない?
例えばYahooのログインIDで自分のサイトにログインさせたりとか出来る?
なんかPHPでその変簡単に構築できないっすかね? >>780
oauth認証でぐぐれ
簡単にできるよ リフレッシュトークンはサーバに保存するか
Cookieに入れる場合は暗号化するようにしよう GIANT ESCAPE R3 2017年版で質問です
ホイールはwh6700に換装しています
リアをシングル固定ギアにしてみようと思ったのですが、
どういった規格で探せば良いでしょうか?
メルカリで300円でギアを買ってみましたが、合いませんでした(切り欠きがない)
https://i.imgur.com/Hpelflv.jpg ありがとう!
RFCあるみたいだから早速呼んでみます phpにもOAuthのライブラリあるから
車輪の再開発は必要ない MySQL(mariaDB)のbit型のカラムに、PHPのPDOを使って値を入れることは
不可能なんでしょうか?
INSERT INTO tb (flag) VALUES (:flag);
flagはbit型で:flagはプレースホルダー
:flagの置き換え値として(int)1やらtureやら入れてもエラーになります
まぁbit型やめてtinyint(bool)型にでもすれば良いのでしょうが、何か解決策がありましたら
教えてください いじめはどこの町にもあるが島本町は特に酷い
「大阪府三島郡島本町のいじめはいじめられた本人が悪い 」なんて
公言する町は他に無い bindValue(':flag', 0b0001, PDO::PARAM_INT) レスありがとうございます。
bindValueを使って明示的にINT型を指定しないと、INT型の値が勝手に文字列型に
変換されてしまうのですかね。 echo ( string $arg1 [, string $... ] ) : void
↑の$arg1のargって何かの略語なんかね オーギュメントか、ありがとう。
ちょっと牛肉買ってくる augmentはオーグメントだがargumentはアーギュメントの方が近いだろう
auじゃなくてarなんだしarcをオークとは読まんじゃろ PHPで10〜20バイト程度のテキストを暗号化するときって
おまえらはなにを使っている? mozilla/node-client-sessions: secure sessions stored in cookies
https://github.com/mozilla/node-client-sessions
Implementation of Mozilla's node-client-sessions in PHP
https://gist.github.com/Metevier/dee26ce4c2eb9ba0231f690bf9f5b344 レンサバでwhile(1){ sleep(1); }なPHPを、
をexecでバックグラウンドにして呼び出すPHPにWebからアクセスしてみたら、
うっかり起動してしまって、
pid調べた後、同様にexecでkillすることで止まったんだけど、
これってレンサバ的にはどうなんでしょう?
バックグラウンド処理って禁止してるイメージ強いんだけど。
もし急に止められたりしないのであれば、cron使えないから代用にしようかなと・・・ レン鯖は大抵実行時間が一定以上でに強制終了だろう
30分くらい容認してくれるところもあれば、3分程度で終了してくるところもある
cronのようなものを使いたければ、Google Apps Script (Googleドライブにあるマクロのようなもの)で
特定時間をトリガーにしたスクリプトを使い、UrlFetchAppでそのスクリプトをキックしたほうがいい。 >>810
>>811の通り、勝手に止まる
年中動かすと間違いなく怒られるからやめとけ
ちなみにcronがない場合は「疑似cron」というものがある
例えば12:00に動かしたいものがある場合、12:00を過ぎてから初めてアクセスしたらcronが動くというもの
アクセス数が多ければcronっぽくなるが、アクセス数が少ないと13:00になったり14:00になったりする >>811-812
ありがとうございます。やっぱだめなんですね。
おふた方のアドバイスを元にやってみます。 JIT採用のPHP8が出たら、みんなPHPに戻ってきてくれるかな PHPを使う理由ってレン鯖がPHPしか使えないからとか、
PHPで作られた既存プロジェクトの改修とか、そういう理由じゃない?
新規で作るならPHPを選ぶ理由はない気がする PerlとPHPが共存してた時代にどっちやるか迷ってPHP始めたけど
まあ今からなら初心者でも絶対違う方法選ぶだろうね
環境構築に躓いてPHPに挫折的に入門してくる層を取り込めれば良いと思うわ >>818
Rubyには勝ってるのか
WebだとやっぱJavaかPythonにいくのかな新規の人は Pythonはphpより遅いだろ?
それとも速度上がった? 今や速度はマシン側の進化やチューニングが重要で
無駄な処理が多い言語でよほどそこで足引っ張ってない限り
言語の速度にはこだわらないってスタンスでいいと思うわ
それよりも扱いやすさと汎用性と安全性のバランスがとれてるもの
googleとか見てるとそんな感じだし
訪問者が読み込みを放棄して他所のサイトにいってしまいかねない
WordPressは例外中の例外
PHPの場合JIT実装にリソースさくならWordPressどうにかしたほうがいいわ 今は仮想化ばかりでマシン側なんか意識しないだろ
PHP 7.3とPython 3.7.2の速度比較じゃPHPの全勝
https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/php.html
Pythonは遅すぎだし、DB接続には追加パッケージ必要だしで
WEBでは使わず、ローカルでなんかさせたいときの言語って感じがするね Wordpressは色々問題があるが
セキュリティとかどうでも良くて
基本的に何でもかんでも自由にアクセス出来るオープンビッチなのを先にどうにかした方が良い
自由にphpファイル作れるのがまずあり得ない
イミュータブル・インフラストラクチャー? GitOps?何それおいしいの?
みたいな感じ? >>825
まぁ自由度高すぎるのは考えものだわな
function.phpももう少しルール決めておいてほしかった >>823
WordpressはPHPで作られているというだけでPHP本体の開発とは何の関係もないのだが
JITはそんなに重要ではないがFFIみたいな割と未来があるものも開発されてるしな >>823、>>825-827
CMS用途でWordPressを選ばないならdrupalになるだろうが、
これもPHP必須。 >>827
そうはいってもPHPが存在する理由なんてWPがあるからみたいなもんだし
移植可能なWPのようなソフトウェアを
今からPythonでスクラッチから開発したら
いくら素の性能がまさるとはいえPythonで作ったWPモドキに軍配があがるだろう WPはプラグインとテーマの数が半端ない
それが使えればpythonだろうがCだろうがなんでも良いぞ PHPの存在理由がWPだけというなら
基本的にWeb開発はJava一択ってこと?
RubyやPythonがWeb開発でPHPより勝る理由はそうないだろうし フルスクラッチでなんでもかんでもやるならGoは悪く無い なんでJavaがだめかというと冗長でとにかくくどい長ったらしい。
環境構築もそれなりに大変、コードの保守も大変なのであえてJavaを選ぶのはドM。
その点Pythonは実にシンプルで、ドキュメントが多く初心者向けで覚えやすくPHP並に簡単。
ただしFW前提の開発になるので、FW含めて覚える感じになるが。
環境構築もPHPほどではないが比較的容易な方。
スマホ開発から入るエンジニアはJava触るもんだから、
馴染みのあるJavaでWebもやろうとなることはあるだろうけど。 PHP言語そのもののzend?よりもさらに前身のところの元開発者です。
ポインタを裏方化したくてオブジェクト指向(というかオブジェクト演算子の利用)ができること、
画像には基本的に書き込みしない、
文字列と数値以外は使わないこと、
変数型はソースを解析してそれっぽく扱うこと、
などwebも鑑みながらプログラミングを楽にできることを徹底したつもりです
一応他の言語に比べて予約語以外は覚えることに苦労する面をすくなくするように気をつけたつもりです 実際Railsも下火だしwebのバックエンド開発言語はベスト不在の混乱期に陥りつつあるね
フロントのトレンドサイクル馬鹿にしてる場合じゃないで
まぁワイはKotlinいったるやで >>837
こんばんは、トーマス
>>838
ワイはGroovy派 .Net Coreが来るだろ
Webサーバーも稼働率で言えばIISが一番多いし こういう転換期にPerlerたちはどこへ向かっていったのかな?
PHPerが向かうべき先はPHP8なのか、Pythonなのか、NodeJSなのか
はたまたLLからの脱却なのか webゆーてもクラウドソーシングで記事書かせてWPに上げとるのがほとんどやで。 MediaWikiっていうWikipediaを始めとするさまざまなwikiのエンジンでもPHPが使われてだな…
Wordpressだけじゃないんだよ・・・ Pukiwiki形式を取り込める今どきのCMSが出たら言語関係なく移るw wikiは記法が乱立しすぎ
もうちょっと統一するか変換するかしてほc wikiなんてwp利用者と比較すればミジンコみたいなもんだろ マークダウンはシンプル過ぎてメモにしか使えんw
アフィサイトに使えるくらい拡張したら一気に流行るだろ 今はリッチテキスト系の入力フォームが主流で構文直書きなんかしてないだろ みんなでやろうNode.js
みんなで移住すれば怖くない サーバーサイドとクライアントサイドが同じ言語だと幸せなんだよね
現実は難しいけど >>854
>SEOやアクセシビリティの点数も満点です。
頭悪すぎて読む気にならんわ >>853
それならブラウザでPHPを動かした方が良いよ すでにJavaScriptがあるのにPHP採用するなんてないだろ
そもそもサーバサイドの対応と違って難しいぞ
サーバサイドは開発者が選べばいいだけだが
ブラウザは結局ベンダー次第になるし
ユーザ任せのプラグインじゃまず普及しないだろう >>857
じゃあJavascript上でPHPを動かせば良いよ >>854 実際こういう記事が出てくるとWP導入するとこも減ってくるだろう >>854
これ静的ファイルを出力してるだけだろ
wpのプラグインにそんな機能持ってるのがあるのでフーンくらいにしか思わん Wordpressは環境を共有するのむずい
何でデータベースにドメイン名含む完全なURLが入ったりすんの? >>864
そりゃサブドメインとかでも同じDBで動かせるようにだろ
データベース一つで複数のサイトを運用できるようになってるんだから
ドメイン入ってないとどこのサイトのデータなのか判別できなくなるだろう WordPress3.0からマルチサイト対応だからな empty関数って何の役に立つ?
「empty($value)」と「$valueの真偽値」は丁度結果の真偽が正反対になるから
empty使わず変数の真偽値確認すれば良いのでは >>868
読みやすい
それを言い出すとほとんどの関数いらなくなるので・・・ >>869
可読性のための関数ということですか
たしかに!をつけるより読みやすいのかもしれませんな >>868
empty はnullか空白かゼロの時にtrueになる。それをor 条件で記述するのが面倒くさい
自分はデフォルト値を設定する時に使ってる >>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をまとめて空白にしたり、-を入れたりしたいときは使えるんじゃね? empty issetは先にシンボルテーブルチェックされる
プロパティなら__issetがトリガされるが__getは呼ばれない >>868
Notice: Undefined variable: value エラーが出ないように使ってる
explodeした時にセットされてないかもしれない配列を判定する時なんかに使う
if(empty($arr[19]))continue;
とか >>873
>>868
それは結局empty使わなくても!$valueでも同じって話では。
!$valueでもnull、空白、0、"0"はtrueになる。
ただ>>877の言うとおり変数自体が未定義のときもemptyなら警告が出ないってのは
確かに使えるところかも。 web フォームでは数字項目でも空白で入力できて
しまうからempty で空か判断できるのは便利だよ エラーメッセージ
ご指定のファイル public://media/2019/04/20/無題.jpg はコピー先ディレクトリーが正しく設定されていないため、コピーされませんでした。
ディレクトリーパーミッションが原因かもしれません。詳しくはシステムログを参照してください。
publicプロトコルってなんでしょうか? プロトコルじゃなくてpublic_htmlとか公開されてるルートディレクトリじゃねーの? オレオレエラーメッセージの詳細聞かれても
作者に聞けとしか publicプロトコルなんて無いぞ
オレオレプロトコルが存在する可能性はあるが、まぁ無いだろう。多分。多分な。絶対とは言ってないぞ >>883が正解だろうな
かっこつけてpublic://とかやっちゃういたいたしい作者なのだろう mb_check_encodingについてですが
普通はmb_check_encoding($var)のようにチェックしたい値を指定して使いますよね
しかし公式マニュアルを読んでみると
> var
> 調べるバイトストリーム。省略した場合は、 リクエスト開始時からのすべての入力が対象となります。
とあります
このvarを省略したときに、すべての入力が対象になるという部分が漠然としているのですが
すべての入力とは何ですか?
GET、POST、Cookieですかね、さらにはファイルアップロードも関係あるんでしょうか
この文字コードチェックは完全でないのは知っていますが、気休め程度にGETやPOSTで送られてきた
パラメーターを1つ1つチェックしていました
しかし引数省略してコールすれば一括して文字エンコーディングのバリデーションできるなんてこと
あるんですかね http://git.php.net/?p=php-src.git;a=blob;f=ext/mbstring/mbstring.c >>887
まあ、省略することは考えないほうがいいでしょう。
$_GETや$_POSTは配列を含む可能性があるので、
そのへん考えて、それらの入力値はarray_walk_recursiveのような関数を使うのがいいらしい。
http://gihyo.jp/dev/serial/01/php-security/0020 >>889
レスありがとうございます
やはり1つ1つチェックした方が良いのですかね
たしかに配列の場合もありますし、そのときのmb_check_encodingの挙動が
わかりませんしね すべてのとは$_FILES以外
配列は再帰で処理されるよ
すぐ上のリンクに書いてある
あとストリームだけじゃなくシーケンスも検証すべき 不正な文字エンコーディングによる攻撃って、何を心配してんのだろう?
mb_check_encodingなんて使ったことないけどな…
想定した入力値かどうかをチェックすればいいだけちゃいますのん? 何でmb版があるとかよく分かんない仕組みなんだ?
phpの文字列って
全部UTF-8で良いじゃん >>894
新規サイトはもちろんそう
古いサイトがこれまたね・・・ >>894
うちはezwebにもimodeにも対応しているよ imodeって今でもあるの?
hdmlとかもうマヂ無理… どうせ統一されないから内部表現はバイナリで良いという発想のため
そもそもunicode勢でもstringがutf8の言語なくない? mb_check_encodingの引数省略callで
$_FILES以外の入力の文字コードチェックできて
しかも配列の入力も再帰的にチェックされるなら
引数省略でお手軽に入力チェックした方がいいと
思うのだが何か問題あるの? どうせバリデーションしてんだろ?
とりあえず全部やるって人もいるけど
本当に必要なのか考えたほうがいい $_POST['name'] = "\xad";
if(!mb_check_encoding())
die('invalid encoding');
とやっても何も反応しなかった
mb_check_encoding($_POST['name'])
にすれば反応があった
引数省略はインチキくさいな… _ _ /
もっと |稼| ぎたい!! お金 |超| 大好き!! ./ ∧ ∨
 ̄  ̄ / /\ \ \
>'´', ∨>、 .┌、 ┌┐ __ __ __ l / ⌒介トム`<∨
〈 .∨ ./ ̄',| ヽ| ├ ┤ | ! | / ',l l ,.ィ兮、 ,イ^兮∨
∨ / △∧ .| | |__| └ △ ', l ^ー‐'", `¬'''"∨
∨ / ,‐、 ∧_ヘ_」 |__|─‐ ,-、 ', ', `' ,, ∨
∧_/ ̄  ̄ └‐┘ '─' ⊂⊃ ゝ `', ̄/ /}
/7、ヘ¨ ⊂⊃ ⊂⌒7\>、 ‐' x< /
高収入求人情報 ム/ ヽゝ ⊂ニ⊃ ∠/ { //`´ / j }/ /
ゝ l/£`ーイ / /
ヽ ゝ'⌒>‐' /
`l \ >>889
この記事見て思ったんだが
$_SERVERもバリデーションする必要あるもん?
改竄される可能性あるのかな 例えばHTTP_USER_AGENTなんかは簡単に偽装できるからね
使わないならバリデーションの必要ないけど何かで使うなら普通にやる PHPerなんて、無意識にhtmlspecialcharsをencoding指定でちゃんと不正な文字か出力時にチェックしてるはず。 個人叩きはしたくないけど、
こんな共感出来ない記事書いてたっけなと不思議だったが、人違いだった。
あれは大垣さんじゃなくて徳丸さんだったな。
どっちもPHP界じゃメジャーな人だった気がするが。 HTTP_USER_AGENTやHTTP_REFERERに、クライアントが制御文字を仕込むことって
可能なんですか? Chromeの拡張機能にユーザーエージェントを偽装できる奴あるじゃん 偽装はできましょうが、Fiddler使ってUser-Agentに改行文字やらタブ文字を仕込んで
送信してみると、Bad Requestエラーが返ってきますね
Apacheがはじいてるんでしょうか
$_SERVER['HTTP_USER_AGENT']に制御文字を伝えるのは難しいってことですかね おっとTabはセーフでした
改行はBad Request行きですね ヘッダに制御文字をセットして送れるようなアドオンがあった気がするから
多分そのままやろうとしてもブラウザ側でなんかしてんじゃないかな オレオレWebサーバとWebブラウザで
制御文字受け付けるソフトウェアを作ることはもちろん出来るが
そもそもRFC違反なので
まともなWebサーバやWebブラウザであれば
そのへん対応はしてる じゃ結局$_SERVER['HTTP_USER_AGENT']のバリデーションは
mb_check_encodingかましておけば良いということで ファイルの重複登録をさけたいのですが
ファイルのハッシュ値計算ってどうやるんですか?
md5(file_get_contents('a.jpg'))
こんなんでいいんでしょうか?
jpgならまだいいんですけど
これが例えば動画とかだったらメモリとか大丈夫ですかね? sha1_fileのほうが良くない?
でもハッシュを格納して保存しておくコストとかハッシュ計算して比較する時間より、
直接比較したほうが早かったから直接比較してるな…↓みたいな感じで
〜2MBくらいまでのjpeg or pngファイルの話だけど
(binary)file_get_contents($path1) !== (binary)file_get_contents($path2) >>920-921
どうもありがとうございます。
専用関数があったのですね。早速試して早い方を採用してみます。
binaryへのキャストなんて機能あったんですね。知りませんでした。
新発見に感謝です。 教えてください。
header関数とini_set関数を記述する場合、どちらを先に記述すればいいですか?
よろしくお願いします。 headerはスクリプト中で初めてechoする前(htmlに埋め込む場合はそれより前)に入ってればいい
try-catchブロックで最後の最後にheaderでエラーページに飛ばすとかいう処理は認証ロジックでよく書いたりするのでは? >>923です。
>>924さん
教えてくださり、ありがとうございます。
まだ未熟なため、そこまで頭が回りませんでした。
改めて、ありがとうございました。 LAMP環境でPHPを保守運用するときのアドバイスお願いします mysql_secure_installationを実行しておく 令和元年をイジメ撲滅元年にしましょう
>大阪府三島郡島本町のいじめはいじめられた本人が悪い
>みんなそう思ってる
>誰もいじめの被害者に同情しない
>はよ死ねイジメられるクズ
↑
島本町民以外の皆さん
イジメは卑劣な行為なので隠ぺいするのは学校や加害者側に後ろめたい気持ちがあるからですが
いじめがあったことを認めたうえで被害者に責任をなすりつけるなんて最低最悪ですね
イジメ撲滅は島本町から
島本町は自浄能力のない腐った町なので
外圧でイジメを撲滅しましょう
大阪府や大阪府教育委員会は
島本町みたいな糞町を放置しておくのか? 訪問者がまだいるかってどうやって検知すればいいですか?
非同期通信で30秒おきぐらいにクライアントからサーバに通知する方法は思い浮かびますが
最近はこんなことしませんよね? >>932
mysql_secure_installationってなに? >>936
WebSockets?
使おうと思えばphpでも多分使えるけどかなり面倒
リクエストの度にメモリの内容を全消しする方式のPHPとは相性が悪い
GraphQLのSubscriptionもWebSocketsが要るが、phpでは実装困難
https://github.com/webonyx/graphql-php/issues/9
https://github.com/overblog/GraphQLBundle/issues/155 >>936
どういう理由で訪問者を知りたいのかによるだろう
チャットのように訪問者同士でやりとりするようなシステムなら
Server-Sent Eventsを使えばいい。event-streamを送ってる間は訪問者がいる状態だ。それをカウントしろ
ただ自己満足で訪問者数を知りたいだけなら
Google Analyticsでも仕込んでおけ チャットみたいなリアルタイムなwebアプリはnode.jsがいいって聞くけどphpでも問題ないの? zend_framework3使ってる人いますか?
1からの移行なんだけど、
本も出てないみたいだし日本語の記事もあまり見ないから2にするか迷ってます。
3ってリリースから1年以上経ってると思うけどコケてるのかな? そんな書籍も出てないバージョンに移行するくらいなら
フレームワークごとまるっと変えちゃえば?
今はLaravelほぼ一択でしょ DB処理をPDOでゴリゴリ書けばいくらかましになる zend製だし1がかなり使いやすかったからいいかなって思ったんだけど誰も使ってないのか。
今一番シェア率高いのってsymphonyなのかな? Laravelの遅さが気になるほどアクセス数あるサイトを運用してるやつここにはいなそう。 いやLaravelはアクセス数とか関係無く、単純に読み込むのが多過ぎて遅いって感じだろ だから結局は>>956って話だろ
goでも使ってればいい 速度求めるならPHP使うなで終わるならこんなスレ見に来なくていいぞ
そっから話が展開しないし
このスレはPHPでも速度を求めたっていいじゃない
っていう思考のやつじゃないと無意味なスレだからな PHP Conference、のぞいたことある?
今度言ってみようかな PHPフレームワークで速度1位はUbiquity
2位のSymlexの倍以上の速度
2位はSymlex
3位はSymfony
http://www.phpbenchmarks.com/en/
1位と2位がきいたことねえ phpの速度よりもこの混沌としたキャッシュ・言語周りどうにかしてくれ〜〜〜 >>959
Laravelの読み込みよりディスクIO、DBアクセス、外部API連携、HTTP送受信の方が遅いやろ。どんだけシビアなシステムつくってるん? >>965
ブラウザでキャッシュ
サーバーでキャッシュ
jsで独自にキャッシュ
プロクシでキャッシュ
更にクッキー
更に何故かキャッシュされない
更にこれがブラウザ毎に挙動が違ってうわぁぁってなる >>968
PHP関係ないやん
HTTPの勉強をしろ
基礎体力をつけてからまた来い DBに負荷かけないようにRedisのようなメモリDBを併用してるとキャッシュに悩まされるな アプリケーション側よキャッシュに悩まされるやつはアーキテクチャ設計が間違ってるよ。透過的に扱えない時点でキャッシュ以外の用途を持たせてる。 全部joinしたテーブルを作れば
redisのキャッシュなんていらない キャッシュ以外の用途なのにキャッシュを効かせてしまっている またはその逆
という、 >>968 がクソ設定下手の無センスだという話よね。 いるよねそういう子 新人「私はセンスがあるので教育など不要です。教育でセンスが鍛えられるんですか?(笑)」 >>977
むしろ教育以外でセンスを鍛える手段あるか? センスってまさかかっこいい関数名を付けれるセンスとか言わないよな? 『これ、このまま進んだら3ヶ月後破綻するな…』と、10行程度書いた段階で気づいてリファクタ始められるのが、センス。 >>983
普通と思ったけど、確かに初心者の頃はコード書くのに必死だったな プログラミングがどういうものかも知らないで
はじめてのプログラム10行で先行き見通せるなら天才だわ if/elseを3つ書いたら、あ、これはどんどん組み合わせの数が増えて理解できなくなるな、ということに気づくセンスはぐらいは欲しいよな。 if else switchを使っても良いぞ?
全組み合わせのテストを一緒に書くなら、だが
賢い奴は
OOPのポリモーフィズムで対応して
分岐を減らす >>988さんスッゲーな
MENSA会員になれるかもしれないぜー PHPの勉強を初めて3秒でこの言語はダメだと見切りをつけるのが本当のセンスある人。 他の言語知ってればphpは勉強しなくても使えるからな・・・ phpしかやったことない状態で
javascriptやったけどすんなりわかったよ
さらにhtmlのボタンにイベントを割り振るようなフロントエンド開発に触れて
そこからc#でwindowsフォームアプリ作ってみたがこっちもそんなりいけた
まあ言語というより何を作るかだな
他の言語やってphpの構文やら機能理解したとこで
webアプリ開発をしたことがなければ(゚Д゚)ハァ?状態だと思うぞ >>990
お前が言語に使われてるだけの能無しだとすぐわかるのが、本当のセンス。 くだらねーレスで埋めてんじゃねえよ
あく新スレたてろや このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 225日 8時間 15分 26秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。