【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 >>104 名前空間を指定しないということは 標準関数や内部クラスと同じグローバルの名前空間(\)に属することになるので もちろんコーディングする上での利便性はいい 名前空間がPHP5.3から導入されたように昔はなかったわけだし「やりよう」によっては問題にならない 例えば被ってしまってエラー出たら関数名を変えるとか 被る可能性がかぎりなくないような風変わりな関数名をつけるとか 先人がその「やりよう」が面倒だったから導入したんだけど 実際にはよほど巨大なプロジェクトでもない限り問題は起きないと思う あとは名前空間の概要見て決めたらいいんじゃないかな http://php.net/manual/ja/language.namespaces.rationale.php 他人に使ってもらうことを考慮するならつけるべきだけどね >>107 解説ありがとうございました。 ところで関数にprivateやpublicを付けられるのはclassの中だけですか? namespaceの中でprivateな関数を定義することは出来ませんか? つまり、そのnamespaceの中だけで作業する為の関数で、 外部に公開したくない関数です。 質問させてください。 配列で「りんご・バナナ・みかん・りんご・みかん・りんご」とあった場合、 これを「りんご1・バナナ1・みかん1・りんご2・みかん2・りんご3」 みたいに同じものが何個目かを書き加えたいのです。 どうやるといいしょうか? $data=array('りんご','バナナ','みかん','りんご','みかん','りんご'); $result=$count=array(); foreach( $data as $key => $value ){ if( isset($count[$value]) ){ ++$count[$value]; }else{ $count[$value]=1; } $result[$key]=$value.$count[$value]; } var_dump($result); print_r(array_count_values($data)); でよくないすか? array_multisort()の配列が多次元だった場合はどこを比較してるの? $ar[] = array(1); $ar[] = array(1); $ar[] = array(2); $ar[] = array(2); $ar2 = array(1,2,3,4); array_multisort($ar, SORT_DESC, $ar2); Array ( [0] => 3 [1] => 4 [2] => 1 [3] => 2 ) ---- $ar[] = array(1, 1); $ar[] = array(1, 2); $ar[] = array(2, 3); $ar[] = array(2, 4); $ar2 = array(1,2,3,4); array_multisort($ar, SORT_DESC, $ar2); Array ( [0] => 4 [1] => 3 [2] => 2 [3] => 1 ) >>110 返信が遅くなってしまいすみません。 うまくできました。 本当にありがとうございます。 phpでスクレイピングした文字列をmysqlのデータベースにInsertしたいのですが、ざっくりどういう風にやればよいでしょうか? スクレイピング自体は出来ていて、ここからDBに挿入する方法が知りたいです。 よろしくおねがいします。 ざっくりいうとINSERTのSQL文を書けばいいんだよ サーバー側に数万枚の画像を保存する場合、数万枚を1つのフォルダに入れるのと、10000台、20000台のようにフォルダ分けしたほうがいいですか? 1ページに20件〜50件くらいサムネ表示したり、1ページに数枚表示したり ネットショップのようなイメージ フォルダ分けするとアクセス時間が短くなる場合が多い laravel関連の質問をお願いします。4日間前進できてません(汗 laravelのデフォルトのモデルUserと、テーブルusersを使い、ログイン(sign in)認証を行いたいのです。 ----- form ------- <form action="***" method="post"> <input type="email" name="email> <input type="password" name="password"> </form> ---- controller ------- public function post***(Requeat $request){ if(Auth::attempt(['email'=>$request->emai,'password'=>$request->password]) { XXXXX; } ここで、if文のtrueにならず、すべてfalseになります。 Auth::attemptが、usersテーブルを読み込んでないような気がするのですが、 どうしてtrueにならないのか、教えていただけないでしょうか>< どうか、よろしくお願いします。 $request->emaiにlが足りて無いとか? すみません。$request->emailです。 タイプミスはなくても、falseになります。 よろしくお願いします。 他人のホームページを書き換えたいんでつけど PHP使えば狩野でつか? その他人が許諾しているなら、その他人に聞け その他人が許諾していないなら、警察が聞いてくれる 何を書き換えたいんだろう? HTML CSS JAVASCRIPT、それともフレームワークに依存? PHP,CAKE,いろいろあるから、一概になんとも・・・ >>130 PEAR server is down 「PEAR公式サイトのウェブサーバー上で改変された『tainted go-pear.phar』と セキュリティ侵害が発見されました。PEARのウェブサイト自体は無害なクリー ンサイトを再構築するまで使用不能とします。より詳細な情報はPEARの公式 ブログでチェックしてください」 Python勉強してるの リストから”取り出す”っていう日本語ってなんか違和感ある リストから取り出して要素を付け加えると元のリストにも反映されてる これって取り出すっていう日本語だとイメージ変だよね なんていうかリストのいち部分をズームアップしてそこだけ見えるようにしたようなイメージのほうがいいきがするの だって取り出したんだったらいつ元に戻したの?っていうことになるよね? イメージ的に たぶん想像だけど元々のリストのメモリ上の位置は全く変わっていなくてずーっとそこにあるから取り出したっていう日本語が変なんだと思うの これはリスト=辞書a、辞書b みたいになってて辞書aをとりだしてそこになにかを付け加えた場合に 元のリストに変更がそのまま反映されることを言ってます 取り出すっていう日本語の操作だといつ元に戻したのっておもうよね? laravelに関する質問お願いします Auth;;attemptで参照されるテーブルが、どこで定義されているか分かりますか? laravelの質問です コントローラーの関数にフォームリクエストを入れるとPOSTからGETになるんですけど何でですかね? use App\Http\Requests\fivechRequest; class fivechContoroller extends Controller { public function write_ready() { return view('write_ready'); } public function write(fivechRequest $reqest) { return "helllo world!"; } } fivechRequest $reqest これ入れた途端にGETになってしまう Route::get('test/bbs.cgi', 'fivechContoroller@write_ready'); Route::post('test/bbs.cgi', 'fivechContoroller@write') ->middleware(fivechMiddleware::class); public function rules() { return [ //'bbs' => 'string|alpha|max:8|required', //'key' => 'integer|digits:10', //'subject' => 'string|max:64|required', //'from' => 'string|max:32', //'mail' => 'string|max:16', //'message' => 'string|max:4096|required' ]; } } に変更したらPOSTになりました… なんででしょうか? cronで実行しているPHPで不具合が出て調べているのですが、 php.iniでエラーログを指定していない場合、 コマンドラインからPHPを実行した時のエラーログってどこに出るのでしょうか? apacheで実行した場合はapacheのエラーログに出るようですが 質問させていただきます データベースにセッション保存するように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を取り込むってことかな? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる