【PHP】下らねぇ質問はここに書き込みやがれ 10
■ このスレッドは過去ログ倉庫に格納されています
PHPに関する質問スレです 前スレ 【PHP】下らねぇ質問はここに書き込みやがれ 9 http://mevius.5ch.net/test/read.cgi/tech/1513760420/ 次スレは>>980 以降 本文の1行目に以下を追加すること !extend:on:vvvvv:1000:512 VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured 質問させていただきます データベースにセッション保存するようにsessionhandlerinterfaceを作りました session_set_save_handlerで該当のハンドラを指定したらちゃんとデータベースにも書き込めているのですが あるサイト上の複数ページで統一的にこのデータベース利用のセッションを使うには 各ページでsession_startの前に毎回ハンドラ指定をする必要があるのでしょうか? (テストしてみると指定しないとデフォルトのファイル利用のセッションが作られているようでした) php.iniか何かの編集でそもそもデフォルトをデータベース利用のセッションにするということなしに 上手いやり方があるのであればお教えいただければ幸いです どうぞよろしくお願いいたします >>140 cronから実行したプロセスは端末と結びついていないから、リダイレクト指定しなければただ閉じてる。 >>141 ありがとうございます デフォルトの設定だと標準エラー出力に出るんですね log_errorsを使ってサーバ側のエラーログを出力先に指定することもできると >>143 なるほど エラー出力をリダイレクトすればいいんですね ありがとうございました laravelに関する質問を受け付けていただけますと幸いです>< 今まで使っていたcontroller(app/http/controllers/)が、突然使えなくなりました。 <現象> 上記パスのcontrollerを変更しても反映されない。 上記パスのcontrollerを削除しても、古いcontrollerの設定が生きてて、プログラム自体は従来どおり動く なにか、他のパスに古いcontrollerが保存されていて、そっちを読んでいるような感じがする という感じなのですが、何か改善する方法を教えてくださるかた、いらっしゃいませんでしょうか? PHPをFastCGIやmod_phpで常駐させて動作させるとき、最初に一回だけ実行されるコードとリクエストの度に実行されるコードはどうやって区別しますか CGIモードの時は毎回全てのコードをロードして実行することになると思うんですが、 FastCGIやmod_phpだと予めロード済みの状態のプロセスを待機させてプロセスの起動やコンパイルの実行を省いて高速化していると思っています 例えばpythonのWSGIだと起動時にアプリケーション関数の外側に書いたコードが実行され、その後はリクエストのたびにアプリケーション関数の内部だけ実行されます -------------------- do_something() def application(environ, start_response): start_response('200 OK', [('Content-type', 'text/plain')]) return 'Hello, world' -------------------- これと同じようなことはどのように実現しますか 親クラスのprotectedプロパティに値を代入する時、 子クラス側にもプロパティを定義するものですか? コーディングの一般的な作法や、可読性的な話です。 >>148 そういうのはドキュメントに出力すればいいと思うけど PHPDocが面倒なら個人開発程度なら簡易的なものとして trait ClassInfo { public static function getClass() { return Reflection::export(new ReflectionClass(get_called_class()), true); } } 親クラスにこんなん入れて必要なときに参照すれば 少しはましになるんではないかと >>149 遅くなりましたがレスありがとうございます わざわざ子クラスにまで書く必要はなさそうですね "SELECT name FROM table WHERE name = 'hoge'" これはしっかり結果帰ってくるのに 事前に$hoge = 'hoge'してから "SELECT name FROM table WHERE name = $hoge" これだと空になるのなんで "SELECT name FROM table WHERE name = '$hoge'" "SELECT name FROM table WHERE name = ".$hoge とか試したけどダメだったわ; >>151 "SELECT name FROM table WHERE name = '" . $hoge . "'" これだと? >>153 編集したSQLをファイルか画面に出力してみて 意図した編集ができてないとしか思えないな PHP: nl2br - Manual http://www.php.net/manual/ja/function.nl2br.php string に含まれるすべての改行文字 (\r\n、 \n\r、\n および \r) の前に <br /> あるいは <br> を挿入して返します。 とありますが \r\nはWindowsのCR+LFだとして、\n\rという改行コードは存在するのでしょうか? よろしくお願いします 改行を\n\rで保存したり取り扱うエディタが存在するかもしれないし \r\nと勘違いして\n\rとか渡しちゃうかもしれないし そんな人にも<br><br>と2つにはせずに<br>1つにしてくれる親切設計ってだけでは めんどくさい CR絶滅してLFだけで統一してくれればいい ありがとうございました 昔はCRとLFで機能使い分けてたみたいだけど、当時からほぼCR+LFの使い方が主流だったよね? CRだけ使うなんて、同一行書き換え以外に使い道が思い浮かばない laravelの質問なのですが、よろしかったらご教授くださいませ DBに登録されている性別情報を取得して view画面のラジオボタンの初期値として、該当する性別をチェック状態にしたいと考えてます。 コントローラー側で、 $profile=['u_sex'=>$xxx->u_sex,***]; $param=['user'=>$user,'profile'=>$profile]; view側のhtmlを <input type="radio" name="u_sex" value=1 @php ($profile->u_sex) ? 'checked':''> としたいのですが、 htmlの「@php ($profile-> の > で、<input を閉じてしまってうまく動かせません。 なにか良い方法はありませんか? >>162 laravel知らんけど↓でどう? @if ($profile->u_sex) checked @endif >>163 言葉足らずだったね。スマン。 OSによっての解釈の話ではなくて、本来のCR、LFの意味での話。 CRはキャリッジリターン(行頭復帰)、LFはラインフィード(行送り)。 元々タイプライター(テレタイプ)から来てると思うけど、PCにおいてそれぞれ片方だけ 使う事あったのかな?って話。 結局使わないからOSによって都合のいい解釈になったんだろうけど。 まあどうでもいいや。スレチスマン。 ダウンロードしたソースをapacheで動かしたところ PHP Strict Standards: Declaration of defaultAuth::useredit() should be compatible with authBase::useredit($user) このようなエラーが出て該当する部分を見ると function useredit(&$user,$pwd = false) { if ($pwd) { $user['password']=crypt($user['password']); } $this->db->update('users',$user,array('id' => $user['id']),$this->userfields); } 1行目の function useredit(&$user,$pwd = false) に「&」があるのですが、それを取り除くとエラーが出なくなりますが、 関数の引数の前に & はつけることがあるのでしょうか? >>167-168 ありがとうございます、参照渡しというのがあるのですね。 php 5.4で、参照渡しが無くなったので、エラーが出ていることがわかりました。 &を取っても動いている感じなのですが、とりあえずそれで様子を見たいと思います。 >>169 エラーになるのは呼び出し側で&を使った場合 https://ideone.com/qo7ccI 親子でfunctionの定義が異なる場合にDeclaration of...って出る https://ideone.com/9aCPU1 親子両方で&をつけるか&を取るか一致させればいいんだろうけど、多分&をつけるほうが正解なんじゃないかな? >>170 >多分&をつけるほうが正解なんじゃないかな? クラスのことは勉強不足でわからないのですが、 class hoge function useredit($user) {} を function useredit(&$user) {} に変更するとエラーが出なくなりました、 確かに両方で無しか有りにするとエラーが出ないので、どちらが良いかわかりませんが、 これで様子を見たいと思います、ありがとうございました。 >>164 ありがとうございます そのコードでも、−>の'>'が、<input タグの閉じる>と認識されてしまいます。 どうやってエスケープしていいか、方法が見つからないので、多重配列を避けて記述するようにします。 自分もbladeは知らないが > htmlの「@php ($profile-> > の > で、<input を閉じてしまってうまく動かせません。 これはどうやって判断したの? 出力されるコードが <input type="radio" name="u_sex" value=1 @php ($profile-> あるいはコードが変換されずにそのまんま <input type="radio" name="u_sex" value=1 @php ($profile->u_sex) ? 'checked':''> になってるの? それともそこでエラーが出てて自分でそこが原因だと思ってるってこと? 予期せぬ > というエラーです タグ内で@phpを使い、変数で判定することは避けて タグの外で判定するようにしました。 色々ご指導ありがとうございました。 syntaxエラーかね コード見る限りobjectにキャストしてない連想配列を アロー演算子使って参照してるから エラー起きてるのかと思ったけどそういうわけではなさそうか よくよく見ると>>162 はどこまでがPHPか判定できなさそうだな 普通のPHPだと下のようになるが <input type="radio" name="u_sex" value=1 <?= ($profile->u_sex) ? 'checked':''>> 最後にいれるべき>が1つかけてる感じ 調べてみたら@endphpがあるようだからそれ使えば良さそう? 説明見る限りプレーンなPHP実行でechoしない感じがするから <input type="radio" name="u_sex" value=1 @php echo ($profile->u_sex) ? 'checked' : '' @endphp> これで一応>>162 の閉じてなさそう問題は解決するけど 明白にとじてる>>164 が動かないとなると @php-@endphpや@if-@endifは1行じゃ無理とか 行頭に書かないといけないとかあるのかもしれない ちょっとミス > 普通のPHPだと下のようになるが > <input type="radio" name="u_sex" value=1 <?= ($profile->u_sex) ? 'checked':''>> ↓ <input type="radio" name="u_sex" value=1 <?= ($profile->u_sex) ? 'checked':''?>> >>175 先生、本当にありがとうございます。 @endphpは記載忘れですが、実際には記載してます。 <input type="radio" name="u_sex" value=1 <?= ($profile->u_sex) ? 'checked':''?>> でも同じエラーが出てましたので、他の解決策が必要のようです。 コード的には <?php if($profile->u_sex==1){ echo '<input type="radio" name="u_sex" value=1 checked="checked">'; } と修正したものを使うようにしました。 コードが1行で綺麗に書けないのが残念でした。 本当ありがとうございました! あ、apacheのWebサーバで動くphpのことです WEBサーバに数十ミリ秒ごとにアクセスして、命令が出てる時はブラウザがスクリプトを実行する仕組みが今風らしい 質問させてください ファイルを開く 処理1 ファイルを閉じる ファイルを開く 処理2 ファイルを閉じる というようなコードを書いたんですが、 ファイルを開く 処理1 処理2 ファイルを閉じる に変えた方がいいですか? 懸念としてはファイルを開くという処理そのものが処理速度的に重いのであまり繰り返すのはよくないかな?と 1と2を分けた理由は一つにまとめると処理が複雑になって可読性が低くなってしまったからです お力添えよろしくお願いします >>183 素人的な考えだけど、ファイルを開くとファイルを閉じるを二回もしてるから 一回で済ますことができるならまとめたほうがいいかもだしなんで開くと閉じるを2回もしてるの?理由があるの?とかいわれるだろうし ファイルに対する操作が追記なのか、それともランダムアクセスによる更新なのか ファイルのサイズがどの位なのか、 処理1と処理2は独立した内容なのか、それとも順序性があり、処理1が完了する前提が必要なのか などなど色々条件がありそうだけど、 乱暴に言ってしまうけど、ファイル操作なんて大して重たい処理ではないと思う >>184 >>185 PC上でフォルダを覗いてファイルを開くと動作がもさっとしてる(スペックによる)けど、サーバー側ではそういった見た目(GUI)を伴わないから実際はサクサクサクッ!と動いてると考えていいですか? どうしても自分のPC上での動きを参考に「ファイル操作」を捉えてるから、「開いて閉じて開いて閉じて」は動作が遅いかもと感じます。間違った考え方とは薄々思ってますけど 正確に言えば、PHPが動作している環境次第 ストレージの性能が良いなら殆ど気にする必要が無いだろうし 扱うファイルがとても大きいならファイル操作はそれなりの時間が掛かる 示された条件だと、この程度の一般的な見解しか出てこないと思う 処理の開始時間と終了時間を記録し、 処理の違いでどの程度変わるかを見てみれば良いと思う 自分の予測だと、殆ど誤差でしかないと思う >>188 処理速度の計測方法調べてやってみたいと思います 参考になります。ありがとうございました phpのセッションとかでセッションの中身が1の時はAのページ成型、セッションの中身が2の時はBのページの成型、セッションの中身が3の時なら中身を1にしてAのページにって作られてた時に ブラウザのクロームとかの履歴では全部同一のページと認識されて上書きされるの?前のページ内で書かれてたものも全部上書きされるのか? Ruby では、小さいサイズで、読み込みだけなら、 File.read, readlines で、一気に全部読み込んで閉じる 処理は、その後に行う 読み込んで書き戻すのなら、処理中もファイルを開いておくかも知れないけど、 そうするとその間、排他制御で、そのファイルはロックされる laravelなのですが、よろしかったら教えてください。 ローカルに作成したサイトのindex.に接続すると、 geolocationで位置情報を取得するようにしたいのですが アクセス先がlocalhost:8000/indexの場合には位置情報が取得できるのですが 実機を使うために、IPアドレスでアクセスできるように php artisan serve --host 192.166.13.102と設定すると 開発しているPCや、実機でアクセスしても、geolocationが使えなくなります。 実機でローカルサイトにアクセスして、geolocationが使えるようにするには どうしたらいいのでしょうか? エスケープ処理のために$clean[$key] = htmlspecialchars( $value, ENT_QUOTES);でしてるんだけど <や>が変換されないでそのまま表示されちゃってるんだけどちゃんと変換できてないの?それとも書き方が悪い?誰か教えて >>193 そのまま表示されるのが正しい動作じゃないの? >>193 $valueの中身を忘れてた $value = <script type='text/javascript'> location.href='http://www.yahoo.co.jp' ; </script>; これで 何でVisualStudioみたいにGUIで開発できないんですか? >>194 でもサニタイズしたはずなのにphpでフォームにJavascriptの$valueの中身入れるて飛ぶとYahooに飛んじゃってるんだよなIEで確認したから間違いないけど どうせブラウザのソース表示してみたら&lt;&gt;になってるとかいうオチだろ それは、タグ内の属性じゃん! そこは、要素内の内容部分じゃないよ! PHPやたったことないんだけど、どういう風に起動してるのか俺に簡単に説明してくれない? cgi(まあperlとしよう)だと、ブラウザがhttpdにリクエストして、cgi(perl)を起動する。 httpdは標準出力(まあたぶんhtml)を受け取り、それを必要なら加工/整形(主にヘッダー) してブラウザに出力する。 phpはどこで誰からリクエストを受けてどうやって動いて、誰に何を出力してんの? そしてcgiとは何が違うの? とりあえず、cgi(perl)と違うのは、常駐して起動してるから速いんだよ、ってのは聞いたけど、それ以上は分からない。 そのへんを分かりやすく俺に教えてやってくれ お願いします phpはcgiモードとmoduleモードがあって cgiは呼び出し式 moduleモードは常駐式 受け取ったデータの処理の流れは一般的なcgiと同じでhttpd経由 常駐だから早いのも確かにそうだけど、標準機能のみで色々できるから、機能を都度importしない事も速さの主因 まあそれはちょっとhttpdとの関連性からは離れている話ですね >>202 わかったありがとう! cgiモードとmoduleモードの選択ってのは、どこで誰(どのプログラム)が判断して決めるの? php自身がmoduleモードで動いていて、httpdがmoduleモードで動いてるphpに対してのアクセス方法を知っているってこと? .exe, .dll の違い。 例えば、sqlite3.exe, sqlite3.dll の違い CGI は、.exe と同じ。 別プロセスを起動するから、その起動時間が掛かる .dll は、そのプログラム(プロセス)内にライブラリを読み込むだけ。 別プロセスを起動していない Ruby, PHP, Perl などのCGI では、 httpd が別プロセスを起動して、結果を取得して、プロセスを終了させる 毎回この起動・終了に、時間が掛かるから、 起動しっ放しというモードもある >>204 かなり分かった! httpdが自分のプロセスにdllを取り込むってことかな? https://i.imgur.com/QB190U9.jpg このプログラム実行して、43行目にphp Array to string conversion inっていうエラーが出る。ググッて見たけど分からん。 ループ足りないような 30行目のarray_chunkで$imagesは配列の配列になる http://php.net/manual/ja/function.array-chunk.php 42行目で$imgは配列 43行目で配列($img)をechoしようとしてる foreachを追加して2重ループにすればいいんじゃないか $images が文字列の配列の配列なんだから$images[$page]が文字列の配列 $imgは文字列だろ >>207 とりあえず43行目あたりで print_r($img); とかやってみたら >>209 確かにそうだ >>208 は間違い >>211 どう解決したのか書いてくれると有り難い >>193 原因がわかったわ、その前にページが止まるからなぜなんだろうと思ったらChromeが制御してたわ コードのscriptタグを検知して連続遷移しないようにしてたみたいだ、余計なことを・・・ 質問です。 htmlソースをinclude等で読み込む際、そのソースの途中に追記する事ってできますでしょうか? 読み込むソース <div>1行目</div> <div>2行目</div> <div>3行目</div> ↓ includeする時にこうしたい <div>1行目</div> <p>追記</p> <div>2行目</div> <div>3行目</div> $text = "<p>追記</p>"; <div>1行目</div> <?php echo $text."\n" ?> <div>2行目</div> <div>3行目</div> とか <div>1行目</div> <?= $text ?> <div>2行目</div> <div>3行目</div> とか Ruby, JavaScript にもある、部分テンプレートを読み込む、partial file の機能だろ。 PHP のフレームワークにもあるはず 一般的には、header, footer などの各部分は、別ファイルにして読み込んで使う >>215 すいません質問の仕方が悪かったです。 読み込む側のページでのみ関数みたいに個別で追記をしたいんです。 読み込まれる側のファイルにURL判別とかの細工でもしないと無理ですかね・・? jQueryでいう、.loadしたソースにコールバックで.insertAfter();を走らせるイメージです。 >>216 そうです。ありがとうございます。 フレームワークなどで行うのですね。 include/requireは関数じゃないので返り値としてソースを受け取れないから そのinclude/requireしたファイル内で追記してどうこうってのは無理 file_get_contentsみたいの使ってメモリにロードすれば可能 そこでロードしたソースをいじればいい PHP標準のDOMパーサーは非常に使いづらいので正規表現がお手軽 細かい関数の使い方は調べてもらうにして #tmpl.inc <div>1行目</div> <div>2行目</div> <div>3行目</div> #a.php <?php $src = file_get_contents('tmpl.inc'); 〜 a.phpでどうしてもinclude/requireしたものをとっておきたいならラップして #a.php <?php require 'tmpl.inc'; #b.php <?php $src = file_get_contents('a.php'); 〜 >>219 a.php や b.php のくだりがよく分からんが、 ob_start(); include 'tmpl.inc'; $contents = ob_get_contents(); ob_end_clean(); とやる方が手っ取り早いんじゃね。 >>219 >include/requireは関数じゃないので返り値としてソースを受け取れない 理解しました。ありがとうございます! file_get_contentsはスクレイピング時に使った事あるのですぐ理解できました ありがとうございます〜 >>220 ,>>221 ありがとうございます 一番知りたかったのはinclude/requireでは無理と言う事でした 方法論、参考にさせていただきます >>222 http経由の file_get_contents なら >>219 の b.php は tmpl.inc の内容(が require で処理されたもの)が得られるけど、多分そのままやってもローカルの a.php のソース自体が得られるだけだと思うからきちんと実験した方がいいよ。 >>220 のやり方は例えばメールの文面なんかを別ファイル化したりといろいろ使い道があるよ。 mail.inc を お問い合わせありがとうございます <?=$date;?>に<?=$name;?>からのお問い合わせを受け付けました。 受付番号は <?=$no;?> です。 みたいに書いておいて >>220 のやり方で mail.inc を include すると、変数が当て込まれた形で $contents として得られる。 これを list($subject, $body) = explode("¥n", $contents, 2); とやってタイトルと本文に分離してメールを送るとかね。 $date とか $name なんかの変数は include してるスコープから見えるように設定しておく。 >>223 ご親切にありがとうございます。 とてもスマートな印象ですね。 今後の参考にさせていただきます。 $paramに連想配列を格納して、foreachで取り出そうとしてるんですけど 先頭要素のキーが取り出せず、先頭要素の値から取り出し始めてしまうのですが そういう挙動に詳しい人いらっしゃいますか? foreach ($array as $key => $value) にして、$keyにアクセスしてる? してます var_dumpで配列を吐き出すと、しっかり吐き出せるんですけどね こんなんで時間かかってしまって泣きですわ >>227 array_keys を使うとどうなる? いいの?それでw 気になるわぁ 再現コードあれば欲しい 初めて聞く症状だけれど var_dumpで確認できている配列データなら foreachで取り出せないわけないので 見間違いとか、スクリプトやタグのせいで消えてしまっているとか別の要因なんでしょ だなぁ >>226 のコードで最初のキーが取り出せず値から取れちゃうというのが、$key と $value に具体的に何が入ってるということなのか分からんな。 言葉通りに捉えれば $key に最初の要素の値が入ってるんだろうが、んじゃ $value には何が入ってるの?みたいな。 centos7でphp72をremiで入れた場合、 # php -bash: php: コマンドが見つかりません を解消するための、正しいシンボリックリンクの張り方ってどこに作ってどこへ向けるのが正解? /usr/binに作るのか、 パスが通っていればどこでも良いのか、迷ってます。 インストールしたときは # cd /bin/ ; ll | grep php php72 -> /opt/remi/php72/root/usr/bin/php となっています。 >>234 はい、入ってますが、phpは宙ぶらりんな状態になっていますので、毎回シンボリックは張る物だと思っていました。 # yum list | grep php72 | grep cli php72-php-cli.x86_64 7.2.16-1.el7.remi @remi-safe # which php /usr/bin/which: no php in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin) # which php72 /bin/php72 lineボット作ろうとしてるけど curl_initが使えない 参考までに、Windows 10・WSL・Ubuntu 16.04 で、python の、symbolic link は、 /usr/bin$ file python python: symbolic link to python2.7 /usr/bin$ file python3 python3: symbolic link to python3.5 >>237 1. 使えるようにする 2. curlの実装を探してくる 3. curlを自分で実装する 好きなのえらべ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる