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

レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん (ワッチョイ cfe8-+65u)
垢版 |
2018/11/28(水) 17:08:46.02ID:Nb5yTkdM0
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
2020/03/22(日) 22:54:04.30ID:D4yHaglA0
相乗りで質問させてください。

>>867 のリンク先に書いてあるような設定を済ませて、chromeでは〇〇〇.localhostといった
URLで開けるようになったのですが、それ以外のブラウザではエラーが出てしまい開けません。
改善方法はありますでしょうか?

PHPと関係ないかもしれませんが、該当スレも見当たらず…
どうかご回答よろしくお願いいたします。
2020/03/22(日) 23:06:53.02ID:UY6UlDJY0
マルチな上に回答付いてる
https://mao.5ch.net/test/read.cgi/mysv/1529369008/296-298
2020/03/22(日) 23:51:04.35ID:z2MML3bn0
virtualhostでもいいけどめんどいしalias追加でいいんじゃねえの
2020/03/23(月) 07:16:27.59ID:jGS2rL5b0
Windows 10, WSL, Ubuntu 18.04 で、Ruby なら、Linux 側で、
1-liner で、Rubyで作られた遅いウェブサーバー、WEBrick が起動する

ruby -run -e httpd . -p 8080

そのフォルダに、index.html があれば、
Windows側から、これでブラウザでアクセスできる

http://localhost:8080

Linux側も、C ドライブ内にあるからかな?

アクセスするサーバーが、どのドライブのどのフォルダ内を、
カレントディレクトリとして起動したか
2020/03/23(月) 21:22:44.81ID:w/tA8drNM
2ch風の掲示板を作ってます。
datファイルで一行に名前・メール・メッセージと管理用のIDやらを
記述するやり方で、レスアンカーやurlをループ処理の中で出力時に
aタグで囲む方法が思い付きません。

正規表現でメッセージから有無の判定はできましたが、そこから先で詰まってます。
ヒントをください。
2020/03/23(月) 21:47:23.30ID:QTEdjjlGM
>>872
その正規表現を貼ってごらんよ。
それ使えばできるはず。
2020/03/23(月) 22:01:36.98ID:4wQQ+VSn0
後方参照がわからんのだろうな
matchじゃなくてreplaceでおk
正規表現でマッチした()の中身を置き換えのとこで$n or \\nで参照できる
例えばこんなん
https://ideone.com/lJv04e
2020/03/24(火) 02:26:45.30ID:84LIBSDP0
>>874
ありがとうございます。
早速試してみます。
何かできそうな気がしてきました!
2020/03/25(水) 23:42:46.36ID:YJCiq0GG0
>>874
下記記述で行けました。
本当にありがとうございました(涙)
preg_replace('/&gt;&gt;([0-9]{1,3})/', '<a href="#$1">>>$1</a>', $message);

ちなみにセキュリティに対して理解が浅すぎるのですが、渡ってくる文字列に対して警戒していればおkで
置換でa要素を使ったり、HTMLエンティティ対象の文字列をそのまま書いても大丈夫なのでしょうか?
2020/03/26(木) 08:37:27.85ID:uQPl4pkP0
5chはテキストログで1レス1行が都合が良さそうなのと区切り文字が必要になるので
そのへんの改行(<br>)と区切り(<>)考慮するとエスケープ済みのほうが扱いやすい
ただ欠点としてはログサイズが肥大する
もちろん必要最小限のエスケープでもできるけどめんどくさいので完全再現じゃないが

ログ保存時
$message = preg_replace('/\r?\n/', '<br>', htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8'));

出力時
$message = preg_replace(['/&gt;&gt;([0-9]{1,3})/', '%(https?://[^\s&]+)%'], ['<a href="#$1">&gt;&gt;$1</a>', '<a href="$1">$1</a>'], $message);

とかなんじゃないかなと
リンクつける仕様上一旦エスケープしたのを戻す箇所があるので
そこでXSSを成立させないよう注意してコーディングする必要がある
エスケープ済みの文字は&lt;や&quot;のように&がつくので
[^\s&]のとこのように&でぶったぎるのが簡単
ちなみにurlの複数パラメータでも使われる&の扱いは面倒なので適当だけど
>>835のように&でリンク切れてるの見る限り5chも適当なのでおkってことで
2020/03/26(木) 22:20:23.54ID:pJp2pNNg0
>>877
詳しくありがとうございます。
5chのログの内容は最初にチェックしてたはずなのに、すっかり忘れてました。
再度確認したところ、エスケープ処理済みな上にタグまで付いてました…

てっきり出力前にエスケープするのがPHPのルールだと思ってたのですが、
まさか事前にエスケープしておくとは…

出力時のpreg_replaceも配列にすれば一回で済むのですね…
レスアンカーとリンクで分けてました

>>835のリンクについては、専ブラで見てたので気づきませんでした。
直リン避けも考慮してhttps://まで見て、後は半角英数なら置換対象に
してしまおう!…って感じで雑に考えてました。
preg_replace('/(h?ttps?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:@&=+$,%#]+)/', '<a href="$1">$1</a>', $replaceMessage);

凄く参考になりました。
どうもです。
2020/03/29(日) 10:25:07.65ID:wUzzaaBN0
文字列と多次元配列の値に対して一括で処理できるメソッドで質問です。

下記メソッドで$hogeに多次元配列が渡ってきたと仮定しまして、
値が配列であれば再起処理でメソッドが再度呼び出されるそうです。

私の考えでは、再起処理で多次元配列の中の値が配列ではなかったときは、
Aの文字列の方に流れるのではと思っていたのですが、実際は@に流れるようです。

多次元配列の中の文字列にis_array()を掛けてもfalseなのですが、どういった理由で
@に流れるのでしょうか?

function test($hoge) {
 // 配列の場合
 if (is_array($hoge)) {
  foreach ($hoge as $key => $value) {
   // 再起処理
   if (is_array($value)) {
    test($value);
   }
   // @配列の中の値が配列でない場合
   else {
    ...
   }
  }
  return;
 }
 // A文字列の場合
 return;
}
2020/03/29(日) 12:47:17.78ID:XdbgZgVO0
@は再帰呼び出しで、Aは再帰の終了条件だね。
配列の中に配列があったときは@が呼ばれるようになってる。
再帰を一度じっくり勉強したほうがいいよ。誤字も含めて。
2020/03/29(日) 14:07:51.77ID:wUzzaaBN0
>>880
誤字失礼しました。

どうにも理解できなくて、再度質問しようと文字に起こしていたところ自己解決できました。
Aは文字列専用の終了条件で@は配列専用の終了条件だったようです。

再帰処理の際に値が文字列なのに、何で配列判定で true が出るのだろう?
というところが疑問だったのですが、
本来であれば配列の中の配列である [] で再帰処理されるところを、その中の値Bで
再帰処理されていると勘違いしておりました。

ご迷惑おかけしました。

$hoge = [
 'piyo1',
 'piyo2',
 [
  // B
  'piyo3'
 ]
];
2020/03/29(日) 15:05:54.62ID:r8VR5IyJ0
書き方としては終了条件を早期returnして終了するべき(そうじゃないとひどく読みにくい)

一般化するなら

function apply_recursively($target, callable $callback) {
if (!is_array($target)) {
return $callback($target);
}

return array_map(function ($target) use ($callback) { return apply_recursively($target, $callback); }, $target);
// return array_map(fn($target) => apply_recursively($target, $callback), $target); // -> for PHP >= 7.4.0
}
2020/03/29(日) 19:30:19.50ID:KCykJRwi0
>>879
foreach 直後の if は不要で無条件に test($value) を行い、
Aは else にして @ に書いてた処理を書き、
関数の引数は function hoge(&$value) で参照で受けとるようにし、
foreach も foreach($hoge as &$value) にする。
こうしないと動かなくない?
2020/03/29(日) 19:31:44.20ID:KCykJRwi0
>>883
ごめんまちがい
function のくだりは function test(&$hoge) ね。
2020/04/11(土) 19:45:53.72ID:9fxAF0s30
phpのechoを使ってルートフォルダからの絶対パスを指定して
ナビ部分のリンク変更をサイト全体に一括で行えるような書き方を教えてください

3年くらい前にやってたんですが
やり方がわからなくなってしまいました
2020/04/12(日) 01:01:57.54ID:9sN7iYc+0
>>885
echoにそんな機能ないし、何が聞きたいのか伝わらないと思う。

find(grep)+sedのような、ファイルの中身に特定の文字列があれば、
それを一括で書き換えるようなことをしたいわけでもなさそうだし、
何かナビ用のリンクのリストをincludeしてるなら、
そのリストの中身を書き換えろで終わる話だけど、そんな簡単な話でもなさそうだし。
2020/04/12(日) 07:18:43.42ID:xGytKmNW0
細かく言いますと
一時期Web製作会社でコーディング業務をしており
html/cssは扱えるのですがphpはヘッダー、ナビ、フッターなど共通部分をincludeフォルダで共通化できる程度しか扱えませんでした

そして自社のドメインのサブドメインでテスト環境を作り、そこでHPを作成して客先の本番サーバにアップロードという工程で納品、保守管理をしていました

その場合、リンク先を絶対パスで書けないので相対パスにする訳ですが
phpで常にルートフォルダを取得して書き出し、それに続けて下層のリンク先を明記するようにしていたんですが
そのやり方を忘れてしまったので教えて欲しいのです
2020/04/12(日) 08:39:06.07ID:3vwO7tAb0
それだけ具体的に説明できるんならググった方が早いぞw
2020/04/12(日) 11:56:55.73ID:+wetVu4e0
2ch風の掲示板を作っており、考え方についてアドバイスをいただきたいです。

ログファイルでレスを記録して、1レス1行で構成されています。
ajaxを用いて遷移なしでの投稿反映と、レスアンカーにホバーすると、該当のレスを引っ張ってくる
ようになっています。

このレスアンカーへのホバーを行うと、当たり前なのかもしれませんが、添付の画像のように
どんどん_ajax.phpのファイルへのアクセス?が増えていってしまい、投稿ならまだしも、
ホバーするだけでPOSTを行うなんて、無駄な処理をさせているのではないか?
と考え出しております。

ログファイルは数百kb程度なので、投稿内容の全てをJS側で配列で保持をしていく方が
無難だったりしますでしょうか?

ttps://f.easyuploader.app/eu-prd/upload/20200412115052_69364c5954346f304857.png
2020/04/12(日) 13:52:29.72ID:tx1YNXXn0
>>889
目的次第

少なくとも表示中のレス(=クライアントで保持してるレス)に対するアンカーへのホバーでサーバーにアクセスさせるのは無駄
2020/04/12(日) 14:07:51.14ID:+wetVu4e0
>>890
ありがとうございます。

やはり無駄でしたか。
おいおい100レスずつ表示とかする予定ですので、表示されているレスと
表示されていないレスとで分岐させてみます。
892デフォルトの名無しさん (ワッチョイ 6ff1-Xgk8)
垢版 |
2020/04/12(日) 14:43:40.33ID:1ZMEMPeI0
->
=>

この使い分けをよく忘れるのですが
覚えておくコツはありますかね?
メインでPHP言語以外をやってるのでたまにPHP書くときよく混乱します。
893デフォルトの名無しさん (ワッチョイ 6ff1-Xgk8)
垢版 |
2020/04/12(日) 14:46:43.20ID:1ZMEMPeI0
>>856
「の」はクラス「の」メンバー、
「は」は連想配列のkey「は」これですよ
という意味?

でもこれ以外で->や=>が出てくる場面なかった?
2020/04/12(日) 15:36:12.26ID:ATqenNPh0
>>891
一度取ってきたレスはキャッシュしておけばどうよ。
どのみt 1-1000 みたいのだっやらまとめて全部取ってくることになりそうだが。
2020/04/12(日) 16:48:22.18ID:+wetVu4e0
>>894
ども。
おっしゃる通りかもしれません。
投稿以外でサーバーに負荷掛けるより、クライアント側で処理した方が
良い気がしてきました。
1回投稿での文字数を制限してしまえばサイズも制御できそうですし。
2020/04/12(日) 22:01:27.62ID:JZPIrIOa0
Ruby なら、0〜1,000 までの配列を作っておいて、
読み込んだレス番号だけは、その文字列を設定していく

p posts = Array.new( 1001 )

出力
[ nil, nil, nil, 続く... ]
2020/04/13(月) 00:40:29.11ID:DZv8piin0
どうせなら ruby じゃなくて JS で例示してやれよ。
phpのスレでなんなんだけどさ。
2020/04/13(月) 00:57:20.05ID:uI4POseh0
何かスレ番が飛んでいるんだけど
2020/04/13(月) 10:11:39.65ID:Hsuo/bvd0
RubyならRubyならってよく布教しに来るけどいい加減場違い空気嫁

>>887
URLの話じゃないでしょ?
内部の話なら別に相対パスにしなくても絶対パスでも問題ないんだけど。
その絶対パスがわからんって話?
自スクリプトから見た自分の絶対パスは__FILE__定数でわかる。
サーバのドキュメントルートが知りたいなら$_SERVER['DOCUMENT_ROOT']
ただしこういう環境変数($_SERVERや$_ENV)はあんまり過信しないほうがいいね。
900デフォルトの名無しさん (ワッチョイ 77b0-dkLK)
垢版 |
2020/04/16(木) 13:03:40.61ID:emwZ0tr20
Eclipseで参考書通りに
print “¥n”入れてもコンソールで改行してくれないんだけどなんで?
901デフォルトの名無しさん (ワッチョイ 9fad-9n34)
垢版 |
2020/04/16(木) 17:50:16.15ID:mDx3pHSK0
>>900
OSとか実行コードくらい書けないのか
あと円マークがそのまま出てるようなら
正しくは「(日本語環境では円マークに見える』バックスラッシュだから」
を確認しろ
2020/04/16(木) 18:32:43.61ID:jzlLoXMF0
Eclipseとかprint ""とかいう表記を見ると
古いか一般のPHP書籍とかかけ離れたもののきがするわ
あんま参考にしないほうがいいかもしれんね
903デフォルトの名無しさん (ワッチョイ 77b0-dkLK)
垢版 |
2020/04/16(木) 22:40:26.71ID:emwZ0tr20
OSはMac
eclipseでphp7
<?php
print “hello”;
print “¥n”;
print “world”;
print “¥n”;
?>
Kindle Unlimitedの参考書によるとこれで
hello
world
と出力されるみたいなんだけど実行すると
hello¥nworld¥n
ってなる
2020/04/16(木) 22:55:55.17ID:Vn4RPyR40
そりゃなるだろな
2020/04/16(木) 23:11:06.27ID:tywb42E30
これを、Ruby で、実行してもエラーになる!
print “\n”;

基本的にプログラミングは、どの言語でも、半角英数字しか使えない。
全角文字のクォーテーション・全角空白なども使えない

\ も、日本語キーボードでは、バックスラッシュキーのこと!
\ という文字を使っちゃいけない!

これなら、Ruby でも改行される。
print "\n" ;
2020/04/16(木) 23:33:15.15ID:H8AaCGjg0
rubyさんはあちこちのスレに出張布教してるんですね

>>903
php print 改行
で検索くらい出来ない?
2020/04/17(金) 06:24:31.98ID:9clD5XXx0
半角で書くべきとこを全角で書いてるのは
動いてるようだから書き込んだときのミスとして
文字コードがおかしいんだろう
文字コード変えるか\nやめてPHP_EOLにしとけば
2020/04/17(金) 10:18:56.55ID:OO65ehhVM
バチスカってmacの専ブラで書き込むとクウォートが全角に、バックスラッシュが円マークに、自動変換される
2020/04/19(日) 11:58:51.62ID:KKQsn4ZP0
サーバー内で動くプログラミングは可能のことですか?
例えば無限ループで常に動かすプログラムとか
2020/04/19(日) 12:58:45.29ID:dTXGqJa40
可能なことアルヨ
911デフォルトの名無しさん (ワッチョイ 1701-QEis)
垢版 |
2020/04/19(日) 14:20:56.44ID:26zoB4wU0
可能アルヨ
2020/04/19(日) 16:17:57.28ID:8HZGCfxQ0
普通はそんな事しないな
913デフォルトの名無しさん (ワッチョイ 1701-QEis)
垢版 |
2020/04/19(日) 23:14:11.96ID:26zoB4wU0
定期実行されるクローラーとかのこと言ってるんじゃないの?
2020/04/21(火) 16:09:14.67ID:DLCfuoS50
個人的にPHPでサーバ書いてるんでそれはよくやってる
ただPHPに限った話じゃないけどその手のバックグラウンド実行は
普通のレンタルサーバだと一定時間でkillされるだろうね
2020/04/22(水) 08:46:54.32ID:kEPjMBTM0
定数を、成型した変数を代入することで宣言することはできませんか?

外部ファイル(.csv)を読み込み、連想配列$arrayを作成し、
クラス定数CLASS::CONSTをその配列$arrayにしたいのです
グローバル定数としてdefine(CONST, $array)することも試したのですが、いずれも出来ませんでした
916デフォルトの名無しさん (ワッチョイ e2ad-h7Ku)
垢版 |
2020/04/22(水) 11:16:41.91ID:/bKUmTE30
それは定数って言わないのでは
2020/04/22(水) 19:18:42.44ID:KcrgV6Jha
定数にはコンパイル時定数と実行時定数(immutable, readonly)とがあるが, PHPは基本的にコンパイル時定数しかサポートしていない
実現したいのは後者の実行時定数なんだろうが, 「php readonly」とかでググれば分かるように言語としてはサポートしていない
2020/04/22(水) 22:18:15.55ID:K1Lxy7X30
>>917
constがコンパイル時でdefineは実行時でしょ?

https://ideone.com/SgC9Eu
2020/04/22(水) 23:55:38.61ID:kEPjMBTM0
すみませんできました
defineだと変数渡しで定数を作れました
単にPHP5.6でdefineで定数に配列を入れられないため正常動作しなかったようです
PHP7.3の環境では動作しました
お手数おかけしました
920デフォルトの名無しさん (ワッチョイ a601-ZzZR)
垢版 |
2020/04/23(木) 08:33:15.04ID:n33m75pH0
ドットインストールでCakePHP勉強するお
2020/04/23(木) 08:59:23.02ID:C0/pHZNH0
CakePHP, Spring Boot などは、Ruby on Rails のコピーだから、

Rails を学んだ方が速いと思う
922デフォルトの名無しさん (ブーイモ MMed-enkp)
垢版 |
2020/04/23(木) 09:41:57.79ID:RRYW82KBM
x ドットインストールでCakePHP勉強するお
o ドットインストールでCakePHP勉強するよ

正しい日本語。
最近の日本人は気持ち悪い言葉づかいをする。
923デフォルトの名無しさん (ワッチョイ a601-ZzZR)
垢版 |
2020/04/23(木) 10:24:36.69ID:n33m75pH0
>>921
Webアプリの仕組み(裏でどう動いているか)を理解したくて、LaravelかCakePHPかで迷ってCakePHPを勉強しようと思ったんだけどLaravelはどう?
2020/04/23(木) 13:03:21.20ID:9QHb+xSV0
>>922
体言止めに句点打つのめちゃくちゃ違和感あるんだが
2020/04/23(木) 23:07:52.02ID:C0/pHZNH0
web アプリの作り方を学ぶのは、Ruby が最適!

本当は、Sinatra が良いけど、web 上の教科書が少ないから、
Rails になるかな?

ただし、Rails は、半年ぐらい掛けて学ぶぐらい高機能。
本は、10冊ぐらい出てる

web サイトでは、日本語版・Rails チュートリアルの1つ古いバージョンなら、無料で読めるけど、
あまりに難しいので、初心者は本から始めるのが良い
2020/04/23(木) 23:15:49.37ID:l5RZFi5J0
RubyをNGワードに入れるのはデフォなんですかね?
927デフォルトの名無しさん (ワッチョイ e2ad-h7Ku)
垢版 |
2020/04/24(金) 02:12:49.04ID:rM9gQYtA0
>>926
次からテンプレに入れよう
2020/04/24(金) 02:24:32.60ID:nHNgt9zS0
単に使い方を学びたいと言ってるだけなら別にフルスタックでもいいけど
ソースコードレベルで仕組みを理解したいならフルスタックは疲れるだけ
slimあたりのマイクロフレームワークのソースコード読むといい
2020/04/24(金) 05:55:46.89ID:cuZ5QlOgr
なんで荒らしの相手をするんや。

ホントにRubyが優れとるなら、PHPで書かれた有名ソフトがRubyで書かれなかった理由を提示させるべきや。

WordPressもNextCloudもPHPなんや。Facebookも元はPHPで書かれてた。

PHPerは胸を張って堂々としておけ。小バエが顔の前をうろちょろしても気にするな。
2020/04/26(日) 16:06:33.45ID:EH1DMWp5r
小さなグループのための連絡帳づくりには便利だな
自分も使って現在5人くらいで使っておおむね合格点しかし
「こういう風になってたらもっといいなあ」多数w
2020/04/26(日) 16:37:45.80ID:QChGrgCL0
RubyってPHPと張り合うものだったんだ?
あれはPerlと競合するものだと思ってた
2020/04/26(日) 22:04:15.59ID:NZagGUNV0
PHPはごった煮のテンプレートエンジンってイメージだな。
スクリプトのパースがコードではなくテキスト出力から始まるしな。
そこが他のスクリプトと比べてもweb向きに使い勝手がいいところだと思う。
933デフォルトの名無しさん (ワッチョイ a7f1-trzR)
垢版 |
2020/05/02(土) 15:59:18.74ID:riUeVpMT0
https://www.youtube.com/channel/UCoRxcaATU1N9QdXXgmQLBFQ

このふるちゃんという女の子が超絶にかわいいのだけど
このYoutuberってなにもの?
2020/05/02(土) 21:47:33.77ID:ogKtp69S0
慶應法法からWebって…
2020/05/03(日) 11:44:53.69ID:eurrHnV60
下記のような、空以外のstringだけを通し、それ以外はnullを返すメソッドを作りたいんですが、
この処理に最適なメソッド名ってありますか? 暫定のfilterStringは何となく違う気がしてます

function filterString($var): ?string
{
return is_string($var) && $var !== '' ? $var : null;
}
2020/05/03(日) 12:32:50.65ID:cPyz4pxla
nullifyInvalidInputとか
2020/05/04(月) 04:41:53.17ID:zTC9x9sUp
nullifyって見たことないけどいい名前だな
2020/05/04(月) 11:40:37.27ID:au6sJ5VU0
GCのためにでかいオブジェクトをnullにするのならわかるけど
エラーハンドリング用途でnullじゃない値をnullにして返すってのはbad practice
2020/05/04(月) 17:10:17.02ID:PenCHXzY0
>>936
ありがとうございます

>>938
デフォルト値が必要ないんでnullが都合いいです
2020/05/05(火) 02:01:57.19ID:2JXMMGLu0
各ページa,bからcページへの遷移を各ページのボタンa,bからとしたときに、ページbのボタン名をページaのものにブラウザのデバックモードかなんかで変更した場合に、
ページcから見るとisset(ボタンA)がtrueとなると思いますが、こういうパターンを見分ける方法ってありますでしょうか
2020/05/05(火) 03:32:16.49ID:abcVn/0z0
>>940 難しいと思う
ボタン名をbtn_A,btn_Bみたいにa,bで変えて
cで、aからの遷移だったら… bからの遷移だったら…
と処理わけするのが現実的
2020/05/05(火) 03:53:04.29ID:abcVn/0z0
と思ったけど、結局リファラも改ざんできちゃうから難しいね
JavaScriptで小細工も出来るけどそれすら改ざんされるのも想定してるなら
まあノーダメならそんな物好きなこと想定する必要はないと思うけど
ダメージあるなら設計変えればいいし
2020/05/05(火) 16:36:02.14ID:2JXMMGLu0
ありがと➰。入力された値の正統性を確かめるのって難しいですね。自分しか使わないやつだから気にしないでおきます
2020/05/05(火) 21:57:50.74ID:ZggaRwfV0
ページを表示する毎にランダム値を埋めて、submitされたページ名とその値とを検証したらどうかな。
945デフォルトの名無しさん (ワッチョイ ea02-7oqX)
垢版 |
2020/05/06(水) 19:48:47.60ID:KQs5P28n0
$a = [1, 2, 3];
と言う配列があったとして、そこから
$b[1][2][3] = '何か入れる';
と言う配列を作る簡単な方法はありませんでしょうか?
2020/05/06(水) 19:53:23.20ID:x/qfttvN0
$b[$a[0]][$a[1]][$a[2]] = '何か入れる';

とか?
2020/05/06(水) 20:03:27.90ID:KQs5P28n0
ごめんなさい、質問の仕方が悪かったです
元の配列の長さは可変で、出来上がる配列の深さも深くなっていく感じです

$ary = [1,2,3]; //長さは可変
$val = '何か';
$ret = func($ary, $val);
var_dump($ret);
---
array (size=1)
 1 =>
  array (size=1)
   2 =>
    array (size=1)
     3 => string '何か' (length=3)
2020/05/06(水) 23:50:59.56ID:cMx2hlKH0
そういうあり得ないくらい複雑な何かを実装しようとするときは、
実はやりたいことを実現するもっと簡単な方法があることが多い
配列$bは常に1つの次元に1つの要素しか持たないまま深さだけ深くなってくのは無駄というか意味不明
やりたいこと自体を書いた方がいいと思う
2020/05/07(木) 01:58:37.98ID:T+6y7YdL0
元の配列の値をキーの深さとする配列ができれば、あとはなんとかなるのでその部分だけの質問としたのですが、わかりにくくてすみませんでした
やりたかったことはLaravelのRouteの真似事です
木構造のクラス書いてデータ保持するのも面倒だったので配列でなんとかしようと思いました
ただあまりゴリ押しで書いても見ずらいので既存の関数などで簡潔に書けたらと思い質問した次第です
結局、参照代入をforeahで回すと言う方法で落ち着きました

public static int get($uri, $action)
{
if ($uri == '/') {
$paths[] = '/';
} else {
$paths = explode('/', $uri);
}

$tmp = &static::$routings;
foreach ($paths as $path) {
$tmp = &$tmp[$path];
}
$tmp = $action;

return static::$instance;
}
2020/05/07(木) 10:33:19.60ID:n2/pzMnbM
>>947
そのコードで言うところの func は一応実現してて、もっとシンプルな方法があるかを確認したいの?
それともまだ func を実現できてないの?
参照と再帰を使えば簡単なはずだけど、参照とループを使ってもできるはずだよ。
2020/05/07(木) 10:35:14.85ID:n2/pzMnbM
>>949
もう答え出してたかw
2020/05/10(日) 13:00:56.09ID:R/KKgKZH0
CORSがさっぱり分からんので教えてください
2020/05/10(日) 16:35:05.72ID:vZKWBupI0
ざっくり

ブラウザがセキュリティのために(あくまでも独自に)設定している、
同一オリジンポリシーというものがある。
同一オリジンってのは同じプロトコル 同じホスト 同じポートのことで、
同一ドメインでもこれらが違ったら別オリジンということになる。
ブラウザはJavaScriptのXMLHttpRequest(XHR)やFetchAPIから、
別オリジンのサイトには意図的にアクセスしないようにしてある。

その制限を超えるのがCORSで、
あるサイトを開いた時、別オリジンのサイトにXHRなどからアクセスしようとしてたら、
ブラウザは追加のOriginヘッダをつけて、その別オリジンに対して確認作業を行う。
そのサイトがAccess-Control-Allow-Originというヘッダを返してこれば、
意図したものと把握し、制限を超えてアクセスすることになる。

Access-Control-Allow-Originは、
よそのサイトのXHRから呼び出し可能なAPIを提供してる時はつけるべきだが、
よくわかってない人が、自サイトの掲示板でつけてしまった場合、
悪意あるサイトにアクセスするだけで、CSRFが成立して、犯罪予告を書いてしまったりする。
2020/05/11(月) 04:19:24.53ID:VLhDUqRop
>>953
わかりやすい
すばらしい
955デフォルトの名無しさん (アウアウエー Sa52-1T3V)
垢版 |
2020/05/21(木) 20:00:19.93ID:yfswt4qEa
ファンキーさが足りないね
2020/05/21(木) 20:50:27.91ID:HuNUoNoV0
CORS は、ブラウザでアクセスする人を保護するもの。
サーバー経由にすれば、クロスドメインでもアクセスできる

自分のPC にサーバーを立てて配信する、一番簡単な方法は、
VSCode の拡張機能のLive Server
2020/05/22(金) 02:32:27.59ID:1xmyMtu40
肝はあくまでもブラウザの機能ってところだな
それに頼って無策ではいけないよ
実行前最後のプロセスで再ログイン求めるとかやるべき対策はちゃんとやる
958デフォルトの名無しさん (ワッチョイ 5bf1-D4L3)
垢版 |
2020/05/26(火) 12:57:20.59ID:DWJQ5IJN0
<?php
の閉じタグをそれが文末にくるときは省略が奨励されてるのは
どういう理由からですか?
2020/05/26(火) 16:21:28.80ID:aOYHLQ64M
>>958
閉じタグの後に空行を入れちゃったりすると、それが出力されちゃうからだと思ってる。
ファイルの最後に空行を入れちゃうのは結構やりがちだから。
2020/05/26(火) 17:00:18.40ID:Be8LwKLh0
あれそうだったの?
閉じた直後の改行コードもNG?

>[改行]
[改行]
[EOF]

じゃなくて

>[改行]
[EOF]

もダメで、

>[EOF]

じゃないとダメだとか?
2020/05/26(火) 19:29:00.77ID:aOYHLQ64M
>>960
閉じた直後の改行はおk
2020/05/26(火) 19:30:28.09ID:jhkc2VSZ0
閉じタグ直後の改行1つだけは例外だが閉じない方がミスを減らせる
2020/05/26(火) 19:39:01.88ID:J1Rp1kon0
ドハマりしたなあ
2020/05/26(火) 20:04:54.09ID:vo31pS1W0
何故ダメなのかその理由が理解出来ないと
「閉じタグを付けるな」が一人歩きしそう
2020/05/26(火) 20:40:57.98ID:7EF4fRQa0
マニュアルにも明記されてるんだよなぁ

https://www.php.net/manual/language.basic-syntax.phptags.php

ぶっちゃけ紛らわしいので"PHPだけ書くなら"閉じタグを付けるなでいいじゃろ
2020/05/26(火) 20:47:29.05ID:aOYHLQ64M
short_open_tag はデフォルト On にしてほしい
2020/05/26(火) 21:01:26.17ID:Be8LwKLh0
>>961
なるほどthx!
レス数が950を超えています。1000を超えると書き込みができなくなります。