[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2ch.scのread.cgiへ]
Update time : 02/23 23:57 / Filesize : 381 KB / Number-of Response : 998
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【PHP】下らねぇ質問はここに書き込みやがれ 14



1 名前:デフォルトの名無しさん [2022/09/20(火) 16:46:23.39 ID:Sb2Kpzh+0.net]
!extend::vvvvv:1000:512
!extend::vvvvv:1000:512
★スレ立て時 ↑ が3行以上になるようコピペ

PHPに関する質問スレです

前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 13
https://mevius.5ch.net/test/read.cgi/tech/1631147923/

次スレは>>980以降
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured

172 名前:デフォルトの名無しさん mailto:sage [2022/12/01(木) 21:58:45.19 ID:oIO2xTp30.net]
PHPモード書くとエラー吐くんだな、このサーバー

173 名前:デフォルトの名無しさん mailto:sage [2022/12/02(金) 17:29:48.09 ID:PlsoFJv80.net]
phpって数万行(一行10列程度)のCSV等を出力させるのってバッチ処理でもない限り無理だよね?

174 名前:デフォルトの名無しさん mailto:sage [2022/12/02(金) 17:33:19.36 ID:PlsoFJv80.net]
一応phpのタイムアウト無制限にしたりメモリ上限上げたりとかしてみたけど3万行くらいで落ちる
なんかいい方法あればだれか教えて〜

175 名前:デフォルトの名無しさん mailto:sage [2022/12/02(金) 17:50:40.60 ID:Gp+8HXJF0.net]
サーバにファイル作ってダウンロードさせる
他にはHTTPで圧縮かけるとか

176 名前:デフォルトの名無しさん mailto:sage [2022/12/02(金) 18:36:24.61 ID:xWddkTKj0.net]
>>173
しゅつりょくばっふぁりんぐしなければよゆう
それかめもりをたくさんつかえるようにする

177 名前:デフォルトの名無しさん mailto:sage [2022/12/02(金) 19:03:21.41 ID:gLaIiOiZ0.net]
>>173-174
俺はPHP詳しくないけど、まず何で落ちてるか正確に確認してるか?
タイムアウトは0、メモリは-1の指定で上限無しに出来ることになってるし、
落ちたらそう分かるメッセージが出るはずだが。
ちな、gc_collect_cycles()でGCも出来る。
https://www.php.net/manual/ja/features.gc.performance-considerations.php
ただ、吐き出すだけでメモリを食い尽くすのは余程プログラムの構造がおかしい限りありえない。
とりあえずmemory_get_peak_usageの値でも取ってみ?
https://www.php.net/manual/ja/function.memory-get-peak-usage.php
仮に5万行=50k行=1行100文字なら5MBだろ。メモリ上限はあり得ないと思うが。

これら以外で落ちてるのなら、その対策をしないと。
例えば、レンサバなら、長寿命のプロセスは自動的に切られる。
対策は、専用鯖にすること。

178 名前:デフォルトの名無しさん mailto:sage [2022/12/02(金) 19:05:57.07 ID:R6aGvMSq0.net]
CSV ファイルのサイズは、どれぐらい?

テキストファイルなら、zip/gzip などで圧縮できるかも

179 名前:デフォルトの名無しさん mailto:sage [2022/12/02(金) 21:35:42.65 ID:Ny0E8yV10.net]
数万行ぐらい余裕じゃないかなぁ
100万行ぐらいのダウンロードやインポートとか普通にやってたけど

180 名前:デフォルトの名無しさん mailto:sage [2022/12/02(金) 22:49:13.60 ID:V7r+YhBf0.net]
数万行のデータがどの位のサイズになるか分からないが
1GB程度のファイルダウンロード処理などメモリ-使わず出来る



181 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 01:33:06.32 ID:PlWN8Jgn0.net]
エクスポートファイルがSJISとかだった場合、5C問題ってどうしてんの?

182 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 01:33:54.05 ID:PlWN8Jgn0.net]
エクスポートしたCSVがSJISでPHPでインポートする場合か

183 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 23:02:03.15 ID:APQ0RP7C0.net]
事前にUTF-8に変換してから読み込めばいけそう

184 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 11:45:23.79 ID:1fkWXeae0.net]
同一ファイルへの連続書き込みについて
filewrite();
filewrite();
function filewrite() {
// 'w'の新規モードで同一ファイルへの書き込み
}
こういった感じで連続で書き込んだのですが
テキストファイルの出力結果が1回目が終わった末尾に次の書き込み
それも先頭部分ではない途中からの書き込みが重なってなされてるようでした。
関数は同期処理だと思うので途中で次に行ってるとも思えないですし
間にsleep(1);で1秒間を入れてみたのですが結果は変わらず、よくわからなくなりました。
PHPの設定はアップロードに反映まで時間間隔を入れないに設定しています。
それでも一回目の書き込みがまとめて反映されるまでやや間隔があって
2回目の反映と重なってしまってるのだろうか?と考えてもみました。
これはどうやれば1回ずつの書き込みはそのつど締められて正常に連続書き込みできるようになるのでしょうか?
PHPで同一ファイルに連続して書き込む際の注意点とかありますか?

185 名前:デフォルトの名無しさん (ワッチョイ 91da-7kHv) mailto:sage [2022/12/07(水) 12:46:25.55 ID:/vDZIDbT0.net]
>>184
プログラムに問題が無いなら、プログラム以外に問題があんだろ
他のプロセスがいるとかな

sleep(30)とか入れて、初回書き込みのあと5秒おきに
テキストの内容および更新時刻を観察するといいよ

186 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 15:19:37.18 ID:w780kgYS0.net]
fclose()する前にfsync()でもしておけば同期はされるのでは?

187 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 15:31:04.93 ID:1fkWXeae0.net]
flock($fp,LOCK_SH); flock($fp,LOCK_UN); fflush($fp);
これらは付けてみました、しかしプログラムの方の問題だったようです
strcmp()===0の3つイコールの徹底化や改行コードの統一で正常に動くようになりました

188 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 10:49:14.78 ID:yEj7mUL70.net]
PHPUnitってデバッグしながら実行できます?

189 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 11:16:07.17 ID:FA1I/9HE0.net]
できますん

190 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 19:56:18.82 ID:O25d6TKs0.net]
xammpの環境ではexecが動くけど素のphp+apacheで動かないのって
やっぱhttpd.confかphp.iniの設定の違いかな?

phpからexecで自作のプログラム(音源出力、キー有力受付)を呼びたいんだけど、
xammpの環境からは正常に動作するんだけど、apache2.4+php7.4の環境だと
音源出力は動くけどキー入力が受け付けない。

タスクマネージャー上には存在するから呼び出しはされてるけどキー入力を受け付けて
無いみたいなんだよね。

なんか設定で怪しい項目ある?

safe_modeは一応offにしてある。



191 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 20:03:31.21 ID:9104bOlZ0.net]
何故キー入力が必要になるのか理解できないです

192 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 20:15:01.79 ID:O25d6TKs0.net]
>>191
装置の中にサーバーが組み込まれていてそこにデバイスが
接続されている状態なんだ。

そこでユーザーのレスポンスを受けたい感じ

193 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 20:17:19.07 ID:O25d6TKs0.net]
ちなwin10環境ね

194 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 20:58:43.48 ID:wvTxK2BR0.net]
ん?
言っている事が分からんw
サーバー側もwindowsでそこでPHPからexeを動かす(コンソールアプリ?)
その動かしたexeでキー入力?
何の意味があるんだ・・・
もっと分かるように説明してくれ

195 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 21:23:04.49 ID:O25d6TKs0.net]
装置A(apache,php)にデバイス(キーボードとか)が繋がっている状態。

でユーザーは装置Aから音声ガイダンスが流れるからそれに従って
キー入力を行って、装置Aでどのキーが入力されたのかって
情報が欲しい。

でPHPからexceで自作のexe(C++で作成したもの)を呼び出して装置A上で
音声の再生、キー入力を受けつけたい。装置Aには画面が無い状態ね。
まぁ、普通にCSで作れってのはおいておいてw

何で装置にWebサーバーが入っているのかはhttp通信で外部からその
装置を制御したいから。

例えば俺のマシンから装置Aに対して、音声出してってPOSTすると
装置Aが音声を出すって感じ

196 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 21:31:46.95 ID:O25d6TKs0.net]
apache上で動いているPHPにそのマシンからのキー入力情報が
受け取れるなら別にexecで外部プログラムを呼ばなくてもいいけど、
他に方法があるなら教えてくれ。
Node.jsでjavascriptで受け取るってのはだめだったら試す。

197 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 21:39:10.00 ID:O25d6TKs0.net]
サーバー上で標準入力を受け取りたいんだけど
エンターボタンは無いからC++で書いてる。

198 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 21:56:41.92 ID:yrpHKjJA0.net]
xamppでは動いたんだよね?
だったらxamppでやけば良い気がするけど...

いくつか制限できる方法はあるのですぐ出てきたやつ貼っとく
https://www.php.net/manual/ja/ini.core.php#ini.disable-functions

レンサバなんかだと制限があったりするけど、デフォルトでは特に制限なかったと思うけどなぁ

199 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 22:02:56.68 ID:O25d6TKs0.net]
>>198
ありがと。php.iniはほぼデフォで使ってるから
その辺の設定は特に入れてないはずなんだよな・・・・

タスクマネージャみてるとxampp controllから呼ばれている場合は
動いてるんだよな・・・

2つのexeのうち1つは普通に動いているから権限でもなさそうだし・・・

200 名前:デフォルトの名無しさん mailto:sage [2022/12/09(金) 00:28:47.75 ID:TadN+Pts0.net]
apacheがwindowsサービスで動いてるなら仕様じゃね?



201 名前:デフォルトの名無しさん mailto:sage [2022/12/09(金) 20:34:02.72 ID:jNmVPDHZ0.net]
文字列は "abc" 囲いでも 'abc' 囲いでもどちらでもいいようになってますが
皆さんはどちらを標準にして囲ってますか?
あるいはこういうケースの時はこっちを使うというような例などがあったら聞かせてください

202 名前:デフォルトの名無しさん mailto:sage [2022/12/09(金) 23:16:21.56 ID:UyKdfg3p0.net]
普段はシングルクォーテーション
変数展開とかするならダブルクォーテーションだな

203 名前:デフォルトの名無しさん mailto:sage [2022/12/09(金) 23:21:07.50 ID:WbcD0Rxq0.net]
Cから来たので基本はダブルクォーテーションかな
シングルは 文字列中にダブルクォートが多いときか
オプションみたいな1文字ですって強調したいときに使う

204 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 12:45:51.50 ID:y3cK8mxB0.net]
みんなでどっちに揃えましょうとかどっちが多数ですというようなものはないんですかね

205 名前:デフォルトの名無しさん mailto:sega [2022/12/10(土) 17:00:52.24 ID:wlUDu/T/0.net]
どっちにそろえようとかは特にないし
PSR-12なんかでも規定はないね

というか、一貫性が何より大切だから
どっち使ってもいいけど必ず統一しろ
と書いてある

206 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 17:28:10.93 ID:8BH9hZYzF.net]
テンプレートリテラル使うからダブルクォーテーションが多め
Viewとコントローラ一緒のファイルで記述する時はPHP側は基本シングルクォーテーションにしてる

207 名前:デフォルトの名無しさん (ワッチョイ 675f-TX1J) mailto:sage [2022/12/14(水) 10:36:26.00 ID:clTPPvgu0.net]
どなたかfuelphpという産廃使ってる方いませんかー!
テスト導入に苦戦してまして…

208 名前:デフォルトの名無しさん mailto:sage [2022/12/14(水) 17:12:07.16 ID:EUJoHYXL0.net]
>>207
産廃はお前だよ

209 名前:デフォルトの名無しさん mailto:sage [2022/12/14(水) 18:44:26.38 ID:1dR4tl0p0.net]
>>207
FuelPHPなら使っているが、産廃などと言うやつには一切の手助けはしない。

210 名前:デフォルトの名無しさん mailto:sage [2022/12/14(水) 19:11:09.38 ID:erx97Ujd0.net]
文字列としてSQL扱うときは、外側は " にしてた



211 名前:デフォルトの名無しさん mailto:sage [2022/12/15(木) 11:47:59.66 ID:LeGrOdjQ0.net]
>>208
もう更新されてないフレームワークだろ?ググればオワコンってすぐ出てくるし

>>209
あっそ

212 名前:デフォルトの名無しさん mailto:sage [2022/12/15(木) 22:44:28.75 ID:2voHnGHc0.net]
上手くいったら報告して

213 名前:デフォルトの名無しさん mailto:sage [2022/12/15(木) 22:54:29.04 ID:lBgSxiuh0.net]
fuelphp.jp/docs/1.6/general/unit_testing.html
これ参考にならんの?

214 名前:デフォルトの名無しさん mailto:sage [2022/12/15(木) 23:22:29.62 ID:2B516vAy0.net]
10年前のフレームワークかぁ

215 名前:デフォルトの名無しさん mailto:sage [2022/12/15(木) 23:49:29.88 ID:2voHnGHc0.net]
歴戦の勇士なら使える

216 名前:デフォルトの名無しさん mailto:sage [2022/12/15(木) 23:59:56.21 ID:WOnFczjv0.net]
まともな情報量をもった質問もできない産廃をかまってやるなんてお前ら優しいな

217 名前:デフォルトの名無しさん mailto:sage [2022/12/16(金) 18:02:33.05 ID:sLgaZEhZ0.net]
>>216
産廃をありがたがって使ってるお前が異端なんだよ

218 名前:デフォルトの名無しさん mailto:sage [2022/12/16(金) 18:04:56.98 ID:sLgaZEhZ0.net]
>>213
モックのライブラリ入れるとcomposerさんがちゃんと更新してくれなくてな…記事も少なくてクソだわ

219 名前:デフォルトの名無しさん mailto:sage [2022/12/16(金) 18:25:02.16 ID:s8p4pdj90.net]
将来的な事を考えたら多少コストがかかろうがLaravelなどに書き換えた方が良さそうだけどねぇ
多分そんなに予算も無く、修正や機能追加に金は出せないみたいな所から受けていたら悲惨としか・・・

220 名前:デフォルトの名無しさん (ワッチョイ 675f-TX1J) mailto:sage [2022/12/16(金) 18:52:17.38 ID:sLgaZEhZ0.net]
>>219
まさしくそれ…
好き好んで使ってるやつの気がしれん



221 名前:デフォルトの名無しさん mailto:sage [2022/12/16(金) 20:43:17.62 ID:kkMqd6VL0.net]
上司「オーバーヘッドと速度低下おきるからフレームワークは禁止。クラスとMVCは自分で定義してわかりやすくしろ、見本は無い」

222 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 10:51:57.18 ID:kvss8RMi0.net]
まずその上司のリファクタリングが必要

223 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 11:02:16.79 ID:QDDpMmFH0.net]
ネコの会社

224 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 17:05:55.72 ID:PuWdgN410.net]
>>222
リファクタリングって動きは変えないから何も変わらんのでは?

225 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 17:11:12.27 ID:on9KAdJq0.net]
テストしやすくなるんでしょ
重要w

226 名前:デフォルトの名無しさん mailto:sage [2022/12/18(日) 22:34:02.51 ID:Sye5af7x0.net]
下らねえ質問はここに書き込みやがれ

227 名前:デフォルトの名無しさん mailto:sage [2022/12/18(日) 23:07:20.33 ID:HXc3HAGH0.net]
file_gets_contentってマジカル変数みたいなの使わないとうまく行かないことがあるけど何か違いあるのかな?
同じフォルダ階層にいるjsonの内容読み取るだけだから必要無さそうな気がするんだが

228 名前:デフォルトの名無しさん [2022/12/19(月) 08:00:13.41 ID:GcFpX62a0.net]
assert()など、デバッグ用のコードって本実装のとき残しているものなのですか?
それとも削除するものなのですか?

229 名前:デフォルトの名無しさん [2022/12/19(月) 09:48:24.14 ID:aVzxjlfF0.net]
>>227
マジカル変数ってなに?
バナナと言ったら黄色?

230 名前:デフォルトの名無しさん mailto:sage [2022/12/19(月) 10:51:17.06 ID:+PhZX49Z0.net]
>>229
マジック定数って言うのか!恥ずかしい!!



231 名前:デフォルトの名無しさん mailto:sage [2022/12/19(月) 11:00:09.40 ID:aVzxjlfF0.net]
>>230
それでもまだ意味がわからないんだけど、第二引数のことを言ってる?

つまり、それは、同じディレクトリを探索させたいのに
インクルードパスの探索を指定(true)していて、かつ
インクルードパスにカレントを指定してないって感じか

そう、君のバグです

232 名前:デフォルトの名無しさん mailto:sage [2022/12/19(月) 11:20:29.71 ID:+PhZX49Z0.net]
>>231
第2引数には何も指定してない
同じディレクトリにあるJSONに対して
file_get_contents('hoge.json');
ってやったら戻り値がfalseだった

233 名前:デフォルトの名無しさん mailto:sage [2022/12/19(月) 11:30:22.81 ID:kpBvGP850.net]
多分コレのことだろう
https://bashalog.c-brains.jp/14/07/11-100000.php

だから、絶対パスでの指定が推奨されてて、そのために__DIR__が大活躍する

234 名前:デフォルトの名無しさん mailto:sage [2022/12/19(月) 16:21:21.04 ID:A864IMiY0.net]
>>228
建前としてはDEBUGフラグが立ってる時だけ機能するように作るんだけど
実際は本番実行でも残すよ

235 名前:デフォルトの名無しさん mailto:sage [2022/12/19(月) 20:04:25.66 ID:qVdptYk+0.net]
postの判別を検索したら、php入門なるサイトで
if($_SERVER["REQUEST_METHOD"] = "POST"){
というのがあったので、やってみてもダメだったのが

if($_SERVER["REQUEST_METHOD"] == "POST"){
ならokだったのですが、

php4やphp5の頃は問題が無かったのか、そもそもサイトの情報が間違いなのかどっちなのでしょうか?

236 名前:デフォルトの名無しさん mailto:sage [2022/12/19(月) 20:41:16.39 ID:GWLkdDwg0.net]
そりゃ=は代入だからダメだろw

237 名前:デフォルトの名無しさん (ワッチョイ ea97-ZR1D) [2022/12/20(火) 09:14:27.19 ID:B/jnFsL10.net]
>>234
ありがとうございます。あと一点質問させてください。
debugならassert()系のメソッド?関数?で事足りるとおもうのですが、
わざわざphpUnitなるライブラリを使う方法もあるそうです。
phpUnitを使うことのメリットがよくわかりません。
どんなことで利点があるかお分かりになれば教えてください。

238 名前:デフォルトの名無しさん mailto:sage [2022/12/20(火) 10:07:52.67 ID:QTfYNwyf0.net]
>>237
多分根本的に間違って理解してると思う
https://speakerdeck.com/twada/php-conference-2016?slide=68
リンクした章を読んでみるとassertの使い方が分かるんじゃないかなぁ

239 名前:デフォルトの名無しさん (ワッチョイ aa7c-e5AJ) mailto:sage [2022/12/20(火) 12:46:29.70 ID:cyGUI4Ab0.net]
デバッグを効率的にやりたいだけの話なら
xdebug入れてブレークポイントなどを使う方が良いんじゃない?

240 名前:デフォルトの名無しさん mailto:sage [2022/12/20(火) 14:33:30.45 ID:F+OZA9Ef0.net]
全部デバッグレベルのログで出力してるわ
printfデバッグの上位互換です
本番はログレベル下げるだけだし



241 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 08:18:35.97 ID:YjenC8+L0.net]
bashからphpも始めた身ですが、
変数を ${hogehoge} の波括弧でも動作しますが、{$hogehoge}のほうがいいですか?

242 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 08:33:33.01 ID:8c2A2dic0.net]
>>241
バージョンによる
以下、8.2以降に関して

https://www.php.net/manual/ja/migration82.deprecated.php

> "${var}" と "${expr}" 形式の文字列への値の埋め込みは、推奨されなくなりました。 "$var"/"{$var}" や "{${expr}}" 形式をそれぞれ使ってください。

243 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 08:44:53.24 ID:YjenC8+L0.net]
>>242
php7.4から始めていますが、警告されているのですね
危なかったです・・そのまま使い続けるところでした

244 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 08:49:53.76 ID:8c2A2dic0.net]
>>243
教本等での指定がなければ、8.1以降で学習するほうが良いです

https://www.php.net/supported-versions.php

7.4はすでにサポート対象外であり、8.0もアクティブサポートは終わっています
8.0以降で大きく変わった箇所もあるので、教本もできれば8.0以降のものを選ぶのが良いです

245 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 10:30:36.23 ID:YjenC8+L0.net]
>>244
ありがとうございます、最新を選ぶのにこしたことは無いのですね。
使わない新機能がたくさんありそうなので初学者には7.4でも同じだと思っていました。

246 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 13:14:09.74 ID:9taBvybYa.net]
vendor配下はpushしない人多いと思いますが、例えば10年後にディスク障害で再インストールが必要になった場合に、composer install でちゃんと元通りになるもんなんでしょうか?
古いバージョンのライブラリなどはアーカイブされててinstallがコケそうな気がするんですが。
ちゃんとバックアップとっておいてそこから戻せって話ですかね?

247 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 13:21:51.28 ID:/E6J1+u80.net]
まず10年後までアップデートしないで使うのがNGかと
そもそもphpが全然変わってるはず

248 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 15:04:43.24 ID:56qYJgfP0.net]
約10年前のLaravel 4もまだリポジトリにあるし
10年くらいじゃ旧バージョンも含めて管理下にあると思ってよいと思う
バージョンが古すぎてcomposer updateが通らなくなることはあっても
composer installは通るんじゃないかな

249 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 15:25:46.38 ID:6zrBELjK0.net]
ところがどっこい通りません

250 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 15:53:40.61 ID:RVhrOqwEa.net]
vendor配下をプッシュしないのは、composer install で復元出来ることと、容量の無駄遣いってことだと思ってましたがデメリットが容量の問題だけならプッシュしておいた方が何も考えなくて良い感じですかね?



251 名前:デフォルトの名無しさん [2022/12/28(水) 18:11:15.40 ID:iMra0KKw0.net]
配列の要素数だけを繰り返したいのですが。
これまでforeach文を利用していました。
ですが、その配列の要素を参照するだけでなく、
同じ要素数の別の配列を参照したりしています。
ちょっとforeachではないような気がします。

例えば、以下のような要素数を合わせた配列を
要素番号に沿って同時に処理します。

$color_arr
$body_arr
$subcomment_arry

配列の要素数だけを繰り返す。
という意味でもっとも適した繰り返し文は
何でしょうか?

252 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 18:16:59.77 ID:uPVj0Dve0.net]
ちょっと何言ってるかわからない
もう少し具体的なコードなりデータなりで質問すると回答があるかも

あと、配列操作に関しては php は充実しすぎてるんで、以下のリンクも参考に見てみるといい
https://www.php.net/manual/ja/ref.array.php

253 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 20:12:34.76 ID:kuotjsyy0.net]
>>251
foreachだよ。
それは構造がおかしい。
セットで使うものなら、 ["color"=>xxx, "body"=>yyy, "subcomment"=>zzz] として最初から纏めておく。

254 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 00:02:29.48 ID:CeHhEiXD0.net]
参照に使った変数をunsetし忘れると
マジで意味不明な挙動するよね
あれどうにかなんねーのかな

255 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 00:26:52.03 ID:Au5DjajA0.net]
>>254
php.netのforeachに警告として載っているケースなら、変だし糞だけど意味不明ではないね。
https://www.php.net/manual/ja/control-structures.foreach.php
foreachでスコープを作らず、変数宣言もない(=最初の使用が宣言扱い)言語なら、こうなる。
正しい解はforeachでスコープを作り、外側の変数を見えるようにすることで、CやJSやその他言語は勿論そうなってる。
言語としてのPHPは相変わらずぶっちぎりで糞なだけだね。

256 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 01:12:32.11 ID:ptlutJts0.net]
そんなにforeachで参照してる配列自体の要素を変更する?
読みづらくなるからワイはしないようにしてるけど

257 名前:256 [2022/12/29(木) 02:15:09.37 ID:KIQEFzci0.net]
色々とアドバイスありがとうございます。

用途としては、次のようにselectクエリの結果セットを1行づつ$rowに格納して
カラムの値をそれぞれ配列に格納しています。
配列の一つである$ImageId_arrをforeach()で利用して、配列分の値をecho
させています。

本来のforeachの使い方ではなくて、気持ち悪いと思います。

while ($row = $result->fetch_assoc()) {
$ImageId_arr[] = $row["image_id"];
$color_arr[] = $row["color"];
$body_arr[] = $row["body"];
$subcommnet_arr[] = $row["subcomment"];
}


foreach($ImageId_array as $key){
echo "<p>".$ImageId_arr[$i]."</p>";
echo "<p>".$color_arr[$i] ."</p>";
echo "<p>".$body_arr[$i]."</p>";
echo "<p>".$subcommnet_arr[$i]."</p>";
$i++;
}

258 名前:デフォルトの名無しさん [2022/12/29(木) 02:17:19.06 ID:KIQEFzci0.net]
×
foreach($ImageId_array as $key){


foreach($ImageId_arr as $key){

259 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 04:56:37.27 ID:L5ICo1eU0.net]
それなら foreach() でよさげ

$rows = $result->fetch_assoc());
foreach($rows as $row){
echo "<p>".$row["image_id"]."</p>";


}

260 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 05:46:19.92 ID:KLxb2KfBa.net]
>>246
Ruby on Rails ではプロは、全てのモジュールを1週間毎に更新する。
もし更新しなかったら、セキュリティーホールから侵入されて、データを抜かれる

例えば、そのサイトのJava のTomcat から、パスワードが抜かれましたとか、
ブラウザから通知が来る

それで、そのサイトがモジュールを更新していない事が分かる



261 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 05:46:19.99 ID:KLxb2KfBa.net]
>>246
Ruby on Rails ではプロは、全てのモジュールを1週間毎に更新する。
もし更新しなかったら、セキュリティーホールから侵入されて、データを抜かれる

例えば、そのサイトのJava のTomcat から、パスワードが抜かれましたとか、
ブラウザから通知が来る

それで、そのサイトがモジュールを更新していない事が分かる

262 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 07:40:46.65 ID:KLxb2KfBa.net]
Ruby のERB では、<%= 〜 %> で出力される。<% 〜 %> で出力されない。
〜には、Rubyのコード片。
"<p>".$ImageId_arr[$i]."</p>" みたいに、文字列を連結しない

require 'erb'
include ERB::Util

# ERB では、html escape するのに、ERB::Util.h メソッドが必要

html =<<HTML
<% rows.each do |row| %>
<p>aは、<%=h row["a"] %></p>
<p>bは、<%=h row["b"] %></p>
<% end %>
HTML

rows = [ { "a" => "a1", "b" => 1 }, { "a" => "<a2>", "b" => 2 } ]
puts ERB.new( html, nil, "<>" ).result( binding )

出力
<p>aは、a1</p>
<p>bは、1</p>

<p>aは、<a2></p>
<p>bは、2</p>

< が< に、> が> に、エスケープされる

263 名前:267 mailto:sage [2022/12/29(木) 07:45:09.94 ID:KLxb2KfBa.net]
出力
<p>aは、a1</p>
<p>bは、1</p>

<p>aは、& lt;a2& gt;</p>
<p>bは、2</p>

< が& lt; に、> が& gt; に、エスケープされる

便宜上、& の後ろに、空白を入れておく

264 名前:デフォルトの名無しさん (ワッチョイ e17b-xQ0t) mailto:sage [2022/12/29(木) 08:29:06.21 ID:Au5DjajA0.net]
>>256
しないね。
だから昨今の関数型や再代入禁止とかの"正しい"プログラミング流儀に則ってれば、大して問題にならない。
とはいえPHPでは主力ループがforeachだし、
この仕様変更で動かなくなるプログラムが大量にあるとも思えないし、さっさと修正すべきだね。
まあそれ以前の比較や三項演算子を修正してる段階だから、あと10年くらいかかるか?

どうでもいいが珍しくPHP.netの糞な所を見つけた。
最近のこの手のサイトはURLの#xxxで該当部分にすぐ飛べるように<a>を散りばめているが、PHP.netはやってない。
だから260にも記事ページを頭から全部読め、のURLしか貼れなかった。
各ページを頭から全部読んでも問題ない量に抑えるアナログ的解決も素晴らしいが、<a>はやっておくべきだね。
contributeしたいぞと思ってる人はどうぞ。

265 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 08:56:07.28 ID:Au5DjajA0.net]
>>257
それを気持ち悪いと感じるのは、君が連想配列やジャグ配列に慣れてないだけだよ。
むしろ普通は、元々一体だった$rowをわざわざバラし、
再度くっつけ直すときにforeachガーとか言ってるそのコードが気持ち悪い。
明らかにやらなくて済むことをやってて文句言ってるだけだし、意味無いだろ。

266 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 12:34:23.96 ID:KIQEFzci0.net]
>>259
ありがとうございます。以下のコードですが、

$rows = $result->fetch_assoc();
これだと1レコードのカラムだけをrowsに格納することになります。

それで、
$rows = $result->fetch_all();
にしてみると、全てのレコードを取得できるのですが、
カラムがそのまま連想配列のキーとなりません。

全てのレコードのカラムを連想配列として取得するには
どう記述すればよろしいでしょうか?

267 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 12:44:04.70 ID:aUIDokF60.net]
マニュアル読んだ方が早いよ

268 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 12:55:39.42 ID:b2cknnYm0.net]
>>266
$rows = $result->fetch_all(MYSQLI_ASSOC);

269 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 13:08:54.14 ID:PNv6ubt+d.net]
>>257
264と270の言う通り、二次元配列の理解が足りないんだと思う
二次元配列で扱うようにすれば上手くいくよ

$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}

foreach($rows as $row){
echo "<p>".$row["image_id"]."</p>";
echo "<p>".$row["body"]."</p>";
echo "<p>".$row["body"]."</p>";
echo "<p>".$row["subcomment"]."</p>";
}

270 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 13:58:39.47 ID:qAF+l3pr0.net]
>>255
そうそれ
PHP10あたりで変数宣言できるようになんねーかな
そうすればスコープとか効いてくるしバグも減るよな



271 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 14:24:41.49 ID:Au5DjajA0.net]
>>269
× 二次元配列
○ ジャグ配列(配列の中の配列)

な。PHPでは(というよりもほぼ全部の言語では)多次元配列はジャグ配列で構成するので、
ほぼ区別する必要はないが、逆に言えば、ここで引っかかってる時点で256はPHP出身ではない。
今時、連想配列を使えない言語なんてCくらいしかないので、おそらく256はC(かその程度の原始的な言語)出身。
だから添字は数字のみ、と考えてああいうコードになってる。
Cにはforeachも無いので、使い方にも悩むことになる。
で、Cの場合は多次元配列はジャグ配列以外でも実装出来る
(というよりCで多次元配列と言うとジャグ配列じゃない物を指す)ので、
256に対してその言い方だと誤解を招くかもしれないので、
この辺まで見えてたら非PHP用語使ってあげて。

272 名前:デフォルトの名無しさん (ワッチョイ e17b-xQ0t) mailto:sage [2022/12/29(木) 14:57:10.69 ID:Au5DjajA0.net]
>>270
結局のところ、スクリプト言語=お手軽に使える言語=大きいのを作るのには無理がある、ってだけだな。
JSはまだマシだが、PHPではかなり無理がある。

変数宣言は、ワンライナーをやる場合は壮絶にウザイが、PHPではこの点は問題ない。
ただ、過去のコードが使えなくなるのは大問題なので、現実的にはTSのようにビルド時の対応しか出来ないだろう。

個人的には、Array. String周りの関数の引数の順や名前や挙動とかマトモに整理してくれよ、と思う。
PHPが主力言語な連中なら全部覚えればいいのだろうが、そうではないので、一々毎回引き直して引っかかって不快感半端ない。
(じゃあLaravel使えではあるが、実際わざわざ導入するほどそれらの関数を使いまくることもないので中途半端で困る)
逆に、スコープ周りとかはポンコツではあるが一貫性はあるので、それほどストレスは感じない。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<381KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef