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の改造 レンタルなのはわかってるだろ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/ ■ このスレッドは過去ログ倉庫に格納されています