【PHP】下らねぇ質問はここに 9
■ このスレッドは過去ログ倉庫に格納されています
PHPに関する質問スレです 前スレ 【PHP】下らねぇ質問はここに書き込みやがれ 8 http://mevius.5ch.net/test/read.cgi/tech/1489506082/ 次スレは>>980 以降 本文の1行目に以下を追加すること !extend:on:vvvvv:1000:512 VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured >>16 ありがとうございます /homeからのパスを設定しないといけなかったんですね… php.ini に設定すればログがふえるようになりました 本当に感謝です c言語から勉強初めてjava→html/css→javascript→php→mysql→jqueryときてwordpressの本読んだけど ウェブやるならこれだけでいい気がして今までの時間が凄く無駄に思えてきた・・・ phpとかできたほうが有利な点を教えてください・・・ モチベーションが・・・ 何かウェブサービスをやりたいとか スマホでゲームとか作ってユーザのデータを集約させるバックグラウンドが必要とかでなく ただWebサイトを構築したいってだけなら別にWPでいいんじゃない? モチベが欲しいならWPなしでサイト構築するためにPHP学ぶでもいいのでは? PHPerは無駄が好きなのでJava脳で車輪の再発明嫌いな人はPHP向いてないかもね 同じサーバー内で、自プログラムが置かれているディレクトリとは異なるディレクトリにある ファイルを読み込みたいのですが、そのディレクトリはBASIC認証をかけています。 この場合、phpプログラムから認証を突破するための手続きはどうすればいいでしょうか? IDとパスワードはもちろん分かっている状態です。 httpでやる必要がないならbasic認証関係ないんで ローカルのファイルのパスがちゃんと指定できてれば読める もしhttp経由で読み込む必要があるのなら http://php.net/manual/ja/function.file-get-contents.php ここの例4のとこ参考にして Authorizationヘッダをつけてリクエスト送ればいい "Authorization: Basic {$token}\r\n" $tokenはbase64_encode('id:password'); >>172-173 思い違いと動作確認でもミスがあり、何か処理が必要と思い込んでいました。 すっぱり整理してやり直しをし、無事動作することが確認できました。 どうもありがとうございました。 ここで聞いていいのかわからないんですが、フレームワークの利用に関する質問です 5年以上前に誰かが作ったWebサイトを運用していく必要があるのですが、フレームワークはEthnaを利用しています 当時サイトを作った人や、その後追加改修を行った人は、もういない状態です。 Ethnaの使用感としては5年以上前に開発が止まっていて、ドキュメントも未完成。 これに学習コストを払うのは嫌だなあというのが本音です。人不足で新しい人も入ってきているのですが、覚えてもらうのが申し訳ないレベルです。 ただ、フレームワークを変えて書き直すとなると、ほぼサイトをリニューアルすることになります。 そもそもフレームワーク関係なく、設計書もなく、中身がブラックボックス化しているサイトなので、リニューアルは何度か検討しています。 が、やはり時間がかかってしまうので、なおしたいことがあればその都度プログラムを読んで、修正しています。 なので、「現状のままであるリスク」を「リニューアルするコスト」がこえないと、なかなか上を説得することが難しいという状態です。 このWebサイトは、年数億円を売り上げており、何かの拍子に動かないというのは許されない状況です。 前提としてはここまでで、ここからが質問なのですが 5年以上前に作ったサイトの、5年以上前のフレームワークをそのまま扱っていくリスクというのは、どう見積もれば良いものでしょうか? 古いシステムをそのまま使い続けてる現場に入ったなら、どのように考えますか? 一応進言すれば、現状は変えられる可能性が高いのですが、判断に悩んでいます。 動かなくなったらまずいといいつつ、 よくわからないものをいじって、なんとなく動いてるってことだよね? その現状に危機感を抱くべきでは? 個人がフォークしたEthnamという後継プロジェクトはあるみたいだけど、 5.4で動くなんてのをウリにしてるあたり、 オリジナルはサポート切れのPHPバージョンを使ってるのだろうけど、 それだけで十分置き換え理由になるのでは? >>175 コスト面では定量してTCOで比較すればよい リスク評価も定量して算入するならリスクを分類した上でリスク発生率と予想損失額の積で損失見積もりとする サイトの仕様を解析して理解する所から始める。 仕様さえ分かれば、フレームワークなんて大したことないって気づきそう よく知らないけど、5年以上前のフレームワークってセキュリティ的にどうなの FastCGIで動かす時にアプリケーション初期化のコードは最初の1回だけ実行したい というより予め実行済みの状態でリクエストを待機させたいんだけど、どうすればいいの? ファイルを file_get_contens() や file_pet_contents で読み書きしたいんですが ロックってどうすればいいんでしょうか flockにファイルディスクリプタが必要みたいなんですけど それを使って与密会するわけじゃないのでRD_ONLYで開いてもいいんでしょうか $fp = fopen($filename, 'r'); if (flock($fp, LOCK_EX)) { file_get_contents($filename); 〜 file_putt_contents($filename); flock($fp, LOCK_UN) } でうごきますか? ロックファイルはわける必要がありますか? ロックがぶつかるケースをデバッグできないので大丈夫なのかどうかがよくわかりません $fp = fopen($filename, 'c+'); if (flock($fp, LOCK_EX)) { $buf = ''; while ($tmp = fread($fp, 1024)) { $buf .= $tmp; } rewind($fp); ftruncate($fp, 0); fwrite($fp, $buf.$buf); flock($fp, LOCK_UN) } スマホ向けに下記をhtmlのheadに書いた場合は、スマホの横サイズいっぱいで折り返し表示されますが、 <meta name="viewport" content="width=device-width,initial-scale=1" /> php埋め込みhtml(拡張子はphp)に上記を書いても折り返してくれません。 他に何かお作法が必要でしょうか? 文字コード周りに問題がなければ PHPで出力したHTMLのソースを表示してみてオリジナルのHTMLと対比してみては? エスケープミスでタグが閉じられてない状態で出力されてるとかそんなレベルかもしれない サーバ側で関連ヘッダーを出力しちゃってる可能性もあるので 理解出来るならブラウザの開発者ツール使ってHTTPヘッダの中身チェックするといい なんにせよ再現できる全体ソースが出ないことには答えようがない >>186 原因が分かりました。 変数に改行(\n)付きの長いメッセージを入れてあり、それを表示するのにpreタグ で囲っていたのが原因でした。 preタグを使わずに改行付きの長いメッセージを表示する方法を考えてみたいと思います。 どうもありがとうございました。 連投すみません。 nl2brを使えばすぐでしたね。 初歩的なことですみませんでした。 >>184 やっぱりロックとる場合はロックをとったファイルディスクリプタに fread, fwriteで読み書きする必要があるんですね コード参考にさせていただきます ありがとうございました プログラムの基本を教えてください。 一つのphpファイルが300行をオーバーしてしまったから、汎用性はないけど一まとまりの機能があって、色んな所から呼び出す処理を別のphpファイルにしてインクルードで呼び出す、 という形で小分けにしていこうと思ってますが、そんな風にバラバラにしてしまってもいいんでしょうか? その考えの行きつく先にオブジェクト指向があるのでオブジェクト指向入門するといいかな 方向性としてはあってるのでとりあえずは思った通りにやってみては? あと行数に関していえば1万行クラスのソースコードはざらなので(半分はコメントだったりするけど) 長い行数になったときのソースコードの管理の仕方をIDE使って覚えていくといいよ >>191 返信ありがとうございます。1万行はぞっとします。とりあえずはこの方向性で行きたいと思います。 >>189 ファイルロックについてはその通り stream_get_contents()を使うと>>184 よりはもう少しスッキリ書けるかと 関数の呼び出しがあっているのかわかりません ボタンでCreateとLikesの処理をわけたいんですが、うまく実行できません (ボタンの処理は別のPHPファイルに書いてます) create_qaとUpdate_likes_whenbuttonClickは、単体であれば実行ができているのはわかっているのですが、振り分けるためのbutton_Click関数に入れた途端動かなくなります returnで、振り分けそのものができていることは確認しました(IDを表示することができたので、問題がないかと思っています) 何か間違っていそうか分かる人教えて下さい public function button_click(Request $request,$session_id){ if(isset($_POST["create"])){ $this->create_qa($request,$session_id); } else if(isset($_POST["likes"])){ //return $session_id; これはできてる $this->update_likes_whenbuttonClick($request,$session_id); } } エラーログは読んだの? 超能力者じゃない限りソースだけ貼られても分からんよ >>195 errorが全くでなくて、むしろ真っ白なページが表示されます・・・ 関数単体だときちんとreturn viewしたページに飛んで、処理もできているのに、こっちだとできないです >>197 return でelse以降に入ると数値が表示させるようにして確認しましたが、今のところ流れてはなさそうです 分岐を一切作らずに $this->create_qa($request,$session_id); だけ入れてもおかしなことになるので、 $this->〜〜〜っていう表記が間違っているような気がするのですが何がおかしいのか全く分からず・・・ >>198 簡単な別のメソッドを作って呼び出せるか試してみたら >>199 引数なし、return0をするだけの別の関数を作って、同じように呼び出しをしてみましたがだめでした、 やっぱりthis〜の行が何かしら影響を及ぼしてるようです・・・ error_logでファイルにエラー吐いてないのか? 画面出力はエラー出力でHTTPヘッダとか壊れてまともにならんことも多いぞ >>201 ためしにエラー出力してみましたが、全く何もでてないようで・・・ >>194 ですが解決しました! 分岐文の内部でreturn viewができてないのが原因でした すみませんお騒がせしました 変数の$〜〜の$ってなんて読むの?? ドルなんとかって読んでるんだけど間違い? 文字列全体を正規表現判定するのってどうすればいいんですか? 入力に不正文字がないかチェックしたいんですけど pregmatch('/[0-9a-zA-Z]+/', $input) だと一部にマッチしてもtrueになっちゃうので 文字列全体で数字アルファベットしか使われてないことを確認したいです ^[0-9a-zA-Z]+$ そういう単純なものは正規表現使うまでもなく 他の関数が用意されてると思ったほうがいい http://php.net/manual/ja/ref.ctype.php ctype_alnumを使えばいいんですね ありがとうございました! あとPHPの配列についてききたいんですけど a[] = 2; a[] = 4; や array(2,4) でつくった場合Cやjavaの配列と同じくメモリ上にvalueだけがならんで a[1] でアクセスした場合アドレス計算でアクセスされるんでしょうか? それとも自動的に連想配列になって '1' っていう key を検索するんでしょうか? メモリにははいるけどキャッシュにははいらないそこそこ大きなテーブルデータを扱ってるので気になりました 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 Q3682 参考書を1ページずつjpgに自炊スキャンしましたが 今あるjpgの奇数ページと偶数ページをくっつけて見開きページの画像にして保存したいと考えました、phpの画像処理ライブラリは GD DmImage ImageMagick 等があるみたいですが 手軽にできるのはどれですか? そんなのどれ使っても手軽だろw こんなところに書いて待ってる間に処理一つくらい書けるし、 まずは分かりやすそうなのどれか一つ使って書いてみればいい どれもベースがGD GDに皮をかぶせて使いやすくしたものだが皮の厚さが違う 初心者です。。 Class hoge { public static function aaa (){ echo __CLASS__; } public function __construct (){ static::aaa(); } } Class piyo extends hoge {} $var = new piyo(); //hoge みたいなコンストラクタの中でstaticつけて関数呼び出すのってどういう意味が有るのですか… static::hogehoge($this);みたいなのがコンストラクタのなかにあるのって どういうふうに動いてるのかわからないです。 >>216 遅延的束縛がわからんのです。 コンストラクタの中でやってるからpiyoにならないのかな static $piyo; public function __construct(){ static::hoge($this); } public static function hoge($this){ return static::piyo = $this; } みたいなのときとかもうわけわからん >>217 まんま>>216 のマニュアルに書いてあるんだけど読んだの? >>219 書いてある? あんまりインスタンス化して使ってるような例ないぽいけど >>217 はClass Hogeとして $aho = new Hoge()とするとインスタンス化した時にHogeの静的プロパティも初期化されるってことだよね。staticとparentがチェーンしてると訳わからんくなる Hogeを継承したpooクラスがあったらpooクラスのstaticプロパティも初期化されるけどselfとどう違うのかわからん。。 トランプゲームみたいな感じで写真の入ってるカードを並べ替えさせるゲームを作ろうと思っています。 カードはドラッグして移動可能。 所定の□の近くにくるとカードは□に収まる こういったことを簡単に実現できるおすすめの言語があったら教えてください。 使ったことのある言語はCとC#だけです。 なぜPHPのスレで聞くのか? てか、ハブリッシュするプラットフォームに依存する話しだから それを言わないとだれも答えられない ロジックだけ実装するならどんな言語でも作れる >>224 すいません。 スレタイ読み違えて誤爆しました・・・。 フォームで受け取ったデータをそのままディレクトリ名にしたいんですけど ディレクトリ名に使われて危険な文字をはじく関数みたいなのってないですか? . と / だけはじけば大丈夫なのかな 入力できる文字を絞った方がいいよ アルファベット数字のみとかにすれば一番無難 それ以外の文字が一文字でも入ってたらエラーで返す a.php が吐くHTMLに、b.php を差し込むSSIタグを埋めたところ、挙動がおかしい。 サーバは apache、PHPの出力に対してもSSIが効くように設定してある。 どうおかしいって、b.php 出力がSSIタグの位置からズレた場所に挿入され、しかもなんか断片化してる。 a.php と b.php の出力が混ざった感じというか、a.php と b.php が非同期に並行して動いてる感じというか。 a.php や b.php と同等の内容の a.html と b.html を用意し、a.html に b.php や b.html をSSIするケースや、a.php に b.html をSSIするケースでは問題無く、a.php に b.php をSSIするケースだけでおかしい。 原因の心当たりって無い? ツッコミどころだらけで笑うわ * SSIはWebサーバの機能(スレ違い) * その構成にする意味が分からない * というかSSIってマジ? SSIって10年以上ぶりに聞いた なんでそんなトリッキーなことしてんだw >>231 > * SSIはWebサーバの機能(スレ違い) あぁ、それもそうだ。おっしゃる通り。 残りについては、そういう都合があるとしか言えない。 SSI もまじ。<!--#include ... のやつな。 いろんなもの SSI してるのよ。 SSIの時点でもうアレだけど更にPHPを絡められて試す気がなぁ とりあえずApache側の設定か? 同期、非同期の問題ならpreforkとworkerで挙動変わるか試してみるとか まあ、どっちにせよ激しくスレ違いな気がする 更新履歴〜 みたいなページでSSI使ってたことはある これはこれで便利やしトリッキー言うほどじゃないだろ まあ今時としては、SSIみたいな挙動をするphpコード書くだけになるか public function Hoge($hoge) { return function () use ($hoge) { return $this->test_func($hoge); }; } こういうのって意味有りますか? クロージャのとこに$hogeを持ってきても実際には繋がりはないように見えるんすけど $var = Hoge($hoge) //$var = function($bar){ return $this->test_func($bar);} クロージャの$hogeと最初の引数の$hogeの繋がり クロージャになっても最初に渡された$hogeは生きてるんやな。。 知らなかった >>236 PHPを使ってるんだったら SSIの<!--#include...に該当する処理は 取り込み対象をPHPのコードとして評価したいならinclude、 文字列として評価したいならfile_get_contets()するだけの 1行で済む話 SSIはサーバー環境依存だし今どきSSIが有効になってる古いサーバーを これから先も使い続けるのか?という疑問もある SSIってJavaScriptもiframeタグもブラウザ標準ではなかったそれこそ10年以上前の遺物よな メンテしているperlのサイトで確か使ってたな phpで使おうと思うほど猛者じゃないので勘弁 PHPでerrnoを取得することはできますか? やりたいことは、ファイルまたはディレクトリの有無を確認しつつ、 falseだった場合は、ENOENTなのかEACCESなのか知りたいのです。 file_existsとis_readableを組み合わせるしかないですか? >>230 せっかくなので分かったことを報告。 SSI にせよ PHP の virtual にせよ apache のサブリクエストが発行される場合、元リクエストとサブリクエストのPHPのインスタンスは同一のものが使い回されるらしく、グローバル変数なんかは共通されるらしい。 恐らく define や include、出力バッファなんかも共有されてると思う。 それでいろいろ思いもよらない挙動を示すっぽい。 ということが分かったので、適当に回避した。 apacheの設定によるところもあるかもしれないけど、そこまで検証してない。 なんか普通の話だな グローバル変数なんて使ってたらそんなの当たり前だろ >>247 ユーザー定義のグローバル変数や名前空間をもたない定数なんかもう何年も使ったことないけど よく分かってないので、スマソ。 モジュール版PHP5.3環境で動かしていたのを、 @ モジュール版5.6環境に移行させる場合 A CGI版5.3環境に移行させる場合 @、Aともにソースコードの書き換えは必須なの? また、簡単なのはどっち? それだけじゃなんとも言えんよ… エスパーでも答えられんと思われ 上の話と同じでグローバル変数とか使ってるとかなら書き換える必要あるかもね 使われてるモジュールやライブラリが対応してるかどうかもあるし 同じ環境を用意して実際に動かしてテストするしかないと思う 5.6でサポートやめたり、推奨からは図したりしたものがあれば 良くて警告、悪くて動作せずとなる やってみないと分からないから、試験環境を作って試すのが最善 5.2.X⇒7.2.Xに以降した環境がいくつもあるけど PHPコンパイルで何度かこけた(コアに取り込まれて使えなくなってるオプションがあった)ぐらいで コードを手直しをした記憶が全くないなぁ 逆にどんな書き方をしてたら動かなくなるのやら… 開発を error_reporting=E_ALL(PHP5.4以前ならE_ALL|E_STRICT) でしてなかったりすると環境移行でエラー出まくったりするかもな 初心者はまずエラーを正しく出すところから学習しないとな >>248 同じインスタンスで動くならそりゃそうだろって話だけど、virtual はともかく SSI が同じインスタンスで動かすのが当たり前かと言われれば微妙じゃね? $_GET みたいなスーパーグローバルとかどうなっちゃうんだよって問題もあるし、実際出力バッファはまぜこぜになって使い物にならないわけだし。 わざわざ SSI でやるのなんて、他所の誰かが作った全く関係ないものを自分の処理と隔離してページ上に取り込みたいなんてケースだったりするわけで、隔離できないならあんまり意味が無いというか。 そういうものだということが分かってりゃやり方考えるからいいんだけど、なんでそうする?っていう仕様だと思う。 PHPそのものの問題じゃないであろうこと引っ張ってすまないけど。 前バージョンと同じように、必要なモジュール・ライブラリがロードされていて、 基本的な環境に差異がないのを前提とすれば、 あとは廃止変更された機能や関数が影響を受ける。 なので動かない場所が出てきて、書き換えが必要になる場合はあるが、 それはコードの1%にも満たないぐらいの量のはずだから、 大規模なアプリケーションでも書き換えに1日はかからないだろう。 >>256 > 他所の誰かが作った全く関係ないものを自分の処理と隔離してページ上に取り込みたい SSIを使う理由になってないしSSI以外の知識がないだけ サーバーの知識が多少ある人間なら今この時代にSSIを使うのがいかに馬鹿げているかすぐ分かる SSIもhtaccessも無駄にサーバーに負荷をかけわ、遅いわ、セキュリティリスクの管理もしにくわで何1つ良いことないから無効にしろと大昔に教わったな 結構最近でもSSIインジェクションで資生堂の小会社がが情報漏えい起こしてたけど資生堂みたいな大きなところが未だにSSI使ってることに驚いた includeしたいだけなら他にいくらでも代替案あるのにさ SSIインジェクションやらかすようなやつはSQLインジェクションだってやらかしかねないんだから、それはSSIを使わない理由としては弱いでしょ。 素人だからよく分かんないんだけど ssiでincludeするのとhtmlで<iframe> or phpでfile_get_contents するのは何が違うの? ssiを使う理由って何? >>261 旧来からのスタイルを踏襲しているとか、 SSIはPHP知らなくてもHTML(と言えるか微妙だが)分かれば使えるってのもあるかもね。 サイト全部がPHPじゃないし、みんながみんなPHP使えるわけじゃないからな。 PHP使うなら PHP の include しても file_get_contents しても、適用できるなら得られる結果は一緒でしょ。 >>261 使う理由は特にない 1.SSI/#include file|virtual="path"はpathの中身をそのまま取り込んだ結果を取り込んだ場所で出力する 2.<iframe src="url|local_path">は対象の出力をフレームとして取り込む 3.file_get_contents('url')はurlの出力を取り込む 4.file_get_contents('local_path')はlocal_pathの中身をそのまま取り込む 5.includeは対象を「PHPのコードとして評価する」 1 ≒ 2 ≒ 3 ≠ 4 ≠ 5 だと思っとけばいい includeとfile_get_contents()が等価なんてのは大嘘なので信じないよう SSIの#includeに該当する処理は、そのほとんどが<iframe>+αで片付く程度の低レベルの事しかしてないね 繰り返すけど今更使う必要性は全くない過去の遺物です include と file_get_contents が等価だなんて言ってないぞ。 別のコンテンツを差し込む方法として適用できるケースがあると言ってるだけで。 例えばページのヘッダやらフッタやらを別ファイルに浮かせたとして、それが include できるなら include で、file_get_contents できるなら file_get_contents で差し込めるだろ。 >>265 > PHP使うなら PHP の include しても file_get_contents しても、適用できるなら得られる結果は一緒 一緒じゃないでしょって話だと思う 実際全然違うし ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる