PHP質問・雑談スレ4【初心者お断り(ROM歓迎)】 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
PHPに関する質問や雑談をするスレです。
初心者お断り(ROM歓迎)と書いてますが、初心者用のスレが用意されているからで、
難しい質問や話題をしなければいけないわけではありません。
PHPマニュアルの読み方を概ね理解していて、関数リファレンスが正しく読める方用のスレです。
PHP未導入の方や、手取り足取りが必要な初心者の方はム板のくだスレへどうぞ。
http://mevius.2ch.net/tech/ (【PHP】で板内を検索)
前スレ
http://medaka.2ch.net/test/read.cgi/php/1486956982/
その他リンク
・PHPマニュアル
https://secure.php.net/manual/ja/index.php
・コードテスト・貼り付け用
http://ideone.com/
・プログラミングのお題スレ (求PHPer参戦)
http://mevius.2ch.net/test/read.cgi/tech/1480579110/
このスレで扱う話題
・PHPのコード,設定や設定値に関する質問
・常識的範囲内でのコードレビュー依頼・改良相談
・PECL,PEARに関する質問
・PHP新機能やPHP関連トレンドの話題
(FWや非公式ライブラリの話題や特徴比較は良いが使い方から先の話題は専スレへ)
・PHPのバグ発見報告・公式に報告する前の検証依頼
このスレで扱わない話題
・直接関係ない○○特有の質問(専スレへ)
(HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等)
・PHPの改造 サーバー変えたら動かなくなりました。
OSアップデートしたら動かなくなりました。
OS変えたら動かなくなりました。
WEBサーバー変えたら動かなくなりました。
WEBサーバーにパッチプログラムをあてたら動かなくなりました。
DB変えたら動かなくなりました。
DBをアップデートしたら動かなくなりました。
PHPのアップデートプログラムを更新したら動かなくなりました。
PEARのバージョン変えたら動かなくなりました。
PEARのアップデートプログラムを更新したら動かなくなりました。
WordPressのバージョン変えたら動かなくなりました。
WordPressのプラグインのアップデートプログラムを更新したら動かなくなりました。
Railsアップデートプログラムを更新したら動かなくなりました。
Rubyアップデートプログラムを更新したら動かなくなりました。
高負荷になったら動かなくなりました。 無償で修理してください。損害も請求します。
しばらく放置していて、最近動かしたら動かないです。原因はわかりません。これは御社の不具合なので無償で修理してください。
5年後ごとに起こるであろうこと PHPバージョン変えたら動かなくなりました。無償で修理よろしく
3年後ごとに起こるであろうこと Railsバージョン変えたら動かなくなりました。無償で修理よろしく
1年後ごとに起こるであろうこと Rubyバージョン変えたら動かなくなりました。無償で修理よろしく
無償で修理してください。損害も請求します。無視するなら瑕疵担保責任法で訴えるぞ!
納品先の会社 10社から同時に
重大な脆弱性が現バージョンから発見されました。こちらでアップデートしたところ、起動ができなくなりました。
至急弊社に来て修正作業をお願いします。なおお金は払わない。また営業に損失が出たので損害請求もします。 瑕疵担保責任(かしたんぽせきにん)
瑕疵担保責任のポイント
民法改正で事実上期限が「無制限」になった
バグや設計のミスなどは、瑕疵担保責任
納品物に不具合があれば損害賠償を請求される可能性もある
不具合を指摘されたらすぐに行動をとるべし
軽微なミスでも先延ばししない
http://www.atmarkit.co.jp/ait/articles/1706/26/news014.html
http://itpro.nikkeibp.co.jp/atcl/news/17/052601508/?rt=nocnt
改正法では欠陥に気付いてから1年以内にITベンダーに通知すれば、
通知後5年以内は修正や報酬の減額などを求められるとしている
全ベンダーが泣いた民法改正案を解説しよう その1
http://www.atmarkit.co.jp/ait/articles/1609/14/news009.html
http://www.atmarkit.co.jp/ait/articles/1609/14/news009_2.html
http://www.atmarkit.co.jp/ait/articles/1609/14/news009_3.html
ポイント1:修補や損害賠償、契約解除の期限がなくなる
従来あった「瑕疵担保期間は引き渡しから1年」という考えはなくなる。
条文にある通り、注文者は成果物が契約の目的に適合しないことを発見したら、
その「発見したときから1年以内」ならさまざまな請求ができる。発見が10年後なら、
11年後まで請求可能なのだ。
もっとも、現実のユーザーとベンダーの関係でも、たとえ契約書に「瑕疵担保責任期間は納品から1年と」明記されていても、
「2年目以降は不具合の修正に対応しない」と主張するベンダーはまれだ。多くの場合は、納品から何年たっても、
バグが見つかればユーザーのところに飛んで行き、無償で改修するだろう。 >>6
じゃあ瑕疵担保責任法で訴えるまでだ。損害賠償請求もする おまえら世間ではペチパーと言われてバカにされているんだよ。
バカにバカと言っているだけだよ 豊田真由子の新音声公開されたけど
たぶんあんな感じの自分エリート周り糞みたいな思考のやつなんだろう Aを渡すとBに変換する関数
Bを渡すとAに変換する関数
しかしこの関数の中身は同じなのです
例えばAからBをencode
BからAをdecodeとすると
Bをencoderに渡してもAになってしまうのです
こんな関数はおかしいですか?
なんかいい関数名ないですか? 前スレ埋めろ
AとBが確実に二分できて機械的に判定可能なのかによる >>16
お遊びで作ったソース難読化です
function give_me_a_name($src){
$hex=bin2hex($src);
$len=strlen($hex);
$buf="";
for($i=$len-1;$i>=0;$i--){
$tmp=15-hexdec($hex[$i]);
$buf.=dechex($tmp);
}
return hex2bin($buf);
} 今日はム板のスレ立てるまでもない〜スレでくだらないゴミみたいなオレオレ解釈法律談義相手してもらえてよかったね >>17
0-9a-fだけで構成された、しかし難読化を経たものではない $srcが指定されたらどうすんの
ソース難読化なら$srcに<や;が含まれてるかどうかなどによって
自動判別する関数をお前が作るのは自由だし、それは特におかしい関数ではない
しかし、全ては目的、用途、処理次第であるため、
その手の変換および自動判別を行う、汎用的な関数の存在を期待するのはおかしい 向こうじゃ話ついていけなくてぺちぱースレに戻ってきたぺちぱー()
法律オジサンちゃんとこっちでしっかり軟禁しとけよ 的を得ない自分勝手なオナニー講釈たれるアスペ野郎はどこでも嫌われるんだなw
なんか見ててちょっとお気の毒 質問させてください
PHPで受信メールを解析しています。
添付ファイルなしで本文取得は出来るのですが
添付ファイルありだと本文の取得が出来ません
下記がコードです。よろしくお願いします。
switch(strtolower($data->ctype_primary)){
case "text":
$text = $data->body;
break;
case "multipart":
foreach($data->parts as $part){
switch(strtolower($part->ctype_primary)){
case "text":
$text = $part->body;
break;
case "image":
$type = strtolower($part->ctype_secondary);
break;
}
}
break;
} >>26
できあいのparser使った方がいいと思う >>27
レスありがとうございます
できあいのparserでも結果は同じでした
マルチパートの本文の取得方法がわかりません…
よろしくお願いします >>28
なにをどう試してどう失敗したかを書くと
答えやすいと思うよ \r\n\r\nで区切ってみりゃいいんじゃね
共通ヘッダ テキストヘッダ テキストボディ 添付1ヘッダ 添付1ボディ 添付2ヘッダ 添付2ボディ・・・
みたいな感じになってる気がするけど
メールのことは詳しくないしRFC読むの面倒だから適当回答ですまんが parser自分で書いてるなら
添付ファイル付きメールをparserと同じように手で解いていって確認すりゃいいだろよ・・・ >>28
> できあいのparserでも結果は同じでした
何使ったの? シングルトンパターンってなぜ必要なんでしょうか?
例えばとあるソースでHttp通信(RESTAPI通信)を行っているクラスがシングルトンパターンで
作られているのを見かけたことがあったんですが
複数のインスタンスが作られると何がまずいんでしょうか? なぜ必要か
どんな状況にも通じる絶対的な必要性などないし使われてる状況による
とあるソースで 〜〜 何がまずいか
んなもん書いた奴に聞けマジで >>37
dbやcurlなどの接続を開始するためにコネクタクラスを毎回newしていると、
無駄にメモリ消費が増える。
インスタンスの共有が問題にならない局面でのみ有効な考え方。 たいてい、DBマネージャーとか、何々マネージャーと言う、
何かを管理するオブジェクトは、シングルトンにする
もし、2つあると、管理できないから >>40
管理できないのはhogefugaマネージャの実装の問題で(仕様とも言えるが)、
本質的にシングルトンにすべきかどうかの問題じゃないと思うが。 正論
だがそれ以前にシングルトンについての質問であってphpの質問ではないように思われる シングルトンって同じリソース使いまわす時に使うんでないの?
ユニキャストやらマルチキャストやらスレッドやら非スレッドやら同期やら非同期やら
その辺で使い分けるようなきがするがよくわかっていない >>39
>>>37
>
>dbやcurlなどの接続を開始するためにコネクタクラスを毎回newしていると、
>無駄にメモリ消費が増える。
>インスタンスの共有が問題にならない局面でのみ有効な考え方。
毎回newしても
ガベージコレクタがいい感じにメモリ解放してくれるからあまり問題にはならないんじゃないの?
違うの?
だれか詳しい人教えて! インスタンスを作っては削除し、これを繰り返すのは、
ループ内で、10万回もするなら、性能低下を引き起こす
回数が少なければ、気にならない for($i = 0; $i < 100000; $i++)
{
$dbh = new PDO();
$dbh->query("INSERT INTO tbl(id) VALUES({$i})");
unset($dbh);
} [NEET@]$ sudo pecl upgrade --force
pear.php.net is using a unsupported protocol - This should never happen.
PEAR Version: 1.10.1
PHP Version: 7.0.18-0ubuntu0.16.04.1
Zend Engine Version: 3.0.0
bosukete
Downloader.phpからエラーメッセージ追っとる;;; >>44
PHPやJAVAのガベージコレクションはどこまで信頼できる?
タイミングを含め盲目的な依存は危険だろ。
>>46
10万回って数を持ち出してくるとは恐れ入るなw
一般的にDBに設定されてる同時最大接続数を知らないとしか思えん。
貴重なリソースを一人占めするんじゃないぞ。 phpの話というよりDBの話になってるような
gcがどんな感じでも、1つのプログラムが長時間実行され続けることが
多くないphpにおいては、DB接続とgcはあんまり関係ない気がするんだが
javaのgcとは状況が色々と違うべ
むしろ全体でコネクションプーリング考えなきゃかなとかそっちのほう お前ら手動でビルドしてるのかよー。頼むから教えてくださいお;; お前らとか言ってすんませんした。pecl詳しい人居たら教えてくださいよろしくお願いします。 HLSネイティブサポートがSafariだけとかで、
そんな中でもいち早く対応プレイヤー登場させたクロスプラットフォームなFlashさんもとうとう死ぬんか・・・
これからが真のブラウザ競争の幕開けやなぁ
ブラウザにネイティブPHPサポート入れたら流行るでえ なんでcsv関係関数もSplFileObjectも全部、改行コードの指定がないんだろう >>56
> なんでcsv関係関数もSplFileObjectも全部、改行コードの指定がないんだろう
別に指定しなくても読めるから >>57
enclosureだってRFC的にはencloseは " だから指定なくても読めるけど変更可能じゃん?
エスケープ文字は…\と""連続があるからまあわかる
区切り文字はtsvを読みたい人もいるだろうからなのかな strpos(string haystack, string needles)
なんだよhaystackって干し草の山?意味わからんでえ while (!feof($fp)) {
fgets($fp);
}
fclose($fp);
これが終わらない$fpにはどうしたらベストですかね? EOFが返ってこないもの(/dev/zeroとか/dev/urandomとか)を読むなら終了条件がEOFまで読んだらってのがおかしい >>61
すみません説明不足でした
fsockopenで開いたwebサーバですね
サーバによっては返さないみたいで
その場合どうしたらいいのかなと え、keep-aliveの話?
http(s)で繋ぐだけならfile_get_contentsやcurlでいいじゃん
ストリーミングだっつーなら・・・・・・ あーkeep-aliveですか
てことはconnection: close送ればいいのかな fsockopen使っててconnection: close送ればいいのかな、って
自分でkeep-aliveを明示的に送ってんじゃないんかい? >>65
送ってないです
connectionは未指定でした とりあえず低レベルに手を出すなら今どうなってるか自分で確認せんと
聞くならなんのリソースでどんなプロトコルでどんなリクエスト送っててどういう状況になってるかはじめから書かんと
HTTP/1.1を送ってて1回1回切りたいならkeep-aliveを指定してなくてもconnection: close
cURLでいいような気がするが >>67
ありがとうございます
connection: close送ってもだめでした
いうこと聞いてくれないサーバなのかもしれません
file_get_contentsだとcontext指定しても期待した結果が返って来ず
cURLは面倒くさそうだったのでスルーしてましたがcURLでも試してみます guzzlehttp/requestとかじゃダメなんか guzzleって使ってなんかcurlにはない良いことあるの keep-aliveって、こっちがcloseしたら相手がsocketを破棄するとかそういうのじゃないよ HTTPなら読み込み終了条件はContent-Lengthヘッダがあればそのサイズだけ読んだとき, Transfer-Encoding:chunkedのときはサイズ0の空チャンクを読むまでだろ
規格外の規約で通信するなら知らんが >>75
RFC7230とRFC7540あたりを読む >>76
おう、面倒だから代わりに読んできてくれや
お前さんのスキルアップに一役買うためにネチゴロして待ってんよ やーよ俺はcURLとかguzzlehttp/requestを使う fsocketとcurlでcurlの方が面倒とか言っちゃうんだから察しろ 実際面倒だろ
カスタマイズ性には劣るが生のhttpヘッダ送るほうが簡単に決まってる 自宅にWebサーバ立てたのですが
FireWallとかよくわからないので
そのまま自作Webサイトを公開しているんですが
FireWallあるのと無いのでは何が違うんでしょうか?
一応現時点では80番ポートのみ開放しているのでそれで十分かと思ってるのですが
想定される不正アクセスはどのようなものがあるのでしょうか? >>86
手書きで ../../ とか親ディレクトリをたどられないかとか、
存在しないURL・ファイル名指定されて index一覧をダダ洩れさせてしかも親へ移動できちゃわないようにしっかりチェックしてね
まぁ面倒なら .htaccessでがちがち設定にしとけばいいよ >>88
それってFireWallとは関係ない話なんだがw >>89
>想定される不正アクセスはどのようなものがあるのでしょうか?
って書いてあるからその状態(port80のみ開放)ではどんないたずらを速攻でされ易いかという意味で合ってるだろ それはそうだwディレクトリ掘りの後にクエリ捏造でphpの出番が来るけどな php側のセキュリティはphpコード側で何やってるかがまず問題だしなあ
セキュリティよく分からないのに自宅鯖とか
愚劣を極めてるやつにピンポイントであれこれ教えても無意味 スレ違いなの分かってるけどどうしてもこれだけは言っておきたい
普通の意味でファイアウォールと言ったらTCP/UDPレイヤでの操作だけども, 80と443以外のポートはきちんと閉じていますか, と
22とかまともに設定せずに開放してたら踏み台にされてるんじゃねーのか ルーターはハードウェアファイアーウォールだし、
サーバ側にソフトウェアファイアーウォールが入ってなくても問題はない。
外に持ち出しして、不明な構成の外部ネットワークからつないだりしたら問題になるかもしれんが。
ただ↑の指摘のようにsshは気軽に誰でもアクセスできちゃうと、
パスワード突破されたらサーバが乗っ取られるので、
ポートは22以外を使うのと(スキャンされにくい1024以降)、lan内と外から使うかもしれない一部プロバイダ以外からは遮断する。
その細かな制御は高性能のルーターじゃないと出来ないので、ソフトウェアファイアーウォールが必要になる。
まぁWindowsサーバだろうし、sshとかも入れてなさそうだけど。なんにしてもスレチだな。 xxx.xxx.[0-255].[0-255]正規表現でこのような指定は出来ないので、
if ($yourip == fn("xxx.xxx.0.0/16"))
このようなサブネットマスクでIPを調べれる関数とかありませんでしょうか? >>98-99
ありがとうございます
さすがにまんまなものはなかったんですね
>>99さんのリンクのを使わせていただきます すげー細かいことだけどxorしてからシフトすればシフト1回で済む
PHPでandとxorどっちが早いかは確かめていない 自サーバの指定ポートが使われてる(LISTEN状態)かチェックする方法ってありますか? もしかしたらすれ違いかも知れませんが気にせず質問させていただきます
先日パソコンが壊れました
電源をつけると5秒後に再起動を繰り返してしまいます
原因がわからないのですが
どなたか対応方法などご存知の方いたら教えてください >>107
エラーを出せばわかるのですが実行前に検出したいです
file_get_contentsの前にfile_existsをやるようなイメージです よくわからんけど netstat -an をexec()したら? >>109
エラー制御とかErrorException投げるようにすればいいのですが
fsockopenで開いてないポートに接続するとE_WARNINGが出るのがいまいちで
$errstr参照できるようにしてるのだからFALSE返せばいいのに・・・
説明には
>hostname が有効なドメインでない場合は E_WARNING をスローします。
って書いてますけどhostnameは有効なのにportとセットになっちゃってるようですね
netstatコマンド叩く案で対処しようと思います
どうもありがとう >>112
一時ファイルのパスを知る必要のある局面では、
tempnam()で一時ファイルを作成してから、
fopen()でオープンする。
tempnam()は単に文字列としてのパスを生成するだけでなく、パスの競合を避ける為に一時ファイルを作ることに注意。 $fp=tmpfile();
print stream_get_meta_data($fp)['uri']; mb_detect_orderってマニュアル通りの結構適当なの
mb_detect_order("eucjp-win,sjis-win,UTF-8");
あるいは
$ary[] = "ASCII";
$ary[] = "JIS";
$ary[] = "EUC-JP";
mb_detect_order($ary);
で動いちゃってますけど実はあんまよくわかっていません
マニュアルではJP系のしかありませんが
非英語圏、非日本語圏の場合はどうするのかなど
これが本当に正しい検出順ってのがありましたら教えて下さい やっぱみなさんもよくわかってないで設定してるかんじなんですかね? 負荷だって問題になるし誤判定防止の観点も重要だし、何を優先したいかじゃないんか
つか自動検出したいって対象というか目的が限られるよな 完全な自動検出なんてそもそも無理だし>>115が何を以って正しいとするのか不明だしアホかと PHPコミュ死亡したの?PHP7も特に話題にもならなかったしついにPHPも終焉か
目新しいものもないし仕方ないか・・・ 死亡したことにしたいならそうすればいいんじゃないかな よくわからないからxampp参考にするか
.\licenses\phpに入ってるな
.\phpにも入ってるけど
くっそめんどくせえ 外部設定ファイルxml,ini,json等を読み込んで
phpの変数に割り当てます
{
"phpver": "7.0",
"pyver": "3.6"
}
$j = json_decode("json");
$this->phpver = $j->phpver;
$this->pyver = $j->pyver;
例えばこういうコードなのですが
このjsonの編集は自由に出来るとして
ミスでパース出来ないコードにしてしまったり
あるべき項目が入ってないことを想定して
プロの皆さんはissetで必要項目全チェックしたり
なかった場合に例外なり出したりとかするんでしょうか? noticeが出ない程度にissetとnullセットをしつつ
実際に実行したときに問題が起きて終了するか
データのvalidationまでやって実行前に正しいか事前にチェックするか
ちょうどコンパイラとインタプリタの概念に近いもんだと思うけど面倒だから前者だな ……?例外投げるとか、Fatalで終了させるとかそういうのじゃないのか .user.iniに記述した内容が反映されないのですが何か注意点あるでしょうか?
root権限ありの環境でphp.iniもいじれますが事情があって.user.iniを使う必要があります
php.ini内で
user_ini.filename = ".user.ini"
として、phpファイルのあるディレクトリに.user.iniを作り、
同ディレクトリに置いてあるphpinfoで確認しても反映されない状況です
.htaccessにphpvalueで書いたものは反映されるのですが、.user.iniが効かないのが気持ち悪くて。。。 補足
.user.iniに書いているのは
post_max_size=15M
のみです そのPHPの実行環境はどれなの?
CLIかmod_phpかphp_fpmか Webサーバ通してphpinfo見てて、
php.iniでuser_ini.*を編集してからWebサーバ再起動してなかった
ってオチじゃないだろうな 環境はmod_phpです
centos7.3
apache2.4.6
php5.6.31
php.ini変更をしてからhttpd再起動しています
phpinofのuser_ini.filenameには.user.iniと表示されています >>136
http://php.net/manual/ja/configuration.file.per-user.php
> このファイルは、CGI/FastCGI SAPI の場合にのみ処理されます。
> この機能は、PECL htscanner 拡張モジュールを置き換えるものです。
> Apache モジュールとして PHP を実行している場合は .htaccess ファイルを使えば同じ機能を実現できます。 アップローダーで、
「名前、コメント、URL、アップロード時刻、ファイルサイズ」の4つを|文字区切りでログしていて、
名前 コメントは$_POSTで|文字を使うことが出来ない、
URLはオリジナルファイル名を破棄してuniqidを付与したもの、
アップロード時刻 ファイルサイズはtimeやfilesizeでシステムからのものという仕様になっています。
これらをhtmlに表示する場合、
システム側が作成する、[a-f0-9]のファイル名(URL)や、
intであるはずのtime(dateで変換して読みやすく表示)やfilesizeは安全な値だと思うのですが、
これらをhtmlspecialcharsする理由はなんなんでしょうか? >>140
分けるのがめんどいから一括でサニタイズしているだけだと思う 366 :nobodyさん 2017/05/29(月) 16:07:39.16 ID:6v4UcGhE
今回の民法改正、ソフトウェア受託開発の場合、(検収後ではなく)バグ発見後1年瑕疵担保責任があるということで、地獄かよ、と思ったが、
元々問題が起きがちな受託案件がビジネス的に成立しなくなることで強制的に業界再編につながるなら良いことかもと思うようになった。
一部で地獄を見ても。
https://twitter.com/yukihiro_matz/status/869061879389343744
367 :nobodyさん 2017/05/29(月) 16:28:06.55 ID:6v4UcGhE
ニュース - 改正民法が成立、「瑕疵担保責任」などシステム開発契約に影響大:ITpro
http://b.hatena.ne.jp/entry/itpro.nikkeibp.co.jp/atcl/news/17/052601508/
372 :nobodyさん2017/05/29(月) 19:10:37.12 ID:???
Railsでシステム作って納品する
↓
Railsはマイナー、メジャーのアップデートが半年以内に必ずある
↓
客がアップデートする。アップデートによるエラーやバグ、動作の不具合に気づく
↓
気づいてから1年以内に通知すれば、5年間無料保証ゲット
↓
つまりRailsがアップデートするたびに、無償の修正作業を発生するということかな
376 :nobodyさん2017/05/30(火) 09:20:20.09 ID:L5po86sS
>>378>>379>>375
客が瑕疵担保責任法の法改正を知ってくると思うから、今後5年無償保証をお願いされるだろう
営業がそれでも仕事を取ってこれるか?たぶん無理だろう。無限の直していたら赤字になる。
こういう保守に弱い言語、ころころ仕様が変わる言語は仕事として発生しなくなってくる。
これは変わり目だ。お前らも早く逃げたほうがいいぞ。RubyやPHPなど動的言語は確実に廃れる。
保守に強い言語のみ生き残れる。 無駄にコード長くなる冗長なJavaが保守に強いってか
つうかこのスレ向けの話題じゃないしPHP関係ないからム板で聞きなさい
http://mevius.2ch.net/tech/ 作ったコンソールアプリをwindowsでバックグランドで動作させるにはどうしたらいいですか?
cmd画面だしっぱで動作させることは出来るのですが、
タスクトレイには表示させてもいいですが、ついうっかりバツボタン押しちゃうので、
誤操作防止にもタクスバーに残らないようにしたいです。
切るときはタスクトレイから止めるか、タスクマネージャーから直接止めるという感じにしたいです。
可能でしたら方法教えてください。お願いします。 php-win.exeで起動させるとcmd画面が表示されない >>148
出来ました。どうもありがとうございます。 デバッガ付きのIDEってないですか?
XAMPP入れたりApacheやPHPの設定するのが大変です
しかもしょっちゅうおかしくなって再起動必要だし・・・ xamppで質問なんですが、スレチだったらすいません
php.iniで
include_path = "D:\xampp\php\lib\smarty"
と設定した場合、smarty内のphpファイルを全部読み込むということなんでしょうか? >>152
検索パスであって勝手に読むわけではない
あと今はグローバルにインストールしてinclude_path指定するよりcomposerでプロジェクト毎にインストールするのが普通 >>153
あー、なるほど
つまりパスを登録しておけば
require( 'Smarty.class.php' );
で読み込める事ができて楽、ということなんですね
後、パスを複数登録した時、同じ名前のファイルがあるとどうなるのでしょうか >>154
一つ上の階層をインクルードpathにして
フォルダで分けるそしてrequiireを
require( 'smarty¥Smarty.class.php' );
とする is_readableの説明には
>filename で指定したファイルあるいはディレクトリが存在し、 それが読み込み可能であれば TRUE、
といった具合に存在も確認するようなので
file_existsとis_readableって併用する必要ないですよね?
URL忘れちゃったけどIBMの記事でPHPのファイル事前チェック説明で両方指定してたので
あとis_readableの注意の
>この関数は、ディレクトリに対しても TRUE を返すかもしれません。 ファイルとディレクトリを区別するには is_dir() を使いましょう。
というのは、これはis_dir"を"ではなくて、is_dir"も"っていう解釈でOKですか?
is_dirのところ見ても
>ファイルが存在して、かつそれがディレクトリであれば TRUE、それ以外の場合は FALSE を返します。
としか書いてないのでreadのチェックまではしてないのかなと
手元の環境じゃdirを000にしたりすることが出来ないので確認できなくて
読み書き可能なディレクトリかを調べる場合どちらがいいでしょうか?
冗長な分には構わない感じで上でいいんですかね?
is_dir($dir) && is_readable($dir) && is_writable($dir)
is_dir($dir) && is_writable($dir) php ver7は、odbc_connectは実装されていないの?
関数がないっていうエラーになるんだけど。 >>160
はい、知ってます。
が、実際はサポートされていないようなのです。 >>161
エクステンションなんだからお前さんの環境で有効になってるかぐらい確認しろ ご自分の設定ミスなのにサポートされてないとか言っちゃったらそりゃ反感買う罠w 俺環は、Windowsなんだけどネ。
php v5 では、エクステンション無くてもodbc関数は動くのよ。
php v7 では、だめなの。
んで、php 7 のextフォルダ見たけど、それらしきファイルは入ってないの。
PHPのオンラインマニュアルには、
Windows 版の PHP には この拡張モジュールのサポートが組み込まれています。
これらの関数を使用 するために拡張モジュールを追加でロードする必要はありません。
て書いてあるし。
文句は甘んじて受けるから、odbc関数動かす方法教えてくれ。 いや、、、php.iniは確認したの? ; をちゃんと外した? php.ini のodbc関係は、php_pdo_odbc.dll だけ。
これは有効にしているので、pdo を使ってodbc接続はできる。
それなのに odbc_connect関数は使えないのよ。
php -i で見ると、v5 には、
ODBC Support => enabled
が表示されるのに、v7 は表示されない。
だからサポートされてないんじゃないかな〜って思うの。
162, 163よ、早く答え教えろw すまん。
php_odbc.dll ってのがあったw 確認しろと言われても確認すら出来ない
しかもちゃんと謝れない
ゴミクズですわ 自分よりもマニュアルが間違ってるって発想する人間だし www.example.comみたいなホスト名からドメイン名の部分をとりたいです。
最初に考えたのはドットで配列に区切って後ろの2つをくっつけるですが、
ne.jpとかのドメインを思い出して、その場合3つをくっつけないといけません。
既知のドメインをリスト化するのは大変だし、新しいものに対応するのも難しいのですが、
なんかいい方法や関数ないでしょうか?
ne.jpやco.jpがneやcoの部分が2文字まで、exampleの部分が3文字以上じゃないと無理とかなら、
まだやりようはあるんですが、そういったルールはないですよね? 2つとか3つとかそれぞれで
checkdnsrrでチェックするとか >exampleの部分が3文字以上じゃないと無理とかなら、
三文字以上じゃなきゃ取れなかったと思うから2以下なら3つっくっつければいいんじゃね? >>173-174
>>173さんの方法でうまくいきました。
レスどうもありがとうございました。 無名関数でuseというキーワードがありますが、これって引数で渡すのと比べた違いは、
>引き継がれた変数の値は、関数が定義された時点のものであり
これだけですよね?
両者とも参照渡しは可能で、globalのように親スコープの変数を変えることもできないので。
PHP5では無理なようですが即時関数のような振る舞いを期待して、
定義後にすぐ呼び出すならuseキーワード使ったほうがいい感じですかね? >>176
特に理由がなければuseするわ
引数にすると2回書かにゃならんし
あと即時関数はPHP7からは
(function (...) {...})(...)
で可能だしPHP5でも
call_user_func(functuion (...) {...}, ...)
で可能だったと思うが >>177
ありがとうございます。
やっぱ基本useがいいですね。自分も書いてて2回書くのは気になりました。
ただ書いてて気づいたのは、$thisはuseで渡せないようなので、
その時はやむを得ない感じかなと思いました。
call_use_funcは知りませんでした。どうもありがとうございます。
JavaScriptもやっていて、無名関数の書式に慣れてるし、
もし今使ってるレンサバがPHP7対応したら置き換えやすいので、
とりあえずこのままで行きたいと思います。 http://php.net/manual/ja/class.domelement.php
DOMクラスに多いんですが
publicでreadonlyなプロパティがいっぱいあります
ためしに自分のクラスにpublic readonlyとか書いてみたらparse errorになりました
マジックメソッドの__getを使うとreadonly実装出来るようなこと書いてて出来るには出来るのですが
これってgetterのオートローダーみたいな感じで
実質中身はprivate protectedなプロパティにアクセスしてるだけだと思うのですが
publicでreadonlyなプロパティというのは実装可能なんでしょうか? >>179
Cでエクステンション書けばPHPの文法を超えることが実現出来る >>180
なるほど
やっぱりPHPだけじゃ無理でそういうレベルの話だったんですね
DOMElement->tagName変えようとしたらmain()とかでエラー出てたので
なんかそんな感じはしました
レスどうもありがとうございました でもまぁreadonlyプロパティとか欲しいよね実際 if (!preg_match('/regex/', $arg))
{
throw new xxxException();
}
LogicException系ですが、
引数が期待する値でないのでこれはInvalidArgumentExceptionですか?
それとも定義したデータドメインにあってないのでDomainExceptionですか?
いまいちExceptionの使い分けがわかりません。 >>185
InvalidArgumentExceptionのドキュメントを読むとTypeError相当のものに見える
DomainExceptionのサンプルからもその用途にはこちらが向いているだろう
// サンプルなんだろうけどその判定式はstrposが最良では >>186
'/'.preg_quote($regex, '/').'/'と書くべきでしたね。
ややこしくしてすみません。
DomainException使おうと思います。
レスどうもありがとうございました。 なんで標準Exceptionだけで全てを仕分けしようとしてるん… じゃ>>187に例外命名してみ
たぶん無駄に終わるだけだから mysqlなんですが
外部結合などの依存関係を無視して強制的に
データを削除したいんですがどうしたら良いですか? pcntlが有効になっていない環境で、
Aさんがsleepしているのを Bさんが起こす
ということをしたいのですが、どうしたらよいでしょうか
pcntlがあればAさんはsignalハンドラ定義してsleepして
BさんがSIGUSR1でも投げればよいのですが・・・ いや〜噂には聞いてたがさ
F/Wも増えてるしphp開発の話も多いし
大丈夫だろうと思ったんだよ
実際にphp屋に転職したらマジ吐きそう・・・ 今時PHPに固執してる会社なんて
スパゲッティ屋に決まってるだろ
さっさとpythonかgolangやってる会社に転職しろ まともな国公立の情報工学部出身者(自然言語処理系)ならpythonがデフォだから
pythonメインの会社は技術レベルが高い(一昔前はPerlだったが)
そんなpythonプログラマが速度や省メモリ性能、並列化の問題に直面すると選ぶのがgolang
こっちは更に技術レベルが高い(上に先見性もある)
http://isucon.net/archives/51000131.html
ISUCON(いい感じにスピードアップコンテスト)では
本戦出場の53.3%がgolang使い pythonも淘汰されてるやんけぇ!
Ruby以下やん PHPはインタプリタ言語で開発速度優先
Goはコンパイラ言語で実行速度優先
一長一短だぞ
Goのコンパイル時間はC言語と比べるとめちゃ早いが
インタプリタ言語よりは遅い kuinは流石に泡沫言語すぎるな
githubで公開されてない、萌え絵を全面に出してる時点で
評価は得られないだろう Goむずかしいやん
PHPくらいのがチンパンにはちょうどいいんや PHPer目線でGoのダメ出しをすると
type User struct {
name string
}
func (u *User) hello() string {
return "hello," + u.name;
}
u := &User {"PHPer"}
fmt.Println(u.hello())
はぁ〜〜、もうこれね
メソッド定義するだけでもレシーバーをポインタ型にするか値型にするかで混乱するし
そもそもclassの枠内でメソッド定義したいのよ、なんでstructと分離する感じにしちゃったの?
class User{
name string
func hello() string{
return "hello," + this.name;
}
func init(s string){
this.name = s
}
}
u := new User("PHPer")
u.hello()
こっちのほうが可読性高くね? GOは新言語が取り入れるべきヌル安全性がない
これは糞 自宅鯖でWordPressを動かしてるんだが、ログイン状態でPCかブラウザがクラッシュして再起動すると、必ずログアウトされてる
PHPってブラウザ再起動したらセッション無効にするみたいな設定あったっけ?
どういう仕組みでこうなるのか調べたけど案外情報が無くてわからんかった
ブラウザの設定なんでないの? それも考えたけど別のサイトではそうならないんだよな >>210
>自宅鯖+PC再起動
セッションはメモリ上に保存されてるからね、ログアウトも仕方ないね
ブラウザの場合はわからんが、ブラウザじゃなくて鯖が再起動になってるんじゃないの 更に調べたらやはりブラウザのせいぽい
Operaでだけ発生しChromeではならない、が、何故なのかはまだわからない
>>213
鯖は再起動になってない operaが再起動でクッキー消失する設定になってるかなんかじゃないか
あと今のoperaは使わんほうがいいと思うぞ
せめてvivaldyのほうがいい >>215
同じOperaでもサイトによって挙動が違って謎
どこかにドメイン別の設定でもあるのだろうか… operaは中国企業が買収したし何がどうなってるかわからん
使うの怖いわ
原因も調べるだけ時間の無駄
ってかそもそも、今どの層が使ってるんだ? うーんVivaldyでも起きた…Operaの問題というわけでもないようだ
PHPのセッションに、ブラウザ閉じたら終わるみたいな機能ないよね?そもそも検知できないと思うし クッキーの有効期限がブラウザ閉じるまでになってるんだろ >>213
>セッションはメモリ上に保存されてるから
こいつ、何言ってんの? >セッションはメモリ上に保存されてる
でしょ
>>221は何言ってるの? 実装次第だが少なくともPHPのセッションはデフォルトでファイルなはず
自分が使用してるバージョンではそうなってる
ブラウザは終了時にセッション(クッキー)を削除するのでそこでセッションは切れる
ただ異常終了した場合は前回のセッション復帰を試みるブラウザもある(ブラウザ次第)
PHPがセッションを削除するタイミングは
たしかアクセスがあった時にランダムで有効期限が切れたものを削除してた気がする
なのでサーバ再起動した場合でもまだ有効期限内なら確立されるはず(ブラウザ側で残ってれば)
サーバ再起動時にPHPのセッションを削除するようにしてる場合はこの限りではない >>218
phpのセッションは、ブラウザのcookieに保存されたセッションIDと
サーバ側のセッションファイル(メモリキャッシュを使ってる場合はメモリ)の
突き合わせで行われる。
だからブラウザのcookieとサーバのセッションファイルを調べればだいたい原因が分かるよ。
たぶんcookieがないかセッションIDが変わってるだけだと思う。
君らのレス見てると、案外phpのセッションを理解してる人は少ないみたいだな。
まあたしかに分かりにくいけど。 どちらかというとcookieの仕組みを理解してないだけだろう
俺も昔勉強したきりでもう覚えてないが
expiresが設定されてないとブラウザ終了時に消されるんだっけか >>225
そう。
最近はフレームワークが面倒な作業を全部やってくれるから、
新人(でなくてもか)がphpのセッションを学ぶ機会がないんだよね。
session_start()さえ自分で書かないんだもん。
そりゃ何やってんだか分からんって。
できればこの辺のことは学校でやってきて欲しいんだがな。 ブラウザ終了時にクッキー消される場合があるのはわかるが、異常終了時はどうなるんだろう?
再起動時に前回異常終了したことを検知して、正しく処理をするのかな?その結果クッキーは消えると 異常終了時はブラウザがCookieを消すという動作が出来てない可能性があり、
この場合ブラウザには残ってるということになる。
これらのCookieをどう次回の起動時にどう扱うかはブラウザ次第。
勝手に復元したり、復元するか聞いてきたり、リセットして通常起動をしたり。 中途半端に勉強してフレームワークを変にカスタマイズして
セキュリティホールができるよりかは何も出来ない方がいいという昨今 そうやってできたセキュリティホールなんてそう簡単に検知出来ない
ソースがオープンであることが一番怖いのだよ
逆にオープンであるといろんな視点から修正も可能になるから
堅牢なものに仕上がるわけだけど Googleがemojiのユニコード化に乗り出したときにperlだとemojiをutf8にする決定版モジュールがすぐに出たし
PHPだと暫定的にHTML_Emojiを使ってたけど5.4以降の関数を使った新しいモジュールが見つからない
何かおすすめの携帯emoji自動変換ないでしょうか PHPerはないものを生み出すのが得意になるように
言語が誘導してくれてるんだから自分で作るんだ!!!!!! 車輪の再発明が大好きだからな
趣味でやる分の傾向としては別に悪くはない 誰でも簡単にネットで稼げる方法など
参考までに、
⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。
グーグル検索⇒『半藤のブブイウイウレレ』
MHWTZ79CQR PHPから大量のデータを送る方法を教えてください
思いついたのが、
1、一旦ファイルに保存してファイルの一覧をクライアントに送る
2、クライアントから順次ファイルの送信を要求する
です Socket.ioなどを使えということでしょうか?
勉強してみます npmがエラーはきまくりで進まなくなった。。。
なにこれ
Error: Cannot find module ....\npm-cli.js
socketは。。。portとかまためんどくさい話がありそうで。。。 >>239は同期が必要なゲームデータのやり取りを想定してると思っての答えなんだろうけど。
1や2見るとそういう用途とは思えないな。
1がいまいち意味わからないけど。 スレチとか低レベ質問だったらすまん
headerを使用したリダイレクトとApacheのリバースプロキシを利用したリダイレクトはどう違うんでしょうか?
レスのヘッダーの中身が違うんですか? headerはブラウザがページ遷移を処理する
リバースプロキシはサーバが接続処理する
前者はリダイレクト前後でURLが変わるが後者は見かけ上変化しない >>246
ありがとうございます
今朝検証したらその通りになりました
ちょっとハマってたので助かりました 良くできてるプラグインとかに感動しなくなってしまった phpのf/wってルートネームスペースにエイリアス置きたがるけどさ
use句があった方が圧倒的にわかりやすいと思うんだが、なんか理由ってあるのん? 同一サーバでドメインごとにphpのバージョンを切り替えたいんですが
どうしたらいいですか? KubernetesでドメインごとにPods分ける phpexcelを使って、読み込んだエクセルのマクロを実行する方法はないでしょうか PHPExcelを使って, では不可能(VBAは誰が実行するんだ?)
何らかの形でVBAの実行環境を構築出来ればやれるはやれるだろう
VBSならWindows Script HostがあるがVBAじゃあExcelのCOMを使うしかなかろうが
http://php.net/manual/ja/book.com.php PHP5時代ではコンストラクタはクラス名ではなく__constructを使う
public修飾子はつけるというルールがSHOULDだったと思うのですが
PHP7時代でもそうなのでしょうか? >>257
http://php.net/manual/language.oop5.decon.php
> Old style constructors are DEPRECATED in PHP 7.0.
https://www.php-fig.org/psr/psr-2/#43-methods
> Visibility MUST be declared on all methods. >>258
ありがとうございます
両方MUSTなんですね 質問させてください
https://public.bitbank.cc/btc_jpy/ticker
これをfile_get_contentsしてjson_decodeしてもNULLになります。
file_get_contentsの時点ですでにNULLが帰ってきます。
curlでやっても同じでした。
ブラウザでの表示は問題なく表示を確認していますが何が原因でしょうか?
PHPのバージョンは5.3です。
allow_url_fopenはonになってます。
ちなみに上記URLはビットバンクのAPIですが他の仮想通貨関係のAPIのデータは問題なく取得できます。
原因だけでもわかるとありがたいです。
お願いします。 >>261
ですよねー、取れるのが普通ですもんね
何故か自分の環境では取れないんですよ
特にfile_getにこだわってるわけではないんでcurlでもどちらでも良いんですが何故かbitbank.ccのデータだけNULLになっちゃう とりあえず環境かな, OS分からんし
可能ならPHPのバージョン上げるとか(5.3はもう死んだ, どころか5.5まで死んでる)
因みに手元ではcURLだけじゃなくfile_get_contentsも問題なし ありがとうございます。
PHPのバージョンを上げてから再度検証してみます。 変えられるならもういっそ7.2まで上げてしまうといい
どうせ早いか遅いかだ HTTPS周りならOpenSSL関連かもしれんし
なんかヘッダが必要かもしれんからcontext作って渡すとか
基本的なことをやってから >>266
それやってもわかんなかったから質問したのよね お前もかよ
ビットコインブームにあやかりやがって! PHP経由で画像を出力する手法があるかと思いますが、この場合スクリプトで
いろいろと制限をかけることができ、セキュリティ上よろしいようですが
Apacheが即座に画像を返すのに対し、一度スクリプトを走らせて画像を出力するのは
パフォーマンス的に厳しい気がするのですが、どうなんでしょうか 計測すればいいんじゃないか
一枚ぐらいなら楽勝だけど、アクセスごとに100枚も200枚も出してたら重くなると思う
とりあえずパフォーマンスなんて考えずに作ればいいよ
どうせ誰も使わないサイトだからwww PHPの開発環境のシェアは
Eclipseが8割り位占めてる? >>269
セキュリティ上別によろしくはない
何が目的かは知らないけどはっきりいって無駄だと思うぞ
>>271
いいえ Eclipseなんて1割もおらんだろ PHPStormの人気すごいな
使った人みんな同じこと言ってる >>72
それまじか?
>>274
おつ!使った事がない!試してみる!
因みに俺はサーバ直結でEclipseで開発してるんだよね。
ローカルに開発環境作るのメンドクサイから。
PHP Stormもサーバ直結で開発出来ますか? 有料 PhpStorm(業界標準)>SublimeText>VS
無料 IDE組(NetBeans,Eclipse)>古参エディタ組(Emacs,Vim)>新参エディタ組(VSCode,Atom)>触り組(メモ帳に準ずる物)
こんな感じだと思う
ちなみに俺はVS
PhpStorm以外は分散してて1割以上シェアないと思う ファイル管理のみ便利でDreamweaver使ってるわ Visual Studio Communityで開発しようと思いインストールしたところ、
PHP Toolsのインストール過程で、デバッグ用に勝手にPHP入れたんですけど、
それが元々入れてたPHPより新しいせいか(7.13→7.17)、Pathの順番を変えてみましたが、
php -vをした限り、cliからphpを呼び出す場合最優先になってしまってるようです。
インストールされたPHPは%ProgramFiles(x86)%\IIS Express\PHPに配置されてますが、
困ったことにphp.iniが編集禁止になっていて編集できません。
display_errorsがOffになってるのでエラー箇所の特定に難儀します。
スクリプト側でerror_reporting設定してみましたが、何も表示されずでした。
ならばと元々入ってた7.13のphp.exeをphp7.exeにリネームして、
cliからphp7で呼び出したら呼び出せるのですが、
こんな単純なexeだけのリネームで問題ないのでしょうか? Visual Studioのアップデートがきてたので適用したら、
非互換とかになってPHP Toolsでの開発が出来なくなりましたw
1日で使えなくなってしまった。 ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ DateTime::createFromFormatの第一引数に'Y-m-d'、第二引数に日付の文字列を指定して使うと
時刻は0時0分ではなく、現在の時刻が勝手に設定されます
一方、DateTimeのコンストラクタの方(日付の文字列だけを指定する)は時刻は0時0分になります
何でですか?意味が分かりません
DateTime createFromFormat without time - Freek Lijten http://www.freeklijten.nl/2015/08/12/DateTime-createFromFormat-without-time 1人でphpで作っているプロジェクト(と言ってもDBでユーザ管理するぐらいのもの)の
進捗状況(編集履歴)を外部に見てもらうためにはBitbucketとか使えば良い?
1日の終わりにプロジェクトのルートディレクトリごと放り込めば
webで差分とかがわかるとかできたらいいんだけどどうでしょう? createFromFormatの場合、!が無いと現在のシステム時刻で初期化されるとは確かに書いてありますが
直感的でなくて分かりにくい挙動だと思います。
http://php.net/manual/ja/datetime.createfromformat.php こんばんは。PHPで作ったページのInternal Server Errorについて質問です。
FC2のレンタルサーバーを借りて、WEBサイトを作っているところです。
PerlのCGIでページを作ると、エラーになると500 Internal Server Errorが表示されます。
ところが、PHPでページを作ると、エラーになると真っ白なページが表示されるだけで、
500 Internal Server Errorが表示されません。
これは一体なぜでしょうか?
現象
PerlのCGIでエラーが出ると →
ApacheデフォルトのInternal Server Errorのページが表示される。
PHPのページでエラーが出ると →
FireFoxとIEなら、真っ白なページになるだけ(エラー表示が出ない)
Chromeなら、ブラウザが出すHTTP ERROR 500の表示
(Apachデフォルトのエラーページではない)
上記のことから、PHPでエラーが出ると500が返ってきているのは
間違いないと思うんですが、なぜ、エラーが表示されず
真っ白なページになってしまうんでしょうか?
よろしくお願いします。
PHPになんらかのエラーがあった場合、通常はレスポンスコードは200で返ってきて、
エラー個所を表示するようになってる。
どの種別のエラーを表示させるかというのはサーバ側(PHP)の設定次第だし、
エラーには時に重要な情報も含まれる可能性があるので、
第三者に見られないよう、エラー表示自体をしないことも可能。
また、レスポンスコードをどう返すかというのもサーバ次第で、
通常200のところを、500にすることも可能だし、
同じ500でも、PerlCGIとPHPでは返すドキュメント(body)を別にすることも可能だし、
もちろんbodyを含まない、ヘッダ情報のみを返すことも可能。
早い話、全てはサーバの設定次第なので、FC2側で単にそうなっているだけなのだろうという事。
Chromeのやってることは、レスポンスにbodyがないので(=真っ白になる)、
ユーザに何が起きてるかわかるように、おせっかいにも補完表示してるだけと考えられる。 >>294-295
ありがとうございます。
>>295によると、
・PHPではエラーがあっても200が返ってくる。
・ただし、ちゃんと実行できてないから、中身は真っ白になる
・PHPのエラー表示は設定で可能(←これはできました)
・サーバーの設定次第では500を返すことも可能
(レンタルサーバーでは、設定を変えられるかどうかはサーバー次第)
ということですね?
何となく分かってきました。
ありがとうございます。 開発用環境を考慮してデフォルトではエラー表示はOnだけど
エラー表示関連はPHP_INI_ALLで一般ユーザが設定できるようになってるので
本番用環境のphp.iniは管理者側でデフォルトではエラー表示をOffにして
必要があればOnにするよう利用者に委ねるというのが行儀のいいレンサバ管理者
今は知らないけど昔xrea使ってた時はOnのままだったけどあれはよくない
http://php.net/manual/ja/errorfunc.configuration.php#ini.display-errors
> ・PHPではエラーがあっても200が返ってくる。
> ・サーバーの設定次第では500を返すことも可能
デフォルトのエラー表示Onのままであれば200だけど
上記の通り本番環境ではOffにすべきであり
Offにしたらサーバ管理者がhttpdに細工をしない限り500が返るはず
fc2でエラーに500が返ってくるというのは正しい状態と見なしていい
> ・ただし、ちゃんと実行できてないから、中身は真っ白になる
fc2ではそういうことになるのだろう ちなみに500ページを表示させたいというなら
htaccessが使えるなら設定してみては?
apacheは詳しくないんで答えれないけどできそう >>297
> デフォルトのエラー表示Onのままであれば200だけど
> 上記の通り本番環境ではOffにすべきであり
> Offにしたらサーバ管理者がhttpdに細工をしない限り500が返るはず
> fc2でエラーに500が返ってくるというのは正しい状態と見なしていい
FC2でPHPのエラーになると、IEとFireFoxは真っ白画面。
Chromeではブラウザーが出した500エラー画面。
なので、PHPエラーでちゃんと500エラーが返ってきてるって判断した。
不思議なのは、普通は404でも500でも、Apacheがデフォルトの
エラーページを送ってくるのに、なんで500エラーだけ
真っ白画面になるんだろう?ってことなんです。
実際、404エラーではちゃんとApacheのエラー画面が返ってくる。 >>298
自作500ページを表示しようとして表示できないからおかしいなって思って、
いろいろ試して、Apacheデフォルトの500も表示されないって気付いた。
404とかは、自作にしたら自作が表示されて、
自作じゃなくしたらApacheのデフォルトが表示される。 phpがエラー検出したあとapacheに対してこれを返してくれと
500レスポンスコードにContent-Length:0の空のHTMLを送ってるイメージ if (responceStatus == 500 && responceBody.length == 0) {
responceBody = readFile("/errors/500.html");
}
疑似コードだけど
こんな感じのをhtaccessで設定できるならいけるんじゃないのってことね PHPでどうこうするっていうソリューションはあんまりよくないよねえ
httpdでどうにかしたいところ
ところでresponceじゃなくてresponseだった恥ずかしい >>301-302
真っ白になるイメージはまさに>>301だし、
やりたいことはまさに>>302の通りです。
>>303
それを読んで、挙動としてはやっぱりそうだったんだな、と分かりました。
そして、普通に500エラーを出すのは相当無理筋なんだな、と。
ってことで、みなさんいろいろとありがとうございました。
500エラーではなく、PHPの中でエラーを処理して
普通のHTMLでエラーメッセージを出す、ということにしました。
ありがとうございました。 >>293
大方PHPがmod_phpで動いてる
phpinfo()でSAPI APIを確認してみ Composerのautoload.phpって、全然autoloadじゃねぇんだよな。 https://github.com/sebastianbergmann/phpunit/issues/2499
Q: but when I run phpuint --log-json I get unrecognized option --log-json. Was this feature intentionally removed from version 6?
A: Yes, this was removed.
「Yes,」じゃねぇよ、おっさん!
Any solutions for --log-json in netbeans8.2
I have same problem with this version. Someowne has any idea how to fixed it?
ここで終わってやがる… セマンティックバージョニング的にもメジャーバージョンアップは後方互換性破壊があり得る変更なわけだし Logging Options:
--log-junit <file> Log test execution in JUnit XML format to file.
--log-tap <file> Log test execution in TAP format to file.
--log-json <file> Log test execution in JSON format.
--testdox-html <file> Write agile documentation in HTML format to file.
--testdox-text <file> Write agile documentation in Text format to file.
> 後方互換性破壊があり得る変更なわけだし(キリッ
はぁ? FacebookがおもらししたのはPHPで構築されてたから? techempowerでPHP系フレームワークの順位がかなり下なのは
単にPHPが遅いから?
http://www.techempower.com/benchmarks/
Shared-Nothingな事による初期化にかかるオーバーヘッドやらブロッキングI/Oを無くすことを狙った
phppmとかReactPHPとかもあるらしいけど
Shared-NothingとかブロッキングI/Oを前提に作った今までのコードは動かないよね
そんなの使い物になんの?
そこまでするんだったら別言語に移ったほうが良くね?
https://github.com/reactphp/react/wiki/FAQ
https://github.com/php-pm/php-pm/blob/master/README.md
遅いのはどうにもならないって事で
PHPをアクセス数多いサイトで使う時は
静的キャッシュを行ってサーバーに負荷掛からないようにするのがデフォらしい 後はcssとjs、ファイルを分けずにhtmlの中に書いてしまう 要は読み込むファイルはhtmlファイル一枚だけにする
画像もsvg
そうすれば超早い 早い遅いいうけど人間の認識できる速度じゃないから
別に実用上はなんら問題ないんだよ そんなにI/Oにご不満ならメモリに全部展開しときゃいいよ
ユーザーの誰が気にするのかしらんけど >>319
少し違う
phpやdb構築の際、速度を気にせずに重い処理を平気で書くことが出来るようになる
「これ重くなるだろうなぁ・・・かいてまえ!」→やり直し
が無くなる http://hoge.com/test.php
にアクセスしようとしたところ
writeable by group という初めてみるエラーに遭遇しています。
何が原因なのでしょうか?
Internal Server Error
Directory "/home/XXX" is writeable by group
suPHP 0.7.1
test.php自体には、 echo"testやで";
しか記述していません。 >>323
https://www.google.co.jp/search?q=+is+writeable+by+group&ie=utf-8&oe=utf-8&client=firefox-b-ab&gfe_rd=cr&dcr=0&ei=0tPWWqv6GKuuX53HnfAL 何が原因ってまんまエラーに書いてるのにそれがわからんってのがわからんでw phpMyAdminってインターネットに晒すとヤバイの?
まあDBのパス漏れたら何でも出来ちゃうよね
あるいはphpMyAdmin自体に何か脆弱性があってもパスが漏れて終わる >>327
それも分からないならweb制作やるべきじゃないと思う 攻撃者は狙ったアプリケーションのデフォルトの配置場所やファイル名でアクセスして
200が返ってきたらさらに調べてみて狙ったアプリケーションであるなら
既知の脆弱性を利用した攻撃あるいは管理ページ等にデフォルト情報でログインを試みる
すなわちメジャーなアプリケーションをインストールして公開する場合
デフォルトのパスワードを変えなければ狙われる
脆弱性が見つかった時点ですぐにアップデートしなければ狙われる
レンタル鯖の管理人でもなければ
どこからもリンクしない適当なディレクトリに展開しておけ
ついでにアクセス制限かけとけ
それだけでほぼ問題はない なんだかんだ批判はあるものの、ウェブ開発においてPHPが業界標準なんですね。 phpMyAdmin自体がPHPで作られてるんだけど。
ところでphpは何の言語で作られてるんだ??? phpMyAdminを複数の場所からアクセス出来るようにするには
SSHのポートフォワードを使えば良い?
IPアドレス制限はIPの管理が面倒 固定IPじゃないとたまに変わるし
VPNは金がかかる
phpMyAdminの認証に加えてBASIC認証orダイジェスト認証+中間者攻撃対策にHTTPSを使っても良いかもしれないが
認証フォーム自体へのアクセスは防げないのなんだかなあ
SSH認証なら有効な鍵を持っている人だけがphpMyAdminにアクセスできる
SSH鍵自体にもパスワード掛ければ更に安全と思う まぁローカルホストからの接続に限定し, 認証と暗号化を備えたトンネルで接続するのであればちゃんと設定した上では安全でSSHポートフォワードでもVPNでも問題ない
VPNもセキュアでフリーな実装のOpenVPNとかあるから別に金もかからん 制限もそんなガチガチの制限かけないで緩い制限でも効果はでかいのでは
攻撃なんてほとんど海外からだからね
jp制限かけられてるってわかればvpnとか通して偽装してくるかもしれないけど
他に狙うとこもあるしそこまでする攻撃者は稀なので 開 2 ち ゃ ん ね る= 便 所 の 落 書 き ・ 痰 壷 の 更 に 劣 化 コ ピ ー の 3 流 掲 示 板
運 営 の 性 格 の 悪 い 引 き こ も り I T 土 方 メ ガ ネ ザ ル 早 く 死 な な い か な >>332
c言語は、web系の言語じゃないと思うが。 >>341
は?
phpはCで動いてるのは常識だぞ >>342
じゃ、そもそもwebシステム最初からCで組めばいいじゃん >>343
別にCで書きたければ書いても良いけど?滅茶苦茶早くなる
あらゆるphpの資産を失うけどね。まぁ頑張って PHP自体が何で書かれてるって聞かれたらそりゃCだろ
PHPだけじゃなくPythonもRubyもCで書かれた処理系が一番使われてる
WebサーバもnginxもApacheもC >>341みたいなのがいるからPHPerはバカにされる 紛れ込んだ初心者か例外だろ
もっと優しくしてやれよ スーパーグローバル変数の前後に.がついてる記述があるんですが
このドットはどういう意味なんでしょうか
例えばsql文をこんな感じで記述してたりするものです
$sql = "SELECT COUNT(*) FROM bbs WHERE name='''.$_POST["name"]."'"; >>349
スーパーグローバルどうこうではなく文字列連結演算子 count(*)だからたいして問題にはならんけど
それはsqlインジェクションの典型コードだから褒められたものではないな $_POST['name']="';drop table bbs";
とか単行でできなかったっけ? >>353
出来ないはず
少なくともsqliteではできない
"忘れてるからでコメント入れとかないとシンタックスエラーになるわ opendir()を使って指定したフォルダ内のファイル名一覧を取得したいのですが、
一つのセッションで何回も opendir()実行すると、その度にディスクにアクセスして
サイトの表示が遅くなりますか?良い方法ありますか? 中身かわったときに読み込んでDBなりファイルに書いときゃいい 静的データ使うのがベストだがopendirの回数を減らす方向だと
処理ステップが多いopendirをする前に
より単純な方法で比較すればopendirまで行かなくて済む
例えばフォルダのfilemtimeをセッション変数にぶっこんどくとか
ユーザ用のデータで外からの更新がないとか
セッション開始時から終了時まで使いまわして問題がないなら
セッション変数にファイル一覧ぶっこんどきゃいい >>357>>358
レスありがとうございました。
>セッション開始時から終了時まで使いまわして問題がないなら
その通りなので
>セッション変数にファイル一覧ぶっこんどきゃいい
そうします。
ちなみにstatic変数を使ってやっても良いですか? ページを表示した時点でプログラムが終了するので
次の動作(ページ遷移とか)をするとstaticじゃ保持されない
だからセッションやhiddenで持ちまわす json_encodeで次のようになるデータを
[
{ "国": "アメリカ",
"地域": "ワシントン",
"人口": 19
},
{ "国": "日本",
"地域": "東京",
"人口": 7
},
{ "国": "日本",
"地域": "大阪",
"人口": 3
},
]
次のようにする方法教えて
[
"アメリカ": {
"ワシントン": {
"人口": 19
}
},
"日本": {
"東京": {
"人口": 7
},
"大阪": {
"人口": 3
}
}
] $a = json_decode($encodedData);
foreach ($a as $v) {
$b[$v->{"国"}][$v->{"地域"}] = $v->{"人口"};
}
var_dump(json_encode($b));
あとは調整しれ
つか>>1 $b[$v->{"国"}][$v->{"地域"}] = ["人口" => $v->{"人口"}];
だった >>362
このくらいなら問題ないんじゃない?
手とり足とりって感じでもないし
JavaScriptも書く身としてはmapもアリかな
$a = array_map(function ($val) {
$res[$val->{"国"}][$val->{"地域"}] = ["人口" => $v->{"人口"}];
return $res;
}, json_decode($encodedData));
と思ったけどJavaScriptほどすっきりかけないからループの方がいいわ $obj->{""}
この表記はあまりなじみがないから
初心者じゃなくても結構悩むかもね phpで二回目にデータを渡すか、ユーザーの入力を待ちたい
////////ページ////////
[続けるボタン]
一回目の出力結果・・・
二回目の出力結果・・・
こんなページが作りたいのですが、
phpに書いたものはボタンを押すとリセットするようで、二回目が作れません
もしくは、while(){ボタン入力まで待機}
こんな書き方をしたいのですが、どちらかの実現方法を教えて下さい gRPCがPHPでRPCサーバーを作るのには対応していないのって何で?
PHP単体で動く(Apacheやnginxを使わない)まともなHTTPサーバーがないのが原因みたいに言われてたけど
それだけ?
そうだとして何でPHP単体で動いて
テストだけでなく本番でも十分使えるHTTPサーバーが無いのか WEB画面から文字列を入力しDBにInsertすると文字の頭になんか変な文字が入ってました。
そこで、テーブル上のデータをSQLファイルでダウンロードして
サクラエディタで見たところ空白にしかみえないです。
しかし、その空白部分を選択してみると、サクラエディタの右下に
U+30AD となっています。何かの文字を表している様ですが分かりません。
これは一旦何が入っているのでしょうか? >>367
JSONで非同期にしたら?
そんな処理でSessionとかcookie使うもんなの? SQLで insert文で 'キ' と入力するとなぜか'キ'の左側に
U+FEFF ← が入ってしまっています。
(U+30AD → 「キ」でありこれは問題ありません。)
BOM??らしいです。なんで'キ'入力の時だけ入るんだろうか。 Laravelのドキュメントってどこにありますか?
公式laravel.jpのドキュメントはインストール設定と期待したものじゃないし
いくつか機能の紹介してるリンクはリンク切れだし
http://laravel4.kore1server.com/docs/routing
唯一まともなクイックスタートもちょっと少なすぎます
なんか1つテーマにしてサンプルを説明つきで作るようなやつはないんですかね PHPはFWが乱立しすぎて首をしめてるな
その点node.jsはどこいってもexpressでいいよだから楽
環境構築でいえばPHPのほうがだいぶ楽だから
サーバエンジニアがいないとどうしてもPHPになってしまうのだろう >>375
他に比べたらオプソFW乱立って程でもない
総じて質が低いのが問題
それに起因するのかオリジナルFWが輪をかけてゴミまき散らしてて首絞めてる このスレで使うFWを統一しよう(名案
そしたら他の死んだスレで一向に答えが来ない独り言しないで済むしな public function foo()
{
return [
'a' => 'b',
'c' => 'd',
];
}
FWでこういうコードを入れる必要があるのですが、
何を意図してこんなことをさせるのですか?
$foo = ['a' => 'b', 'c' => 'd'];
でよくないですか? ここのイケメン先輩達に質問しようと思って質問内容を整理して文を書いていたら、途中で答えがわかりました
ありがとうございました PHPって1リクエストで1プロセス使うの?
効率悪くね?
1万件コネクションあったら1万プロセス生成するの?
無理じゃね? >>383
その辺はうまく最適化されてるからそこまで考えなくてもいい
実際、動いてるっしょ >>384
貧弱なサーバーだと一万もプロセス生成できなくね?
プロセス大量に生成しない他言語の方が有利でしょ WebサーバがPHPを実行する際の仕組みに依存するんだから言語は関係ない
Apache+CGIならリクエスト毎にプロセス立ち上げるし
Apache+mod_phpならApacheのMPM次第だし
Apache/nginx+php-fpmならひとつのプロセスで複数のリクエストを捌くし >>387
>ひとつのプロセスで複数のリクエストを捌くし
同時には無理でしょ?
1万件接続されても1万プロセスは作らないけど
リクエストが来た時割り当てられるプロセスが無かったら
空きが出るまで待たされるってことだろ
nodeはそもそもApacheモジュールとかFastCGIとか使ってなくて
node単体でもHTTPサーバーとして動作するって話だ
nginxと組み合わせる場合はHTTPで通信する
nodeは非同期I/Oだから前のリクエストが終わらないと一切次のリクエストの処理が開始できないって事も無い
FastCGI自体1996年ぐらいに出てきてから
そんな進歩してないっぽいし >>386
もちろんそう
phpは基本Cのラッパーだから、直接C言語で書けば爆速で動くよ
いつ完成するかは知らないけど頑張って
>>388
言ってる意味がよくわからなi
おそらくリクエストが最多のgoolgleやyahooが重くて仕方ないならその意見はわかるけど、
一体何に対しての意見なの? レストランで喩えると
コース料理を全部出し終わるまで
次の客を待たせるのがPHP
料理を作り終わって
客が食べている間に時間が空いても
他の客の料理は決して作らない 客一人に一人ウェイターが付くシステムのレストラン=PHP
ウェイターが5人なら注文を聞ける客は5人まで
それでもレストランで食事がしたい客は待つしかない
混雑に対応するにはウェイターの人数をかなり増やす必要がある
しかし常に大人数のウェイターを待機させておくと暇な時の人件費が嵩む
だからって混雑時だけ応援を呼ぶと対応に時間が掛かる
普通のレストラン=Node.js
一人のウェイターが複数の客の注文を取るので遥かに効率的
混雑していても客はとりあえず店に入って注文を出せる
客の人数がウェイターの人数を超えると一切注文を出せず、料理も来ないPHPとは対照的
混雑時もPHPほど大人数のウェイターは必要ない PHPスレで, しかもPHPに限らないことでPHPをディスってもなぁ
nodeが最適な場面は確かにPHPには向いてないだろうけど, それ以上でもそれ以下でもない プロセス生成(prefork)するので
今でも使われてるのってRubyのUnicornぐらいしか知らない PHPでもnodeみたいな非同期処理を実現するものとして
php-pmとかSwooleがあるけど
本番で使ってる奴なんておらんやろ? 非同期処理でややこしくするよりかはサーバー増やしたほうがよっぽどコストがかからん Swoole使うと
最大で30倍近く速くなるらしいのでそれは暴論 1万リクエストあるからって1万生成されるわけじゃないし
プロセス生成数なんて気にする必要はない 実際Node.jsでそれだけ回すと非同期(笑)状態がよくあるしな https://laravel-news.com/laravel-swoole
nginx/FPMの一般的な構成だと80.93リクエスト/秒なのが
Swoole仕様では8717リクエスト/秒に増加している
30倍どころか100倍以上
同期(笑)
メモリリークや不具合を起こす危険と引き換えに時間の掛かるPHPやフレームワークの初期化も省略できるからな
そりゃ早いだろ
php-pmはメモリリークを防ぐために一定数のリクエストを処理後に再起動出来たが
Swooleは知らない Swoole自体は面白いと思うけど, FPMのチューンが分からないからその比較に意味は無い
仕組み上捌けるリクエストは増えると思うけども Swooleって何?PHPのアプリケーションサーバー? 非同期ネットワークIOの拡張モジュール written by C reactphpとはちがうのん?よくわからん・・・ 使ったことないからアレだけど, 機能的には重複すると思う
Cで書かれた拡張かPHPで書かれたライブラリかの違い なるほど、じゃSwoolのほうがよさそうだね
日本語資料少ないけどちょっと使ってみよう Falconみたく中身弄れる人限定とかじゃないの? 従来PHPですべてやってたことを
PHP+AngularJSで開発しようとおもってます。
この場合PHPが行うことはWebAPIとして入力値からCRUDして
JSONなどAngularJS側で使うデータの出力でいいんですよね? >>411
どうもありがとうございます。
作ったことはないのですが、確か最近の応用情報かなんかの過去問見たとき、
WebAPI作る問題出てて、そこでも確かにHTTPSでBasic認証してました。
ちゃんとWebAPIの作り方調べてやってみたいと思います。 >>412
何で例に出すのがBASIC認証なのか
APIならOAuthとかじゃねえの 自分一人が個人的に使うシステムでも無い限り
OpenAPIやSwaggerで仕様を明確化した方がよい
あるいは昔ながらのREST APIではなくGraphQLでも良いかもしれない
RESTは自分でも作れるかもしれないが
GraphQLは割と複雑な仕様なのでライブラリーが必須
OAuthはOAuthで難しい
変な実装をすれば車が通れる程の大穴セキュリティホールが開く
https://www.sakimura.org/2012/02/1487/ プログラミングを誰でも習得できる方法は、「前場アキドルのプログラミングマスター方法」というブログで見られるらしいよ。ネットで調べると見られるらしいです。
5648W 掲示板が作りたくてデータベースとのやり取りをするPHPとそれのインターフェイスとなるHTMLを作りました
投稿時の想定は「まずHTMLにアクセスしてそこで項目を入力してPHPを通してデータベースにデータを入力」です
これはAjaxやPDOを使うことで作ることが出来ました
しかしHTML(JavaScript)のソースコードからPHPのファイル名を見つけてPHPを直接叩くことで簡単に荒らしが出来てしまいます
この問題を解決したいと思い、PHPをドキュメントルートから外したのですがそれはアクセスが出来ず失敗に終わりました
皆さんはこのような問題に対してどのような対策を施しているのでしょうか? 相手が荒らすのに苦労する仕組みを作るといい
1文字 同じ文字のみ 英数字のみ URLとかスパムに使われそうなものを制限する
連投制限の仕組み作る(IPベース、クッキーベース、セッションベース、それら組み合わせ)
若干面倒な登録を経て登録者のみ投稿できる会員制にする
ログと投稿をつきあわせて類似度を比較する(処理は遅くなる)
AIで意味のある文章か判断する(PHPerには難易度が高すぎる) 直接PHP叩くのと、フォームから入力するのと、
マクロにとっては荒らしのしやすさになんの差もないと思うのだけど。 reCAPTCHA v3ではユーザーのアクションなしに相手がロボットがどうか
判別できるようになるらしい 回答ありがとうございます
>>418-420
ワンタイムトークンが良さそうだと思いました
>>421
マクロだと確かにそうですね
IPアドレスで連投を規制したりすることも検討してみます PeachPieって言う.NETでPHP動かす環境あるらしいけど
どうなの?
そもそも使い物になる? >>424
使ったこと無いけど、ASP.NET Webサーバー使ってるなら良さそう
ってかそれ意外になにもメリットなさそう PeachPieはtechempowersのPlainTextのベンチマークでは99位
それでもFramework OverheadでPHPより1.87倍ぐらい速い
https://www.techempower.com/benchmarks/#section=data-r16&hw=ph&test=plaintext CILにコンパイルされてから実行されるわけだからパフォーマンスは向上するわな(Phalangerと同じ)
あとはエクステンションがどのくらい互換性持って提供されるかだと思う
使い物になるかで言えば公式が「まだexperimentalだよ」って言ってる以上は(productionでは)全く使えない
>>428
plaintextのベンチとか意味あるの? 単なるプレーンテキストの送信でも言語やフレームワークによってかなり差が出るのは分かる
PeachPie自体はまだ実験的な物ではあるが
WordPressは既に動かせるらしい composerってメモリ使い過ぎじゃね?
サーバーの利用可能なメモリが少ないとSymfony4のインストールすら完了しない
composerのロックファイルは
十分メモリのあるローカル環境で作り
メモリーの少ないサーバーではロックファイルからcomposer installするのがオヌヌメらしい
とは言えもう少し少なく出来ないのか? >>410あたりを見て気になったんだけど
API作るというだけでは認証機構入れる必要これっぽっちもないよね?
BASIC含め簡単なものや固定のものは投げてる要求確認すれば丸わかり
バッチ等からのアクセスが主だったり他サイトに利用させるとかが絡むなら
事前認証してtoken吐いて……って機構が必要かもしれないけど>>410はブラウザ経由
認証つけるにしても、もしAPI以外でログイン認証してるならそっちのセッションをそのまま使える いろんなところから利用可能にするためにWebAPI使うんじゃないのか そらTwitterみたいに本家がユーザ認証前提の仕組みで他所でも認証してあーだこーだって話なら、な
例えばYahooのルビ振りWebAPIなんかは認証なんてない composerはなぜかパッケージのダウンロードが一個ずつって特徴もある
並列化する非公式プラグインはあるが
何で公式は並列ダウンロードしないのか
https://github.com/hirak/prestissimo 並列ダウンロードが当たり前の他のパッケージマネージャに慣れていると
遅く感じる
プラグイン作者によるプルリクエストがcomposerにあったが
マージされるのはいつか分からない そもそもcomposerってなんで出てきたの?
必要なのこれ
composerじゃなきゃダメなことなんかあるの フレームワーク使いたい奴には必須かもしれないけど
それ以外は別に使わなくても問題ない っていうイメージ
つか何故公式が云々って公式の気持ちなんか知るか国語のテストかよ composerの中の人は忙しいので
並列ダウンロードは皆があったら便利だと思う機能とは知っているが
優先度を低くしている
そんな感じでプルリク作成から2年経った composerは車輪の再発明が嫌いな
再利用大好人間たちがコードを持ち寄って使いあったり
そこから新しいのを作るためのなれ合いツール pear/peclが要らなくなるわけじゃないんだよな composerにあるライブラリって全部PHPでしょ?
pearを進化させたようなもんだよねたぶん ComposerのロゴはGo以来のイラッと感を覚えるわけよ PHPの拡張ってプロジェクト毎にはインストール出来ない?
拡張を実行時に動的に読むdlって関数が昔あったらしいが
削除されてるし
dlは使い物にならなかったのか
他言語ではC拡張のあるライブラリも
他のライブラリと同じ様に
そのプロジェクトだけのインストールができるのが普通 >>459
現状出来ない
実行時に拡張をロードする機能自体が存在しないのでどうにもならない
やりようがあるとすれば実行時ロード機能を提供するPHP拡張を作成することくらい
PECLに登録して最終的に本体にバンドルされるところまで至らないとエコシステムには取り込まれないだろうなぁ
rasmusとかandiとかzeevとかの基幹メンバーがとんでもなく保守的だし正直何やっても絶望的だと思う
この辺は割とマジで根本的に設計上の欠陥だと思うわ .phpから拡張を読み込むことができるようになると
セキュリティホールが量産されそうな気がするが
その辺、大丈夫なのか? 何となくそういう懸念が浮かぶのは分かる
ただ他言語, 具体的にはPythonとかRuby, Nodeなんかでは頻繁に使われてる
system系の関数使って実行ファイルを叩くのとどう違ってくるのかと考えると別に実行時に拡張ロード出来ても良かろう(dlが削除されたのは安定性が理由だと書いてあるし) PHPの用途で動的に読み込めると何が嬉しいのか、
まともな理由がないから削られちゃったんだろ プロジェクト毎にPHPインストールすりゃいいんじゃね >system系の関数使って実行ファイルを叩くのとどう違ってくるのかと考えると
systemやexecは、php.iniで包括的に設定するしか手がない disable_functions 設定で禁止できる
かなり違うんじゃないかね
http://php.net/manual/ja/info.configuration.php#ini.enable-dl
>このディレクティブは、Apacheモジュール版のPHPを使用した場合にのみ 有用です。
>PHPの動的ロード拡張機能をdl()で 仮想サーバー毎またはディレクトリ毎にオンまたはオフに変更することが できます。
>
>動的ロード機能をオフにするのは主としてセキュリティ上の理由によります。
>動的ロード機能により、 open_basedir の拘束を全て 無視することが可能になります。 そもそもdlって最近は削除されて使えないんじゃなかったの? exec使える状態って
アホなアップローダとか置いてた日にはopen_basedirの拘束なんて無視して好き放題されちゃうよね >>466
いや, php.iniだけで動的モジュールロードの可否を与える(php.iniのみで設定可能な)ディレクティブがあれば一緒だろ
自分でdlの例出してるじゃん
mod_phpで実行する場合は権限がWebサーバになるからそれが嫌だというのはよく分かるが dlは安定性に問題があるから削除したって言うけど
他の言語で出来ていることが何で出来ない?
PHPはリクエストの度にメモリの内容破棄するから? extensionの動的ロードしたいってどんなとき PHPは巨大化し過ぎた
山ほどあるビルトイン関数を削除して
プログラミング言語に最低限必要なライブラリだけをOOPで作り
使うかどうか分からない機能は動的ロードするようにすべきだ
そんな事したらもうPHPじゃない?
そんなの知るか そこまでするならフォークして別言語にしろ
QIQとかかっこいい名前付けてもいいぞ >>477のセンスを向上させるにはどうしたらいいですか ビルトイン関数なんて削っても
PHP本体のソースコードがすっきりするだけで
別に劇的に早くなるわけじゃないしユーザ側が受けるメリットなんて大してないだろ すっきりしたら
ごちゃごちゃの状態よりバグが少なくなったり
本体が小さくなるとかのメリットはある
配列とか文字列がプリミティブ型みたいな扱いなのも
なんとかしる
array_系の関数が重ねて適用しようとしたら使いづらいったらありゃしない デフォルトでなんでもアリだからこそ受けてると思うんだけどな
今の時代で多少軽くなってもたかが知れている。ってかそもそもそんなに重くないだろう
そんなに重いならsmartyでも使えばphpの負荷は大きく下がる ビルトイン関数使ってたら
テストを書く時モックするのが難しい
time()とかrand()とか
名前空間使ったハック(\timeのように書いてると不可)やPHP拡張を使う方法もあるが
他の言語だとそんなの必要ないじゃん
キモい
テストを全く書いてない奴はお帰りください rubyのnokogiriみたくネイティブライブラリをラップするライブラリって使えれば需要あると思うけど
特にcomposerが普及した今なら更に php4時代のコードでも少しの変更でphp7で動くようにできるというのがphpのメリットで
何するにしても後方互換の問題があるわけで
pythonのような英断をしなければphpが変わることはないし
成熟してしまって時期的にそのチャンスはもう逃した
お前らがforkして新php作ればいいよ
まあオリジナルの差分をコミットする作業が面倒で3日で匙投げるだろうが pythonはpythonで2と3が両立していた時期があってあれはハチャメチャだった php++の前段階として既存の糞ビルトイン関数のラッパークラスをphpで作ればいいよ namespace php\lang;
class String extends Object
{
public function __construct($_str)
{
if (is_string($_str)) $this->str = $_str;
}
public function htmlEscape()
{
$this->str = htmlspecialchars($this->str, ENT_QUOTES | ENT_HTML5, 'UTF-8');
return $this;
}
} あらゆるライブラリがそのラッパークラスとやらに対応してくれないと
何度も変換する必要があって使いづらい イメージ的にはJavaScriptに対するjQuery
jQueryの書き方に慣れてきたころにjQueryの構文やオブジェクトを実装したJavaScript2登場みたいな PHPの言語仕様が嫌だが
PHPのライブラリや既存コードも使う必要があるってなら
他の言語で書いてPHPに変換出来るAltJSならぬAltPHPを使えば良いかも
ただ、PHPの場合それが出来て
ある程度人気があるのはHaxeだけだと思う
JSは本当に色々あるのに
https://stackoverflow.com/questions/6551089/is-there-anything-like-coffeescript-for-php HackはPHPと互換性があるがVMも違うやつ使う必要があるから
AltPHPでは無いよね そんなにjsがいいならjsの子になっちゃいなさい! JSはブラウザで動くのがJSしか無いから
AltJSみたいのが生まれたけど
サーバーサイドは別に代わりがいくらでもあるしね ブラウザで動くのがjsしかないのが異常というか
jsだけとはいえブラウザで動かせること事態が本来異常というか jsで、任意のファイルを読み書きできるの?
出来てしまうとセキュリティ上やばい気がするのだが。。。 >>502
なんの話?
ブラウザのJSは勝手に他サイトやファイルシステムの内容を読めるAPIは無いし
脆弱性を利用してブラウザのセキュリティを突破しようにも
サンドボックスがあったりして難しい サーバサイドプログラムでjsを使う場合の話です。
任意のファイルの読み書きはできるのでしょうか? node.jsならできるよ。
require('fs'); jsだからどうという話ではないな。nodeがそうだというだけで。 >>502=>>504なら
なぜPHPならセキュリティ上問題ないと思った?ていう
まぁ多分本人が考えてることと他のやつが考えてることが違うのだろうけど このスレであってるかな…?
掲示板を作れるようになりたいんだが、正直マジでCSSとHTMLと少しのPHPの知識(スクレイピングなど)ぐらいしか知識がなくてどういう仕組みなのかわからない。
PHPで掲示板って作れる?
理想としてはガールズちゃんねるそのまんまなのが作れたら最高 掲示板と言っても、DBを使う/使わないで難易度が大きく変わる
作らなくてもその辺にサンプルどころかそのまま使えるものが山程落ちてるよ
それを改造するところから初めてみては >>513
DBを使わないPHPの簡易掲示板はコピペしたり改造したりしてなんとか作れた。
ただ、txtファイルに書き込みデータを保存する方法だと簡易的すぎるかなと。
理想はガルちゃんみたいにユーザーが自由にトピックを立てられる形にしたいから、DBを使ってやりたい…
どっかにわかりやすい雛形でもあればいいんだけど、何から手をつければいいかすらわからない… >>514
俺も昔やろうとしたんだけど、掲示板はセキュリティに気をつけないとあっという間に終わる
更にセキュリティ的に問題なくても、連投や巨大投稿、大量の改行コードだけの投稿などをどう取り扱うかで永久に終わらない
トピックというかスレでいいなら
「2ch風掲示板 cgi」
「2ch風掲示板 php」
この辺で検索してみてはどうかな 要求仕様を実現するのに最低限必要なことと、そうでないことを切り分けられる頭がないと無理
ガルch形式のbbsも2ch形式のbbsもc, perl, php, その他わりとどんな言語でも作れる
それとtxt方式かDB利用かは直接関係ないし
どちらにしてもどのようにデータを読み書きするかという設計を自分で出来ないと話にならない
コピペと改造でなんとか、ってレベルで何が簡易的なのか判断しようとしてる時点でおかしいことに気付け まぁこういうアドバイスはガン無視して、結局自分で作ってから気づくんだよね
俺の時もそうだった
とりあえずDBは使わない形がいいよ、セキュリティと言う名の闇が待っている cgi拾ってきてcssとjs設定すれば終わりなのに、何でそんなに難しくしたがるんだろう テキストかデータベースかは、見た目や運用上の設計には関係ないから、とりあえずテキストでいいと思うよ。
書き込みや読み込みの処理の部分をあちこちでやらずに1箇所で行うように設計すれば、あとでデータベース式に変更するのも修正箇所が少なくて済む。
テキストファイルは拡張子をphpとかplとかにして、直接アクセスされたら実行エラーになるようにしておけばよいかと。 BBS {
int createThread(string $title);
bool deleteThread(int $threadId);
Gererator readThread($threadId);
bool writeThread($threadId);
bool saveHTML(string $template);
} >>515
っぽいねー。
実はtxt自動生成して書き込み保存する簡単な掲示板を設置して見たことがあるんだが、放置してたら謎の大量文字化け(スクリプト?)の投稿で荒らされまくってダメだった… >>516
ありがとう。
txtかDBってとこがポイントではないんだね。
txtファイルでも書き込み内容の分類やら保管やらをしっかり設計できれば運営していけるってことか…。
なんとなく通常のサービスはDBを利用してるからDBが正義だと思ってたわ。 まぁ最初から完璧なものなんて作れるわけないしまずはウダウダ言ってないで動くものを作れと >>522
海外アクセス弾くだけでほぼ無くなる。「htaccess 海外 拒否」などで検索
もしくはNGワードの処理をかます。
これは書き込み後にテキトーに判定してdie()するだけでいい。めんどくさい事は後で考えて、生産的な事をまずやろう >>525
私は書き込み文字の中に全角文字がひとつも無かったら、「全角文字を含めてね」ってメッセージを出して弾くようにしたら、海外のスパム書き込みは100%排除できました。 >526
頭いいな、いろんな意味で完璧な対策と思う
素直にすごい >>528
確かに中国語だと弾けないですね笑
でも今まで中国語の書き込みは無いです。
てか、もし私が中国のスパム業者なら、日本や欧米の掲示板に中国語で書き込んだりせず、書くならやっぱり英語だと思います。 考える人より手を動かした人の方が早く覚えるよ
まずは本買うなりサイト見るなりして作ってみればいい 外部設計と内部設計の違いもわからないような奴が
いくら本を読んでも手を動かしても100%無理
既存のサービスやプログラムをとっかかりにして
仕様も機能もひとつひとつなぜ存在するのかなぜこうなってるのか学ぶしかない 公開されてるのもある
公開されてないものも設計を考える力を養うにはもってこいの材料 !omikujiみたいな公開しないとわからん機能じゃなくて
使ってて目に見える部分であれば
たいていどういう風に作るかイメージが沸く
このスレの人はtwitterだろうがfacebookだろうが作ろうと思えば作れるんじゃないか?
気力がない 作っても流行らない うっかり流行ったら500との闘い 解消するためにサーバ月何十万
PHPerの限界とは経済力と時間の限界なのである AWSもLinuxもそこそこ扱えるし作ろうと思えば作れるけど、
レッドオーシャンに飛び込むような元気はない 機能それぞれ単体なら比較的容易
全部まとめて、さらにセキュリティ、速度、……となると設計だけでも
かなり複雑になってくるから時間がかかるようになる
ただ、10年前の自分じゃ機能単体もおぼつかなかったと思う >>536
今の知識もったまま20年前にタイムスリップしたいよな 【放射能の影響か?】 道路の真ん中で直立不動で失神しているトンビ、多発している認知症事故と関連!?
http://rosie.5ch.net/test/read.cgi/liveplus/1531880720/l50
動物まで意識障害? JSのように
$a = 10;
$b = $a || 20;
echo $b; //20
にならんかなあ
これ糞便利なんだけど
論理演算子はorだけでもいいよねえ $a = 10;
$b = $a || 20;
echo $b; //20
ごめんこれ10だわw
$a = 0って書いたつもり null合体演算子(??)を使え
短絡評価した結果何を返すのかなんて後から変えられるわけねぇだろ 型ってもんがあるからtrue/falseで返してくれないと怖い >>545
いっそそこまで覚悟出来るならやればいいとは思う
混乱はあったけど結果としてPythonの決断は正しかったのだろう
とは言え短絡評価を結果をbooleanにするのも最終評価値にするのも良し悪しだからなぁ 何が入るかわからないのがな
最悪を想定するなら短絡評価の前に中身の判別を入れなきゃならない
想定した型かどうか事前に判別するなら短絡評価要らない $b = (!empty($a)) ? $a : 20;
NULL合体演算子はissetだからだめだな JavaScriptも三項演算子使えるんだからそれでよくね
短絡評価は言語ごとに差があるからあんまり使いたくない 愚直でもわかりやすい判断分岐で書かれてると読む人間にはありがたい なんでも短絡や三項にすれば短いだろってより
素朴にIF文使って書いてある方が
読みやすい場合が多々あるな ネストしてないに限れば三項演算子は読みやすいな
条件部分を>>548のようにちゃんと()で囲ってればif文の変化形にも見えるし
コーディング規約で禁止してるとこは結構あるし賛否両論なのは確かだが phpで三項演算子のネスト書く奴は頭からカレーかけられても文句言えない
ネスト階層が深けりゃコーンスープ付き ifだとクロージャー使って即時実行したくならない?
if (!!$a) {
$b = $a;
} else {
$b = 20;
}
$b = (function() use ($a) {
if (!!$a) {
return $a;
} else {
return 20;
}
})();
上だとなんか感覚的にいやだ 何に代入しているのかを特に明示したいならそれでいんじゃね
単純な代入ならインデントで即わかるとは思うが
読みやすさわかりやすさを理由に(if等で)わかりやすい分岐を・・・って話の流れで
if使いながら$aそのまま(のbool変換値)ifに流すだけなところと
ifに渡すだけの箇所で!!$aってやってるところが意味不明だが > !!$a
これ、 $a == true と等価だよな?
数文字タイプする手間を惜しんで2回反転させる計算コストを発生させてる? booleanキャストのつもりで使ったが
確かにいらんな !!って書けることを知らなかったw
!!!もできる? >>560
その発想がなかったから、そんな事できるんだって目から鱗なだけ。 いやだからさ、そんな事もできるんだ!
すごい面白い!
じゃあ何個まで重ねられるんだろう?って話だよ。
どこかでエラーにされて怒られるとは思うけどさ。 eval()あんだから自分で試してみりゃいいじゃん >>554
下はJavaScriptが好きそうだな
「名前空間が汚れる」とか言って
でも上のシンプルな方が読みやすい
>>556
>$a == true
これもこの素朴な方が分かりやすい
「!!$a」とか多用すると読みにくい
トリッキーな書き方より
それを抑えて読みやすくする方が大事 >>550
>>551
同意
書く方は短い方が書きやすいんどろうけど 短く書くことが目的化してるコードはバグ出やすい上にデバッグし難いんだよなあ でもさすがにisset($_POST/$_GET)は三項演算子使うでしょ? >>570
filter_input 使うから、使わない まとめて初期化、まとめて確認って手もあるしなあ
スタンダードというわけじゃなし filter_inputってバリデーションでしょ?
issetしたあとに使うものだよね? その辺の処理は各々好きにしろとしか
・NOTICEが出ない
・その後の処理でバグを生まないようにする(デフォルト値設定、検証除去etc)
これが出来てれば良いわけで >>573
マニュアル読んでみ。幸せになれる。スーパーグローバルから開放されるぞw >>554
elseまでいかんでも
$b = $a;
if (!$b) $b = 20; >>575
後々、それが出来てるかどうか、バグを生んだのがそこかどうか確認するのに
文字数少ない代わりにわかりにくい書き方とか最悪だろって話 $aの型が例えばintなどと保証されてるのか?
保証されてるなら!$aなんてint(0)の判別にしかならないのに直感的じゃない
保証されてないなら'abc'やarray(0)が来た時どうすんの 三項演算子の何がわかりにくいのか理解に苦しむな
ワンライナーで書けるってだけでif-elseと変わらんのに
(condition)
?
when-true
:
when-false
; プログラム書く上で1行で書けるかどうかってなんか価値があるの?
コードゴルファーphp? if( ~~~~ ) ~~~~; else ~~~~;
三項演算子の特権じゃないじゃん >>581
1行だ短いだなんだじゃなくて、何がわかりにくいのか理解不能 ワンライナーって見ただけで私アホですと脳内変換されるわ >>585
ワンライナー
-rオプション使いまくってる人?えっ違うのですか?
ぺちぱー
吠えてるだけ 価値はある
行数ベースで費用計算してるとき安くなる 三項演算子は短く書くためのものじゃないが。
その程度の理解なのなら自分で言ってるように使わないのが無難だな。
無駄にマウント取ってるのは笑えるがw
ifelseは組み込み制御構文で三項演算子のように式が要求されるところには置けない(評価されて値になれない) 同じことが実現できる場合の書き方の比較であって
誰もそんな当たり前の話しとらんのだが ないよ。正確にいうと関係ない。
一行で書くためにあるものじゃないからね。三項演算子は。 なんで話の流れと関係ないのに、三項演算子だけの特権でもないのに、ワンライナーで書けるってことをわざわざ書いたの? ん?俺がワンライナーとか言ったのがまずかったのか?
普通三項演算子はワンライナーで書くもんだからそう言っただけなのだが
別にそこはメインじゃないし主題ではない
?:という2つの演算子しか使っておらず、間違い探しをするようなものでもなく
何がわかりづらいのか理解できないって話をしただけ
ちなみに会話してんの俺じゃないぞ・・・ 少ない行がいいなら最期に¥rと¥nを置き換えて1行にすればいいやんm >普通三項演算子はワンライナーで書くもんだから
俺ルール広めようとしないでくれない? 主観ではあるけど
googleで画像検索したりしても、実際ワンライナーが多数派じゃない?
そもそもネストするようなケースじゃほとんど使われないし
これも主観だけど感覚的に正しいと思う 改行とインデントで整えないなら1層ですら可読性低いんだけど
しかし、なんで一行・1行などと書かないでワンライナーって書くのかね
文字数多いじゃん検索用ってか if (age < 18) {
if (gender == 'male') {
title = 'Master';
} else {
title = 'Miss';
}
} else {
if (gender == 'male') {
title = 'Mr';
} else {
title = 'Ms';
}
if (age < 18) {
title = (gender == 'male') ? 'Master' : 'Miss';
} else {
title = (gender == 'male') ? 'Mr' : 'Ms';
}
title = (age < 18) ? (gender == 'male') ? 'Master' : 'Miss' : (gender == 'male') ? 'Mr' : 'Ms' 可読性の定義は人によってさまざまだけど
長ったらしいのはかえって可読性が下がると俺は思う
>>601では真ん中が一番読みやすい 一番上がおかしかった
if (age < 18) {
if (gender == 'male') {
title = 'Master';
} else {
title = 'Miss';
}
} else {
if (gender == 'male') {
title = 'Mr';
} else {
title = 'Ms';
}
}
やっぱこれは俺にはあってないな >>605
これPHPじゃないし
三項演算子の可読性について、stackoverflowで引き合いに出されてたコード
PHPは評価の仕方が他の言語と違うので
そもそも一番下のようなコードは書いたことがない >>602
同意
ネストしないなら3項演算子がシンプルでよいがネストさせるヤツは死ねと思ってしまう 俺Pythonistaだけど、{}が読みづらい原因だから、こうするといいよ。
if ($age < 18)
if ($gender == 'male')
$title = 'Master';
else
$title = 'Miss';
else
if ($gender == 'male')
$title = 'Mr';
else
$title = 'Ms'; $titles = [
'male' => [ 'u18' => 'Master', 'other' => 'Mr' ],
'female' => [ 'u18' => 'Miss', 'other' => 'Ms' ],
];
$age_category = ( $age < 18 ) ? 'u18' : 'other' ;
// もしくは
if( $age < 18 )
$age_category = 'u18';
else
$age_category = 'other';
$title = $titles[ $gender ][ $age_category ];
一定以上複雑なときはこうしておくかな
判断が増えたとき処理構造を大変更したくないから
というか、性別やu18かどうかをフラグで持っておくのが普通だと思うが
三項演算子だとすごく短い2つの文字列どちらか選択とかならまだいいけど
関数や式が絡むと : の区切りがわかりづらくなるんだよな 実務的にはそれぞれ属性を自分のobjectに聞いて、って感じのが多いかな stackoverflow探してみたけどそれっぽいのが見つからないわ echo 'こんにちは、' . ($name && strlen($name) > 0) ? trim($name) : "anonymous" . "さん";
$name = ($name && strlen($name) > 0) ? trim($name) : "anonymous";
echo "こんにちは、{$name}さん";
var = a ? b : c;を徹底して、
それ以外を組み込んだ、上のような使い方をしなければ問題ないと思う。
Viewには処理済み変数のみを埋め込むのを徹底すればいい。 表示名の場合はだいたい
$nameを先に'anonymous'で初期化しておいて
セッションがあってDBから取ってくる等の時に$nameを上書きする
ってやるよね 条件2つ処理する2x2の構図でも
条件1の結果によって条件2の式自体が変わる場合は
Balancedケースでも可読性落ちるよね 三項演算子を使うときに可読性が落ちない条件を突き詰めていくと
一重であることと
代入される部分が簡潔で統一されてることのほかに
条件部分が簡潔で統一されてることも必要だと思うんだ
18<=ageのときは性別にunknownやnewhalfが追加されたら、途端に難解になるし
age<18ではgender==='male'だけど18<=ageではchecktitle(age,gender)の戻り値だったりすると、わりとめちゃくちゃ
でもそうするとvar=(a)?a:20;みたいな条件になりがちになって
短絡評価のわかりにくさの話に戻るんだよね
$var = (expr) ?
value1 :
value2 ;
みたいな書き方だったら多少複雑でもいい 簡潔じゃないと1重なのか2重3重になってるのかパッと見てわからないからな
その辺ifでは迷ったことがあまりない > 18<=ageのときは性別にunknownやnewhalfが追加されたら
そこまでくると>>603が良さそう
1(under18)
2(over18)
4(male)
8(female)
16(unknown)
32(newhalf)
ちなみにnewhalfじゃなくて
shemaleとかladyboyが正しいおっぱいおちんちんMAN なんだそれは
ageもgenderも1つに閉じ込めてbit演算するならunder18/over18は下位1bit、genderは以降上位bit、ってとこだろう
maleやfemaleを両方選択可能の並存状態にしてどうするんだよ
2値が1種、4値が1種なら3bitで済むだろう そもそも話題が>>618の趣旨とは離れることだが、1点付け加えると
条件がどう動くかわからず拡張性を考えるのであれば
愚直にifやswitchで構造化するか
>>610のように1つ1つ条件を絞れば引き当てられるtableを作るのが筋だろう
ageの判定処理は完全固定と断定できないだろうし
age自体を現在日付とユーザ誕生日設定によって動的に取得させることになる可能性がある
フラグ化してのbit演算では柔軟性・拡張性に乏しい、全然良さそうじゃない elseifを使えばネストなく簡略化できる
sql のselect case見たいな表記できる
if ($age < 18 and $gender == 'male') {
$title = 'Master';
} elseif ($age < 18){
$title = 'Miss';
} elseif ($gender == 'male') {
$title = 'Mr';
} else {
$title = 'Ms'
} $title = [
5=>'Mr', 6=>'Master',
9=>'Ms', 10=>'Miss',
17=>'Mr/Ms', 18=>'Master/Miss',
33=>'Mx', 34=>'Mx'
];
switchは伸びがちになるしテーブル作るより遅くなるけど
可読性の面では
case GENDER_TS+AGE_UNDER18:
case GENDER_TS+AGE_OVER18:
$title = 'Mx';
みたいに出来るから考えようによってはいいかもね あ
配列も出来るらしい
$title = [GENDER_TS+AGE_UNDER18 => 'Mx'];
みたいに
知らなかった >>610と比較して1次元になるだけでメリットはないな >>625
ぱっと見何やってるのかよくわからない
三項演算子もそうだけど結局読む人のレベル次第だな >>629
三項演算子だと処理が煩雑になるほど記述が鬱陶しくなるか難しいかのトレードオフじゃん Pythonにすれば良い
$bar = $fooVal == 10 ? $trueVal : $falseVal
の代わりに
$bar = $trueVal if $fooVal == 10 else $falseVal
みたいに書けてちょー分かりやすい phpどころかビット演算というプログラムの基本すら知らない奴が居付いている 関数型言語では同じ変数に何度も代入するって事は基本やらない
明示的に値を変更可能な変数にすれば再代入可能だが
乱用すると関数型使う意味が無くなる
なぜ再代入を避けるかって言ったら
理由は色々あるが
一番はバグの原因になるから
ScalaにもPythonのような式扱いのif文があったり
switchが無く代わりにmatchを使うのもそれが理由 ビットフラグ立ててるだけでビット演算をしてるわけじゃないからな 初見のわかりやすさってのはシンボルか単語かの違いってのが大きいのだろうけど
みんな大嫌い正規表現だって慣れれば大したことはない
三項演算子はネスト出来ることが問題なのであってネストしなければ問題はないのである 正規表現わけわかんないよ
慣れるしかないんだろうね どこまでが条件部かどこが区切りか
誰が見ても即座にわかる単純明快なケース限定ならいいかもね
それかキッチリ改行入れること 改行が減る=行数ベースの料金が下がる
文字数が減る=文字数ベースの料金が下がる プログラムがより単純化するのは流れであって
コード単価あげるか 成果物に対して報酬をもらえばおk 正規表現はperl時代に超覚えてマスターした気になっていたが、
PHPやJavaScriptだと微妙に違ったり後方参照も違ったり、
なんか1日中悩んでたりする。 >>643
慣れの問題だと思います。
PCREなのに使いこなせない自分が情けない…
preg_matchすら悩むw parse_ini_fileの結果を取得するときに、
セクション名そのものを取得したい場合はどう書いたら良いでしょう? ありがとうございます。
それは知っていたんですが、そういう次元じゃなかったです。
変数名をtypoしていただけでしたw
お騒がせしました… Windows版のPHP7(XAMPP)で、posix関数を使うにはどうしたら良いですか?
今は特に何もせずにデフォルトインストール状態で、
関数がundefinedエラーになってしまいます。 http://php.net/manual/ja/intro.posix.php
>注意: この拡張モジュールは Windows 環境では利用できません。
どうしたら良いかというと、VirtualBoxでWindowsの上にLinuxを乗っける、などしか手はないかと 了解です。ありがとうございました!
OS判定して、Windows版の時はその処理はスルーして目を瞑ることにします。
PHPはやっぱりLinuxの方がいいですね。 ActiveRecodeのORMはたくさんありますけど
パフォーマンスが特に優れてるおすすめのものありますか?
処理性能重視したらPDOでSQLゴリゴリ書いたほうがいいのでしょうけど
いまいち自分のSQLに自信がもてないのでSQL書くのは減らしていこうと思っています どれでも大差ないんじゃね?
一番メジャーなのを使っておくのが後々のため… DB設計を確認したほうがパフォーマンス改善効果見込めるのでは 俺がそうなんだけど、抽象化がたりないとSQLベタ書きDAOパターンになるよね。 元DB屋的にはORMで結合グチュグチュやるより
出来るところはビュー作っといた方がいい希ガス DB担当に流せる仕事は最大限DB担当に流してしまえという風潮
合理的だと思う composerってなんでjsonわざわざ書くの?それが主流みたいだけど
installコマンドは一応用意されてるんだよね?
なんか理由あるんですか? installじゃなくてrequireか
composer require 'namespace/some_package.3.2.1' 流行り
かっこいい気がする
OSSのフロントエンドはこんなノリ 質問失礼します。
2つサーバーを試行錯誤しながら立てました。
サーバー@には Environment で USER と HOME の設定がありません。
サーバーAには phpinfo で Environment の USER と HOME が設定されているようでした。
--------
USER hoge
HOME /home/hoge
--------
Environment の設定している場所を特定したいのですが、どこを見たら良いでしょうか?
/etc/httpd/conf/httpd.conf
/etc/sysconfig/php-fpm
/etc/sysconfig/httpd
上記のファイルは調査しましたが hoge が見当たりませんでした。
よろしくお願いします。 そのapacheを起動した人が手順を知らないか間違えてるんだと思うぞ。
環境変数が付いてる方の起動方法を間違えてる。
個人のプロセスじゃないのに、個人の環境変数を引き継いでどうすんだよw
serviceコマンドとか使わずに、いきなりhttpdを起動したんじゃないかと。 > Environment の設定している場所を特定したいのですが、どこを見たら良いでしょうか?
hogeユーザのHOMEディレクトリ指定はApache httpd側ではなくOS側
/etc/passw d
たぶんLinuxだと思うけど、ならここに書かれてる
ただし、わかってるなら直接編集してもいいけど通常はコマンド経由で変えるもんだと思う >>667
>環境変数が付いてる方の起動方法を間違えてる。
>個人のプロセスじゃないのに、個人の環境変数を引き継いでどうすんだよw
別に$HOMEが設定されてること自体はあんまり問題じゃないかも
個人の環境変数を引き継ぐ、というのも……じゃあ誰権限で実行すんの?ってことだし
"service httpd"等で起動していても、誰かの権限で動くのだから
※Windowsだとサービス化してればlocalService権限だっけ
んなことよりデーモン起動ユーザのシェルを/sbin/nologinにしとこう どんなユーザ権限で実行しているか等は基礎の基礎
起動ユーザ権限のことを知りたければhttpd.confのUserとGroupの説明をよく嫁そして100%理解しろ かの有名なqmailの作者であるdjb様は、
env - /path/to/bin
のような起動方法を推奨してたぞ。
って今時そんな人知らんかw Linux serviceコマンド 環境変数
これでググっておけよ。
環境変数を意識してないと超レアだが意図しない結果に繋がる可能性はある。 単純にchkconfig/serviceで動かすようにしたところ意図せずroot権限で動かしてしまってて書いた.phpの穴突っつかれて以下略
こわいこわい httpdをrootで動かすにはコンパイルオプションが必要… phpのコンパイル直後のmake testに疑問を感じて早数年
でも毎回ちゃんとやってちゃんと結果確認してる >んなことよりデーモン起動ユーザのシェルを/sbin/nologinにしとこう
なんで?
起動ユーザはrootで、nologinにするのはWorkerプロセスのユーザでしょ。
ApacheにしろNginxにしろ、そういう風に作られてるわけで。
単一で動くタイプとごっちゃにしたらいかんよ。 >>677
全面的にすまんかった
> nologinにするのはWorkerプロセスのユーザ
こっちを意図して「デーモン起動ユーザ」と書いてた chsh -s /sbin/nologin root 突然思い出したが、
むかーしのFreeBSDってnologinの中身がexitって書かれてるシェルスクリプトだったなw 特に理由もなく/dev/nullが好きだった時期があった UNIXアカウント=メアドという古き良き安全なインターネットの時代は、
/usr/bin/passwdをログインシェルに設定して、
パスワード変更はtelnetで繋ぐとかもあったな。 >>666
php-fpmならpool.dは見たのかな
php-cgiでsuexecやmod_suphpならユーザー権限になって当然だし
>>667
あなたの環境では非特権ユーザーがポート80をバインドできるようにlibcapを使っているんですね
それはあまり普通じゃないので、人と話すときの前提にしない方がいいですよ
>>671
バーンスタイン先生はEd25519でSSHやTLS界隈じゃバリ現役 phpで、 $var = 'text'; // ←これ、この代入を検知して代入直後に何らかの処理を自動発動させる、ってこと、できる?
ループ中で逐一$varをチェックする、というようなのではなく >>686
qmailとかなんとかdnsとかdaemontoolsとか見事に全部放り投げたなw
あんだけ他攻撃してたくせに。 PHPマニュアルってすげー優秀だなー
セキュリティーで嫌煙されてるがCHMが用意されてるのがでかい
これでネットもつながらない山の中でもPHPならスムーズに開発ができるわ CHMってなんだと思いかけたけど
あれかhtmlヘルプファイルの.chmか
用意されてるの知らんかったサンキュー兄貴 >>693
おうよブラザー
ダウンロードしたCHMはセキュリティ厳しくなっててそのままじゃ見れないから
プロパティ開いてブロック解除忘れずにね >>691
しかし、あの考え方はその後に大きな影響を与えたと思う。
Postfixなんてのが良い例かと…
攻撃という意味では、日本のqmaiサイトを運営してた某教授の方が酷かったw >>691
public domainにしてくれたのはありがたかった
qmailはまだまだ現役で運用してるとこ結構ある
djbdnsはパッチなしだと来年死ぬけどね
>>695
大岡山かw djbdns使ってないからdjbdnsが来年ってなんだろうと思って 2019年 djbdns ぐぐった
2番目に出てきたURLのタイトルが「2019年入籍日おすすめランキング」だった
終わってんな daemontoolsってCD/DVD/BDとかの仮想ソフトじゃなかったっけ
って思ったら全く関係なかったでござる ネタは無いがphpとシェルや他言語とのバッチの書きやすさの違いを聞いてみたい >>707
慣れとしか言えないと思う
バッチファイルはphpで書いて、シェルからアクセスするというやり方にしてるわ 正直マオリ語か何かにしか思えないperlで書かれたバッチも、慣れれば都なのだろうか prelは正直、割とマジでキツイ
文法が違いすぎるから、しばらく離れてるとどう読んで良いのかがわからない perlはプリミティブなんだよな。
やりたい事を細かく制御して書かないといけない。
でも文字列処理だけは感心する。 phpの話じゃなくてperlの話になってるじゃないですか! 個人的にはPHPの方が気楽に書けて好きなんだけど, 現実的にはPythonで書くのがいいんだろうなぁ
PHPとPythonの共通点はbattery includedなあたりか phpとperl、cgiは一昔前は選択性みたいな感じだったのにね
いつの間にやらphp一辺倒になってた
>>715
一度pythonでサイト作ってみたけど本気でめんどくさかった
phpがもてはやされる理由がよくわかった ちょっと離れるけどバッチもWebもnodeであれこれやってみたことがあった
くそめんどかった >>710
鯖管あたりは配列とループ使うのにシェルスクリプト代わりにperlって人多い 言語的な扱いやすさを取るか環境的な扱いやすさを取るかの天秤
そういう意味ではperlはありでもpyは意味がわからないo なぜPythonはダメ?
いずれ何でもかんでもPythonになる可能性すら秘めているのに…
まあ、互換性は不安あるけど。
Perlは下位互換が優秀だったからなあ… 配列とループw
PerlもPHPもPython他の足元にも及ばんだろ。
ちょっとしたデータ処理しようと思ったときに、絶対に選ばない2大言語。 適材適所だし、どっちが上とかないしょ
PHPが未だにこれだけ使われてるしね >ちょっとしたデータ処理
環境構築を考えれば、こんなもん普段使ってる言語一択だろ
バカか 自分のとこだけで動かすなら普段使いの言語だが, 他環境で動かす可能性があるならLSBに入ってるPerlかPythonだなー >>721
わかってないねぇ
標準インストールで入ってる可能性がダントツで高いのがperlなんだよ 連想配列をjson_encodeでjsonにした際、「/」が、エスケープ処理されておらず困っているのですが
対処法はありますか?
オプションにJSON_UNESCAPED_SLASHESを指定しなければ、エスケープされるような記載を見掛けるのですが・・・
PHPバージョンは7.1です 手元の7.2.1でjson_encode('test/test')とすると、test\/testが返ってくる
json_encodeの第二引数を明示的に 0 にしてみるとか
事前に(必要に応じて再帰的に)自分で/を\/にするとか >>727
すみません。勘違いしていました。
「/」ではなく、U+2044というFRACTION SLASHを記載して、
それに対してエスケープされないと嘆いてました。 言われてるほどシェル言語としてだめなわけじゃない
あきらかにshやbashよりは使いやすいだろう win10のie11で外部pcの共有フォルダに置いてるpdfをphp関数で表示したいのですがどうすればいいでしょうか?
fopenのハンドルも取れず、readfileでも無反応です
ブラウザからファイルパス入力だと表示できます ブラウザ関係なくね?
他のブラウザなら思った通りになるの? 何やりたいかさっぱり分からん
質問するなら他人にちゃんと伝わるように書け NASみたいな共有フォルダにあるファイルにアクセスしたいってことでしょ…
PDFかどうか以前に、他のファイルも試してみろと。
PHPはなにのサーバーで動いていて、
バージョンはいくつなのかとか環境を書けよ。
ブラウザとかどうでもいいしw vistaのie9だとできてたんですが
最新環境だとできないのです 最新って何?
XAMPPとか使っててPHP 7.2.xとか? 最新と言うのはOSとブラウザがってことです 64bitです vistaは32bitです
phpとapacheはそのままです ここまでのやりとりで、教えるのは無理とわかったから他に行きな。
まともに質問すらできないんだから教えようがない。 まずはログとか見ろよ
ログに何も出てないなら何か根本的に間違ってるってこと PHPのsystem()でmysqldumpを使ってテーブルごとのsqlファイルを出力して、
それを圧縮して保存するプログラムを作った。
直接ブラウザでアクセスしてプログラムを動かすと正常に圧縮ファイルが保存される。
しかしcronで動かすと、全く空欄のsqlファイルを圧縮したものが保存される。
私には、全く原因が分からず修正できません。
原因はどういったものが考えられますでしょうか? cronでやらないで、CLIで一度実行してみたらいい
権限関係でねーのと思う ブラウザの裏で動いているPHPのユーザー権限や、
crontabのユーザー権限や、
ファイル類のパス、
実行カレントディレクトリ等は一致してますかね? cronでありがちなのはファイルパスの指定ミス
実行プログラムやファイルの指定を相対パスで書くと事故ること多し
簡単に対応するなら全部絶対パスで書け 皆さん、ありがとう御座います。
まだ解決は出来てないのですが、調べるべき方向は見えてきました。 実行権限の違いじゃね
webサーバはapache で
cron はcrontab -eで登録したユーザー
とか id > /tmp/log
pwd >> /tmp/log
env >> /tmp/log composerのclassmap-authorativeの最適化
場合によっては遅くなるってマジ?
速くなる場合もあるが以下の条件では遅くなるって
・依存ライブラリが多い
・リクエストで実際には使わないクラスが多い
・ファイルシステムからの検索が速い
最適化を有効にすると
読み込めるクラスを全部PHPの配列に入れるから
逆に速度が落ちる場合もある
opcacheが有効だとファイルシステムが遅くても緩和されるし
PHPファイルが更新されないならタイムスタンプのチェックも無効にすれば
PHPファイルを見る必要無くなるね
https://blobfolio.com/2017/03/benchmark-composer-autoloader/
APCU使った最適化については書いてない 真実かどうか聞きたいのか、それとも自分で確認した事実を書きたいのか どうしても知りたいなら自分でベンチ取ってみるしかないだろう 環境のせいで多少遅ってるかもしれない可能性を確認するよりも
コードを見直したほうがずっと早く改善できそう こちらで質問させてください
classの必要性がいまいちわからないんですが、普通に自作関数を使うのとどう違うんでしょうか? classと同じようなことの実現は関数・objectを駆使すればたぶん無理ではない
けど非常にめんどい
継承とか再利用なんかはどうしようと悩む >>758
一人で作るプロジェクト、しかも関数だけだと特に変わらないね
消費税の計算するだけなら別にどっちでもいい。関数にもしなくて良い
今はまだ分からないかもしれないけど、
コンストラクタ、ガベージコレクション、トレイトなど便利な機能が山程ある
其内色々な機能を使うようになると思うので、とりあえずclassに慣れておいた方が良い・・・としか言えない >>759
継承の場合は丸ごとコピーになるね
で、一箇所かえたら両方変更する必要があり・・・とどんどん煩雑になる >>761
コードをコピペしたらもうそれは継承ではなくなってしまうな
関数名を扱うことでコールバック的にやろうとすれば、そこはもう地獄
うーむ とりあえずGCはclassに限った話じゃなくね?
関数内でも一応無関係ではないはず
インスタンスに対するGCは
関数主体の場合だと関数内の変数や関数外の変数に対するGCが当てはまるわけで あまりclassがうんぬんを意識しないで使ってるものを考えたらわかりやすいかも
PDOとかExceptionとか 独学で基礎的なことだけ覚えたんですが、わりと小規模な会員機能付きのブログエンジンやデータベース系のサイト程度なら作れるようになったんですが(プロから見たら多分穴だらけ)、クラスの必要性が分からず全て関数作ってやってました
コードの使い回しにしても関数にしておいて1度呼び出しておけば何度も使えるし、継承にしても関数内で別の関数を呼び出したりして
直感的にも使いやすかったのでそうしてるんですが、今後もっと複雑な事をやろうとするとやっぱりクラスに慣れて使った方がいいんですかね
関係ない話ですが、人のコードとか見ると多次元配列の回し方とか他にもいろいろ人と違うし自分の脳の作りを疑ってしまう。。 >>765
その場合は「状態」を誰が持っているのかってのが一つのポイントだと思う
状態をグローバル変数に持つのは嫌だし, 関数に持たせるのも良くない コードの書き方は設計にもつながるからなあ
DB使ってるならPDOがまさにインスタンスごとに別のコネクションを保持できて
class=インスタンスの中に関係関数がまとまってて
classの利点がわかりやすい >わりと小規模な会員機能付きのブログエンジンやデータベース系のサイト程度
ここら辺に何かを感じる file_get_contentsで他サーバーのデータを取得した際、
データが途中までしか入って無い場合があり、困ってるのですが対処方法はありますか?
$http_response_headerに載っているContent-Lengthに比べても少ない
file_get_contentsの戻り値が、falseではないがデータが半分くらいしか入ってない状態で、エラーも何もなくそのまま処理が継続してしまう形です。
そのタイミングでリトライしても結果は変わらず、時間置くくらいしか正常に動作しません。
ただ発生するときは、file_get_contentsで他サーバーのデータを17ファイル連続で取りに行く場合などで、
その場合、3ファイル程データがおかしくなっているという感じです。
1ファイル処理する分には正常に動作し、再現しません。
環境はLinux / apache2-api-20120211 / PHP 7.1.18です。 >$http_response_headerに載っているContent-Lengthに比べても少ない
>そのタイミングでリトライしても結果は変わらず
比べてみて、少なかったら
成功するまでリトライすればいいじゃない
contextつきでもfile_get_contentsで問題があって、しかしcurlを使うと問題が出なくなるということもある(※実話) 自分の場合どっちもだめでfsockopenでようやくいけたなんてことがあったな
一番詳細なこと出来るのはfsockopenだからねえ 自前でソケット通信考えたらredirectとかkeepaliveとかくっそ面倒だった記憶がある >>774
>成功するまでリトライすればいいじゃない
同プロセスでは何度やっても一度も正しく取得できないんです…
別プロセスで起動し直すと正しく取得できるときもあるのですが、
それは使用リソース的な問題であまりやりたくないというか…
curlを試してみるしかないですかね
>>775
どっちもだめ…curlの勝算も低いですかね…
fsockopen使うくらいなら別言語を検討してしまいそうだ ググったら1番上の記事(公式マニュアル除く)にあるじゃん。 具体的に何回やったのか
そのうち本当に通信が発生してるのは何回か
調査と試験どっちもしないの APCuキャッシュを使っている。
管理画面apc.phpに表示されるFragmentationが日々上がっていっている。
現在10%ぐらいだが、まだまだ上がりそう。
この断片化率が上がると何か問題があるのか?
何%ぐらだと問題で、対策はどうすればいいのか? APCuって自分でなんとかできる人が使うもんじゃなかったっけ
ほかの選択肢あるっしょ ググってわからなかったら、
夜中とか定期的に完全削除しちゃえ。
キャッシュなんてすぐ育つから。 俺は、自分で調べないわけじゃないぜ。ただ少なくとも日本語の情報は殆どない。
「apcu 断片化」では20件程度、「apcu Fragmentation」なら沢山ヒットするが、対象を日本語ページに絞ると10件程度しかない。
これらは全部読んだが「Fragmentationが高くなったら、キャッシュをクリアしろ」ということが書いてあっただけで、
何%だと問題なのか、そもそもどのような問題が発生するのか分からない。
英語が読めないわけじゃないけど、英語で検索して必要な情報を調べるのは苦労するよ。 自分でベンチマーク取って検証するんだ。
そして報告すれば誰かの役に立つ。
ちなみに俺は何も知らない。すまん…w ソース読んで、何%断片化すると悪影響が出るかわかる?
キャッシュの実装方法がわかっても測定しないとわからないことだよ。 APCuって
オペコードキャッシュ部分がなくなって、cookieみたいなkey-valueのデータを自前で自サーバのメモリに共有するだけに単純化されたもんでねえの
DISKにcsvで持ったりDB使ったりで共有するんじゃなくてメモリに持って共有しましょう的な
だとすると、キャッシュクリア=メモリ上の情報破棄だから気軽にやっちゃあかんし
fragmentになってるっていうなら、
それがメモリ上にあるというだけで他はDISKにおけるfragmentと同じでしょ?同じように考えりゃいいじゃん >>788
メモリにどういう配置してどう読み書きしてるかがわからないと
断片化を操作する検証も度合いごとに断片化が及ぼす影響の調査もできなくない?
ことが断片化だから、意図的に特定の断片化状態を作るのって
内部知らないと相当難しいように思うんだけど ソースだけ見れば分かるならプロファイラ何か要らないんだよなー Fragmentationが100%に達してても
キャッシュヒット率が高ければ問題ないらしい
(書き込みは遅くなるが読み取りは遅くならない)
https://serverfault.com/questions/506328/php-apc-is-100-fragmentation-a-bad-thing
とは言っても書き込みは遅くなるわけで
実際パフォーマンスにどれくらい影響が出るかは使用状況によるので一概に言えない
本番環境のパフォーマンスを見るには
New Relic APMがおすすめらしいけど
自分は使ったこと無い JavaのGCだとコンパクションとか
断片化を防ぐ仕組みはあったけど
多分apcuにはそんな仕組みはないと思われ
動的に確保するから更新・削除を何度も行うと細切れになる
断片化率は5MB以下のブロックが全体に占める割合みたいなことが書いてある
解放されたブロックが隣接してたらマージして1つのブロックにする、とも書いてあるが
これだけだと完全に断片化は防げないとか?
https://github.com/krakjoe/apcu/issues/127#issuecomment-244362339
NewRelic使えとかはこの辺で見た
https://medium.com/@davidtstrauss/avoiding-the-pitfalls-of-apcu-4aa9de00ef93 Symfonyも
書き込みや削除が多い用途にAPCUを使うと断片化しやすいから使うなって言ってる
多分それをやるとAPCUの管理するブロックの数がどんどん増えていって
新しいブロックの確保が遅くなるんだろう
代わりにRedisとかmemcachedとか使えば?
遅延があるとかで場合によっては使えないかもしれないが
Use of this adapter is discouraged in write/delete heavy workloads, as these operations cause memory fragmentation that results in significantly degraded performance.
https://symfony.com/doc/current/components/cache/adapters/apcu_adapter.html ありがとう。少し分かってきた。
英語での情報収集が必要とかレベルが上ってきた感じがしていいね。 クソッ、話が高度すぎる・・・
今日からPHPUnit使うなんて言い出せないじゃないか。 APCuってしらんが
セッションにDBのハンドラ入れても使えなかったのを
使えるようになるような代物かね? >>798
言ってる意味がわからない
DBの接続はリクエスト終わったら切られるだろ >>799
いやわかるけど
で、sessionで使えなかったのを使えるようになるような代物ではない
serializeできないものは無理、sessionも共有メモリもそう
リソース型と一部のオブジェクトは無理 DB接続やファイルハンドラが処理終了時に自動的に切られるのは、
そういう扱いをされるべきリソース型であって確実にデストラクタが呼ばれてるからという理由であって、
処理終了時にシンボルテーブルにある全変数が解放されるのとは無関係、
よって、変数の格納先が異なるだけの$_SESSIONや共有メモリでもこの事情は変わらない、
と理解している
json化できないものは入れられないwebStorageみたいな感覚 Dockerで
nginxコンテナとphpfpmコンテナを分けてコンテナで分けて作った時
nginxの方はphpファイル入ってなくてもディレクトリさえあれば普通に動くな
開発する時はDockerボリュームを2つのコンテナにマウントしてたが
本番用イメージをCIで作る時は・・・?2つのイメージに同じphpファイルを入れなくちゃいけないのか?って思って調べたらこのような方法が見つかった
画像やCSSとかの静的ファイルは・・・nginxの方だけに入れるか phpMyAdminの公式Dockerイメージはnginxとphpが一つのコンテナになってたけど
あれって面倒?
php:7.2-fpmをベースイメージとしてそのまま使うのは出来なくなるよな
それだけでめんどそう というかホスト側ポートに繋げて直接外に晒すなりのホストのhttpdからリバースプロキシして使うもんだろ?
nginxコンテナとphp-fpmコンテナに静的コンテンツと動的コンテンツを分けて入れてnginxコンテナからphp-fpmコンテナを見えるようにしてとか, そんな細かい粒度にする必要を感じない phpMyAdminのDockerイメージが使ってるのはsupervisordだった
ベースイメージはphpで、supervisordやnginxを別途インストールしている
意外と難しくない? supervisordは落とし穴が多い
使わなくて済むなら使いたくない 俺なんかhttpdはinetdの下でいいやと思うことすらある。
ただし、apapche 1みたないのよりずっと軽いやつね。 どうしても一つにしたいならApacheでいいじゃん。
docker-composeとかあって分けるのが大した面倒でもないのに、一つに拘る理由がわからんけど。 dockerってぶっちゃけそこまで便利というか必須? Dockerの誤解と神話。識者が語るDockerの使いどころとは? Docker座談会(前編)
https://thinkit.co.jp/article/2127
下手したらバズワードで終わる…ほど酷くはないな。
大昔のフロッピー起動みたいに
ガチャガチャ差し替えて使うようなもんかね。 コンテナでアプリケーション作るならDocker-ComposeないしはDocker単体でいいけどサービス作るならKunernetesくらいは知っとけよって感じ DevOpsってさあ…
昔やってた開発と運用のいっしょくたに戻しただけだよね。
理想は違うんだろうが現実は(笑)
10年後はまた分業とか言ってんだぜ、どうせ… なんかPHPって覚えるスキルRubyやPythonよりおおくね? PHPはWebProg言語としては登場時期は早かったが
いかんせん類友なのか開発陣が無能なもんでいつもどこかの後追い
PHPerだからといって覚えることが特に多いわけではなく
他言語にはあるがPHPにはないから作ろう
そんな車輪の再発明まがいのことを続けてきた結果であって
一言で言えばご苦労なだけなのである 別に先陣切って何かを実装してくれとは思わないからいいよ。
それに、他はできるのにPHPはできないってのも良くないだろw 俺はもうDockerが無いと生きていけない体にされてしまった
必要なプログラムが全て入ったイメージが作れるので
実際に本番環境にアップロードしたら動かなかったけど、
ローカルの開発環境では動いたんだよ!
みたいな事が起こるリスクを下げる
各開発者の開発環境の構築も簡単
docker-composeのファイルとか配ればいい そんでもってテスト用のまま間違って本番稼働させるんだろう?
知ってるよ 仮想化は楽だろうしDockerはGoogleのハードな使い方にも耐えてるほど
耐久性も信頼性も高いのだろうけど
やっぱり専用サーバで環境作るのが俺は好きなんだよ! 手段と目的を間違えて無ければ何でもいいよ。
Dockerはもちろん良い物だけど必須ではない。 PHPで動画編集できるライブラリ無いかな?画像編集できるGDみたいなさ
既存動画のカットと動画連結、字幕が付けれて、それをmp4に出力で来て、
youtubeでアップロードできれば最高なんだけど
コマンドラインで別のプログラム実行するとかじゃなくてね
まぁ無理かな… PHPの場合, ライブラリでやるとなるとピュアPHPになるが動画編集はそれじゃあ重過ぎるだろう
他の言語だとネイティブに近いレイヤのライブラリをラップしてバインディングすると思うけどPHPには実行時にネイティブ拡張をロードする機能がない 文章が臭いなと思ったが
>既存動画のカットと動画連結、字幕が付けれて、それをmp4に出力で来て、
なんかやることが量産クソyoutubeアフィっぽい 動画編集をブラウザでやるってのが無理ありすぎ
重い 遅い 面倒なのは容易に想像でき
あきらかにプラットフォームに向いてない そのぐらいのオンラインサービスなら既にありそうだけどね。 WebGL使えば何でも出来る
動画をテクスチャにすればどんなエフェクトも実現出来る
ブラウザ上ではプレビューだけで
エンコードは強力なサーバーのCPUとGPUをぶん回す
PHPとかもう関係ねえか gif動画くらいならまだわからんでもないがmp4ってご職業をたずねたくなる >エンコードは強力なサーバーのCPUとGPUをぶん回す
サービス化するとなると結構きついよそれ
JSで各クライアントにやらせたほういいね
そうすると専用ソフトでやったほうがいいってとこに帰結する jsで動画エンコードってさ、こうなりそう
利用者=負荷がかかるとわかってる
→鯖管理者=coinhiveみたいなminerを仕込んでおく
→鯖管理者=広告と採掘で両得、サーバ負荷なし ffmpegをEmscriptenで動かすような方式なら
オーバーヘッドでかいしシングルスレッドだが動く
SharedArrayBuffer使えば
マルチスレッド出来るらしいがSpetre、Meltdownのせいでしばらくは復活しない CRON起動すると多重で起動されたりするのって当たり前? いいえ
処理時間が長すぎて、前回の処理と重複してんじゃないですかね? >>843
ロックしたらいいんじゃね?
ロックが確保出来なかったら
前回の処理が実行中とみなして処理を行わない
Symfonyにこの目的のコンポーネントがある
https://symfony.com/doc/current/components/lock.html * * * * * /path/to/unko.php
のういうの見ると、daemonにしてよとか思う。 そんなクソなコードなの…?
まあでも、起動時に一応ulimitしたり落ちたら再起動とかフォローはするけど。 Drupalはメモリの内容を使い回すphp-pmではメモリリークして安定動作しないらしい
php-pmにも一定数のリクエストを処理すると再起動する機能があるが、リークの程度が大きいとそれでも問題になる
Drupalのコードはメモリの内容をリクエスト後に破棄する前提で
あちこちでキャッシュしまくってんのかな? >>846
なんで?落ちたら再起動させるようにするとかよっぽど手間じゃないか 今まで見て来た範囲で大半は、
リアルタイムにしたいのに技術力がなくてできなくて、
そんでもって処理も下手で起動が遅かったり
多重動作したりしてたから。
daemonにしたらそういうことはなくなる。
そもそも落ちるなんて稀な品質で作るし、
落ちたら条件付きで自動再起動するのは
他のサービスでもやるからね。
毎分起動ですぐに処理が終わって、
リアルタイム性を要求されてないならOKだよ。
でもそんなの少ない。 コンテナオーケストレーターのAmazon ECS使うわ
プロセスが仮に落ちても自動で再起動してくれる
使用するメモリーも制限できる
cronのような定期実行も一応出来る >>851
>リアルタイムにしたい
それバッチでやることじゃないのにバッチを使ってる、っていう転用事例だよな後出しじゃん
>そんでもって処理も下手で起動が遅かったり
>多重動作したりしてたから
バッチ利用が悪くてdaemonなら良い、っていう問題じゃないよなコレ。ただの技術力の低さ
>毎分起動ですぐに処理が終わって、
>リアルタイム性を要求されてないならOKだよ。
>でもそんなの少ない。
後の2行はdaemon利用であるかどうかと無関係
むしろ上述の前提のとおり技術力がないならdaemonでもトラブル多発する
>毎分起動ですぐに処理が終わって、
>リアルタイム性を要求されてないならOKだよ。
>でもそんなの少ない。
オレオレ常識を前提にして語らないでくれます? なんかカス知識しかない営業や広報が「ファイルなんてあり得ないDBなら問題ゼロなのに」と言ってる感じ >>853
何だよ、連投して噛み付きたいだけか。若いな…
ごめんね。
自分で作った訳じゃないから技術力は俺のせいじゃないしw
お客さんか、その場開発元に言って。 >>856
後出し、論点すり替え、に追加で人格攻撃に責任転嫁
倍満ってとこかな?
まあ大方ステマの類だろうけど リアルタイムと言うけど
一体全体どんな処理を想定しているんだ
手段として常駐化が使えてかつ常駐化が効率的であるケースはそう多くない
というかぶっちゃけかなり少ないように思われるんだけど どちらかといえば実装ではなく設計もしくはその上流の問題かな
オンデマンドでもなく毎分起動、しかもphp実装
ポート開けて待ち構えるでもない
問題があるとすればその所在はdeamon云々ではなく別のところ >>109
みやえらってYouTubeでも他のアフィリエイターの名前を利用して集客してるよね。
それで散々否定した上で、自分のサロンみたいなものに誘導してる。
一番、卑怯なタイプですよね。 phpって
クラスのフィールドに代入する時
クラスで定義してない名前のフィールドにも代入出来る?
何でこの辺ゆるゆるなんだ CSRF対策で質問です。フォームで別の画面にトークンを渡す場合
hoge1.php
<form action="hoge2.php">
<input type="hidden" name="token" value="生成した値">
<input type="submit" value="OK">
</form>
hoge2.php
if(!isset($_POST["token"]) || $_POST["token"] !== 値 ){エラー表示}
のようにしてますが(おおまか)
<form action="hoge1.php">
と自分自身に渡す場合エラーになってしまいます。
どうすべき、どうしてますか? if(!isset($_POST["token"]) || $_POST["token"] !== 値 ){エラー表示}
のところの「値」が数値型になってないか? ifの中身が予想に反する結果になるんだったらまずvar_dumpして原因探れよ >>865
文字型です。
別画面へ移動ならエラーにならないのでそこは問題ありません。
>>866
予想通りの結果です。
CSRF対策で、ページが最初に読み込まれたときの処理をどうしてますか? >>867
hoge1.phpとhoge2.phpの内容を
(おおまか)
などと言って省略しないで全部出せ
それか、再現可能な最小のコードを書け 質問者の意図がわからずブチ切れ
ほぼ間違いなくCSRF対策の意味がわかってない 配列長が500、[0]から[99]までは値が1、[100]から[499]までは値が0、という配列を作るのってどうすればいいですか?
やはり面倒でもforでまわすのが確実でわかりやすいでしょうか <form action="hoge2.php">
methodが抜けてる時点で、お話にならない。 >>872
配列長100で全要素の値が1の配列Aに、配列長500で全要素の値が0の配列Bをmargeするということでしょうか 連投すいません
array_mergeの動作を勘違いしていました
array_merge( array_fill(0, 100, 1), array_fill(100, 400, 0) )
これだけで重複させずに生成できるんですね
ありがとうございました >>871
質問に余分な箇所は削るという感じでしたので省略しました。
そこ必要でしたか?ちなみにPOSTです。 >>871
methodが何であれ対策に根本的には関係ない
すでに書かれてるのにあえてまた書くがエラーが出て困ってるのではないとわかってる? >>871は頭悪いのか?なくても予想できるだろ
>別画面へ移動ならエラーにならない 問題点が見えていない2人(か1人か)のために書くと
$_POST['token']には何かしら値が入っているはず
入ってなければ不正アクセス等(で強制終了可)
ところが自分呼び出しでは最初は値が入っていない
だからエラー処理してるとそれになる
不正アクセス等の区別をどうするかということだな
エラー処理せずスルーするか sessionが空
postが空
sessionとpostが一致しない
=> でてけ! >>868
(おおまか)は !is_string($_POST['token']) など質問に全く関係ないバリデなどです。
他スレではどこも関係ない部分は消せと言われますがここは全部書いた方がいいのでしょうか?
>>864は100%再現します。 $_POST['token']以外に何も判断材料がないのかね method記述がないコードでhoge2.phpに投げるとなぜか$_POST['token']に値が入ります!再現します! >>884
判断材料とはなんでしょうか?>>881の通りです。
フラグに初回で値入れるか変えて
それ以降受け渡して使い回しすれば判定できますがそれはちょっと。
みなさんはどう判定してるのでしょうか? filter_input覚えたからってスーパーグローバルだから使うなって理屈はおかしい
スーパーグローバルがいじれてしまっても意図したことなのでなんの不都合もない バリデーションが貧弱でFILTER_CALLBACK使いまくりの
汚らしいコードになるのがfilter_input
すっきりでもなんでもねえや ageてるやつはちょっと頭悪すぎてこのスレに不要なんで消えてくれるかな スーパーグローバルなんて使ったらテスト出来ないじゃん
禄にテストしないとgoto failを誤記述してセキュリティに大穴空けたiOSみたいになるぞ 自己呼び出しはそんな特別なことでもないのにな
皆対策してないのか CSRF対策とはなんぞや、から説明し出す人を待ってるのかな OAuth2のstateは?
リンクを踏ませて攻撃者のアカウントにログインさせられるのを防ぐらしい
図解:OAuth 2.0に潜む「5つの脆弱性」と解決法 (2/4)
http://www.atmarkit.co.jp/ait/articles/1710/24/news011_2.html
しかし、ユーザーのアカウントを盗むのではなく
騙して攻撃者のアカウントにログインさせるのって
何に使えるんだ? >>900
そんな説明はいらんし、上見た感じ質問者以外説明できるのここにはいないだろ なんぞやを引き出そうとは読めんしな。
>>901
読んでないがカウンターじゃね。 $_POST["token"] !== 値
!==だから「$_POST["token"]」と「値」では型が違うんじゃね?くらいしかわからん
値をどうやって作ってるのか見ないと何とも言えない 知っておくべきことやっておくべきことではあるが、初歩ではないぞ 初歩的な知識ではあるが技術的にはかなりしんどい
単純なシステムならいいが、複ログインや古いシステムが絡まると手がつけられなくなる >>904
いやだから同じページでなければそこは正常動作してるんだって
初期表示と不正侵入の区別
これは理論上無理だからページ構成変えるとか
例えばお問い合わせフォームなら次ページ次ページと行けるから自然と値は入る CakePHPとか何かフレームワーク入れりゃそれがXSS対策・CSRF対策をしてくれるからな
特段なんか対策用の仕組みを考えたりとかしてないだろ? CSRFとその他をごっちゃにしすぎ
まずはCSRFだけに注目して考える
それでどういう対策が有効かを考え
その対策をしたときに生まれる新たな問題がないかを検討
そうやって問題がないところまで考えることができればミジンコ卒業 FW使えば問答無用で対策がされるわけないだろ
FWのルールに従い FWの機能を使っているうちはそうではあるが
もともと備わってるそういう機能やルールがあるのを知らず
一歩踏み外して自前でコードを書き出せば常に危険は伴う
ただしいリスクに対する対策ができればそういったケースでも安全
FWにも学習コストがかかるわけで
方言のようなFWの流儀覚えるからセキュリティなんて考慮しないではなく
標準語としてピュアPHPなコードで学習しないとFWに頼りきってると痛い目見る >>913
CSRF以外話には出てないが?
君がごっちゃにしてるだけだろ >>914
同感
壁にぶつかってそれを対策するためだけにFW使えとは本末転倒
FW使うにしろ基本に取り組むことは正しいし後々役に立つこともある
>>916
>>880 >>905
なら答えようか、初回のエラー対策。
はいどうぞ↓ >>919
丸一日半も経ってからその程度しかレスできないの?
君、生きてる価値ないw >>920
丸一日?誰と勘違いしてんだ。
ようは答えられないのだな。 よそのサイトがよそのサイトにリクエスト送って
それを受理してしまうとまずい状況なのがCSRFな
別にまずくないなら仕様で片付けられる問題 >>911
間違いなくCakePHPだと今回のような同一ページでも対策してくれる?
他に同一ページで対策するものはある? ほんと初心者スレでやってくんないかな
ここ過疎スレなんでねえ
下らないレスで流さないでほしいんだわ >>930
雑談スレでもあるから話自体はOK
892, 920のような不毛なレスが余計なだけ >>927
とうにできてます。
速度など別の理由で>>909に近い感じにしつつ自分自身に渡すようにしました。
元々お問い合わせフォームの流れなら全く問題なかったので。 指摘できるならここぞとばかり反論してきたであろう>>910
結局何も言えずに終わったな
これへの返しもwだけだろ >>926
そもそも>>864だけでは再現性が無い
>>871指摘、>>875の通り、method="post"と書けば動作する
問題のコードが端折られているから何が問題なのか分からん 初心者スレでないからといって
エラーがなにかを書かないとエスパーじゃないと答えられん くどい、まだ言ってるのか
>何が問題なのか分からん
読解力が問題 Windows10でXAMPP使ってる人に
ProでなくHomeで使ってる人いる? >939
xamppとwindowsのhome/proは関係ないと思うけど、何を聞きたいの
結局hostsw書き換えるだけだよ >>940
肝心なこと書いてなくてすまん
windowsの更新で問題点や面倒さなど違いあるかなと
みんな自動更新抑制ツールなど入れてるだろうから同じことかな >>941
特にない
強いて言えば、仮想環境を作る時にPROの方が多少パフォーマンスが優遇されてた気がする ProだとHyper-Vが使える
そもそもXAMPP使わないけど 10 homeでxampp使ってるぞ
もともと7 homeからたけどな
phpの動作確認なんてこれで十分や 本件から逸れて申し訳ないけど, XAMPPって中途半端じゃない?
手元での動作確認ならビルトインサーバでいいしテスト用環境ならコンテナなり仮想なりで動かすし
実際にApacheで動かせるって言っても今はphp-fpmの方もかなりあるし
何れにしてもビルトインサーバよりXAMPPのほうがいい状況が分からない(MariaDBも一緒に入ってくることくらい?) >>936
答えてもいいがもうくどいしそういう流れでもないからヒントだけ書く
自分で実際にやってみなさい
値は乱数でもsessionでも極端に定数でも何であれ関係ない ビルトインでは何か挙動が違うことがない?
ディレクトリ設定というか、エイリアス処理をしてる場合とか。
本番環境ならhoge/であのスクリプトにアクセスするのにビルトインだと違うみたいな
コンテナなり仮想環境なりは実行まで手間が掛かったりしない?
仮想環境起動に6秒くらい掛かったり、配備が手間だったり。 ビルトインこそ中途半端だわ
アプリケーション毎に仮想環境を用意するのも自分はあんま理解できんな
XAMPPで作ったやつが動かんことあっても5分で修正出来るレベルの内容だろう OSやバージョン無視したコード書かないのが大前提でね
初心者じゃないしマニュアル見ながらそんくらい把握できるじゃろ 結局どうやってもサーバーと色々差異があるので、dev.example.〜にしてるわ
コピーして終わり
よぽど特殊なサイトはxampp スルーしてたけどビルトインサーバってもしかしてphpのビルトインウェブサーバ?
使いもんになるのアレ >OSやバージョン無視したコード書かないのが大前提でね
これどういうこと?
何使うにしてもテスト環境あるならそのverで使えない組み込み関数使えば
テストでエラー吐かれるんだしバージョン無視コードがわからない
OS無視コードも何を指してるのかわからない >>953
XAMPP使って仮想環境を用意しないということは
本番とはバージョンやOSが違う状態で開発してるという想定をして
ちゃんとコードをかけるかどうかっていう話だがそんな難しいことじゃねえだろ >>954
バージョン違うとは限らんだろ
OSにしてもOS依存のコードって意識的に書かないと無理でね? Windowsじゃ使えない機能はいくつか知ってるけども
あとは……なんかあったっけ? >>955
意識的にかけるならいいんだよ
書けない人が動かんって言ってるわけで
>>956
関数でOSやFSに依存したり制限をうけるものもそうだけど
(問題になるかは別として)CRLFをPHP_EOLで書いてみたりとか
(このスレにいるかは別として)C:\users\unko\manko.pngとかパス書いちゃうやつとか
ちょっとバイナリプログラミングに手を出してみてエンディアン考えない実装したりとか
ほとんどミラクルケースではあるがまあいろいろある >>957
とりあえずOSについてだけ、だけど、正直あんまり同意できない
ファイルシステム関係は・・・どんなんがあった?
意識してWindowsの特有のACLを操作するときとか?わからんけど
PHP_EOLはわざわざ意識的に「OS依存の改行コード」を指定してるんだから関係なくね
パスの問題は環境が異なるのに絶対パスで書くこと自体がNGなのであってOS関係ないはず
エンディアンが問題になるって、ファイル読んで$char[$n]だったら問題にならないし
pack/unpackだったらまず間違いなくOSによらず意識的にエンディアン指定するんでねーの
あと意識しないで改行コードが変わりうるfputcsvみたいなやつか
parse_ini_fileはどうだったっけ ミラクルケースに近いけど32bit/64bitの数値上限とか >PHP_EOLはわざわざ意識的に「OS依存の改行コード」を指定してる
$tmp_path = "/var/tmp";
$updir = $tmp . DIRECTORY_SEPARATOR . "upload";
とか明らかに無意識というか脳死してる人は割と多い。 今時PHPを含めスクリプトならどんな言語でも開発用には簡易サーバ使うと思ってる
PHPならビルトインサーバだしRubyならWebrick, PythonならDjangoのdevserverが主要どころだろう
多人数の開発でApacheの設定をさせるのって難しくない?
自分だけで開発してるならXAMPPも分かるけど, でもフレームワークの開発用サーバ起動コマンド使う方が楽じゃない?
手元では簡易サーバで動かしたりテスト走らせたりしつつ, リポジトリpushしたときにCIサーバ側でテスト用コンテナ立ててテスト走らせれば本番環境に近い環境でテスト出来るし 単一ページならともかく
リクエストまたぐときは論外 OS依存とかバージョン依存話してる奴らはまだいい
946ちゃんはアカン >>960
WinでもLinuxでもパス区切り記号は / 使っていいと思ってたわ
いや実際普通に使えるんだが。絶対パスやマルチバイト使わなきゃ大抵は平気なんだが
むしろなんでそんな定数使おうとするんだろう。一体何を考えて・・・ 964に同意でーす
DIRECTORY_SEPARATORなんて使ったことねーぞ
頭の中では死語になってる >>961
Apacheの設定って設定終わったら設定コピーするだけじゃん
多人数だとその設定はリポジトリを通して共有されるものだろう? pathに"C:"が入ってたらデバッグモード・・・
ってのを昔やってたな
色々めんどくなってサブドメイン管理にするようになったけど DIRECTORY_SEPARATORは確かCakeに入ってたな
今も入ってるかしらないけど
define("DS", DIRECTORY_SEPARATOR)
とかでDSだらけだった記憶が php.iniならまだギリわかるが(設定コピーすりゃいいけど)
apache httpdのhttpd.confでなんか開発に影響あってめんどいのってあるか?
httpdの設定も満足にできない、って相当だぞ >>969
逆
レンサバの保守をやる場合サーバー側で設定できない事がある
専サバなら本当に楽 >>970
これ手元のローカルの開発環境の話だろ
レンサバでphpのビルトインウェブサーバ使うのかお前は >>971
そりゃそうでしょ
レンサバでphpのビルトインウェブサーバは使えないだろう
・・・と思ったけど使えたらすまん 楽出来るなら楽した方がいいよねって話よ
何よりビルトインサーバの方が手間が少ないから
あとApacheとかnginxとかのフル機能Webサーバの設定ってコピペだけならいざ知らずちゃんとやるのはかなり勉強が必要だと思うけど
ましてトラブル発生時とか
上でも書いたけどPythonやRoRのプロジェクトでrunserverとかrails sとか開発時にはそっち使わない?
開発時からApache/nginx + Passenger/Unicorn/gunicorn/uWSGIとかでやるのが普通なのかな httpd.confの編集がおぼつかないというのは
socketってなんですかpathってなんですか正規表現ってなんですか、というレベルだろう
ふれーむわーくに頼ってて中身把握できてない人材と同じ系統
むしろ学ばせてレベル底上げする、あるいはふるいにかける良い機会では >>974
XAMPP入れるだけで動く環境が出来るんだからラクだろう
PHP入れる手間でApacheも付いてくるようなものだ
それとここPHPのスレなんだが
PythonやRoRの話したけりゃ別スレ行けよ >>976
xamppとかゴミ以下の存在。
開発環境としては、オートリロードもできないし(自分で仕込まない限り)、
本番環境としてはまったく使えないから、プロダクションの知識も役に立たない。
仮想環境とかDockerとか他にもーーっといいやり方がある。 まるで仮想環境やDockerなら
何もしなくてもオートリロードしてくれるみたいな言い方だな xamppアンチとか珍種すぎるわ
ただのテスト環境に噛み付くってほんっとうに暇なのか Docker Toolboxでphpファイルの入ってるWindowsのディレクトリをマウントして使うと遅い
rsyncやunison syncを使う手もあるが
ちょっと面倒くさい
それ使わないで速く出来ない? if文で文字列想定の変数を否定演算子でチェックするのはやめてって言われたんですが何故でしょうか 空文字""や"0"を想定しないといけないケースなんでは
まぁこれらを文字"列"というべきかどうか… function setAttribute($attr_name, $value) {
$this->attr_name = $val;
}
これっていわゆるsetterと考えていいんでしょうか? >>991
"0"がFALSEになるとかじゃないの
"0foo"でもなるかもしれない
俺もこんなケース覚えてないから文字列長0かどうかで判定している
絶対にやめておいたほうが良いぞ このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 473日 22時間 47分 4秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。