PHP質問・雑談スレ5【初心者お断り(ROM歓迎)】
■ このスレッドは過去ログ倉庫に格納されています
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の改造 >>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
配列を直接指定せず変数に代入してからだとうまくいくのでは? ■ このスレッドは過去ログ倉庫に格納されています