22/09/23 12:52:58.86 hnZdjJ3nd.net
1乙
3:デフォルトの名無しさん
22/09/24 13:08:46.11 BHAYvVt70.net
>>1
8.2
4:デフォルトの名無しさん
22/09/28 15:20:22.87 kZGixsXA0.net
try catch構文がなぜか機能しない(´・ω・`)
単純なゼロ除算をキャッチさせてみるだけでも、catch構文のほうに行かず停止してしまう。
try {
$num = 5/0;
} catch ( Exception $ex ) {
//例外時の処理
}
JavaやC#だったら、こういうふうに書けばどんな種類の例外でも拾ってくれますが、PHPの場合ちょっと違うのですか?
5:デフォルトの名無しさん
22/09/28 15:46:24.05 Jk2txA1W0.net
\Exceptionにしたら動くかも?
6:デフォルトの名無しさん
22/09/28 15:59:48.05 kZGixsXA0.net
>>5
ありがとうございます。動きました!
PHPだと例外の型の区別方法がよく分からないです。デバッグしてみると全部Exception型?
Javaとかだったらcatch構文で、例外オブジェクトの型の違いでこうやって分けられたのですが。
catch(HogeException) {
//HogeExceptionの例外処理
} catch(FugaException) {
//FugaExceptionの例外処理
}
PHPの場合どうやって分岐しますか?
エラーコードやエラーメッセージを拾って分ける処理をさしあたり書いて意図したとおりに動いてもいますが、これが正しいやり方ではないような気がします。
7:デフォルトの名無しさん
22/09/28 18:16:57.90 48qufCUu0.net
phpでも複数catch出来る
ゼロ除算を他の例外と分けたいならDivisionByZeroErrorやArithmeticErrorあたり
8:デフォルトの名無しさん
22/09/28 18:34:37.92 o0cHd3Tq0.net
公式覗いてみた?
一応動くやつ書いてみた
class MyException extends Exception { }
class MyOtherException extends Exception { }
class Test {
public function testing() {
try {
// throw new MyException();
throw new MyOtherException();
} catch (MyException $e) {
var_dump(get_class($e));
} catch (MyOtherException $e) {
var_dump(get_class($e));
}
}
}
$foo = new Test;
$foo->testing();
9:デフォルトの名無しさん
22/09/29 09:00:43.80 +9krd1sq0.net
>>7-8
ありがとうございます。それができることは分かりました。
とりあえず\Exceptionで一緒くたにcatchしてみてデバッグし、出てきた例外の「正確な型名」の調べ方が分からないです。
「PHP 例外 型 種類」のようにぐぐっても、ありがなゼロ除算の例外の型名すら、いま教えてもらうまでわからなかったです。
JavaならArithmeticException、C#ならDivideByZeroException、といった型名はちょっと調べればわかりますが、PHPの場合はその資料が無いようで。
10:デフォルトの名無しさん
22/09/29 09:08:50.12 aAavqPwL0.net
>>9
何度同じこと言わせるの?
公式読めよ
URLリンク(www.php.net)
11:デフォルトの名無しさん (ワッチョイ 1251-w3Il)
[ここ壊れてます] .net
>>10
ありがとうございます。その資料が欲しかったです。
ぐぐって検索するだけで、公式を丁寧にたどることをしなかったのが悪かったです。
12:デフォルトの名無しさん
22/09/29 12:31:32.34 cPkvua8F0.net
>>11
PHPは公式が素晴らしくよく出来てるから、新参素人がQiita等にイキって書く意味がなく、ググッてもヒットしない。
だから、君のレベルなら、まず公式を全部頭から一通り読むのが一番早いよ。(下の例とその下のNotesも含めて)
数日かかるかもしれないが、急がば回れが完全に成立する。
ちなC#もほぼ公式しか要らないほどよく出来てはいるが、あれはリファレンスであって、頭から読む読み物としては成立してない。
これはJS(MDN)もで、MDNは地味に読み物ページも充実しつつあるが、一部逆にリファレンスとしては使いにくくなってる面もある。
Javaの状況は知らんが、そもそも出所不明のコード例をググる必要がある世界観が異常だと気づくべき。
この点はPHPが完全に正しい。
13:デフォルトの名無しさん
22/09/29 20:16:25.66 E6cxSExy0.net
実機環境がPHP7.3のプロジェクトのおしごとがあるんだけど
WindowsのXAMPPは 7.4 と 8.1 しかない
ちょいとPHPUNITを動かす用のローカルのPHPは 7..4 でもいいよね?
14:デフォルトの名無しさん
22/09/29 20:53:29.90 D9meFc200.net
vagrant+virtualboxなりdockerなり仮想環境でも作った方が良さそうだけどね
15:デフォルトの名無しさん
22/09/29 21:14:41.27 aAavqPwL0.net
探せよ...
URLリンク(sourceforge.net)
16:デフォルトの名無しさん
22/09/30 16:30:44.38 anKKL5Vh0.net
入力された値が正しいかどうかをデバックしているのですが、
左辺と右辺の変数の値の評価が期待しているものと違うことを確認しました。
6番目のリストは「1」となることを期待していますが、
そうはなりませんでした。
なぜ、そうなってしまうか、想定できそうな原因ありますでしょうか。
ちなみにphpのバージョンは7.3になります。
-----
phpコード
<pre>
print "<ul>";
print "<li>".$id;
print "<li>".$_POST['login_id'];
print "<li>".($id===$_POST['login_id']);
print "<li>".$pw;
print "<li>".$_POST['pass'];
print "<li>".($pw===$_POST['pass']);
print "</ul>";
</pre>
-----
ブラウザの表示
・1234
・1234
・1
・test
・test
・
-----
17:デフォルトの名無しさん
22/09/30 16:58:56.18 tV+EdovX0.net
>>16
多分スペースとか改行とか入ってんかな
"---$pw---"
みたいに前後に目印入れて出してみたら
18:デフォルトの名無しさん
22/09/30 17:15:04.25 anKKL5Vh0.net
ありがとうございます。
こういうことでしょうか?
実行すると以下のようになります。
----
phpコード
print "<ul>";
print "<li>".$id;
print "<li>".$_POST['login_id'];
print "<li>".($id===$_POST['login_id']);
print "<li>"."---".$pw."---";
print "<li>".$_POST['pass'];
print "<li>".($pw===$_POST['pass']);
print "</ul>";
----
ブラウザ表示
・1234
・1234
・1
・---test---
・test
・
ちなみに以下のように変えても結果は変わりません。
print "<li>".($pw===$_POST['pass']);
↓
print "<li>".($pw==$_POST['pass']);
19:デフォルトの名無しさん
22/09/30 17:18:39.83 3aBoBWM+0.net
>>16
宿題は自分でやれ
20:デフォルトの名無しさん
22/09/30 17:22:10.31 tV+EdovX0.net
>>18
POST側も確認しなきゃ意味ないだろ
21:デフォルトの名無しさん
22/09/30 17:22:47.09 NBzDpu1o0.net
bin2hex($pw)
と
bin2hex($_POST['pass'])
で表示してみたら違いが分かるかも?
22:デフォルトの名無しさん
22/09/30 17:26:43.54 anKKL5Vh0.net
$_POST側も目印を入れました。
実行すると以下のようになります。
----
phpコード
print "<ul>";
print "<li>".$id;
print "<li>".$_POST['login_id'];
print "<li>".($id===$_POST['login_id']);
print "<li>".$pw;
print "<li>"."---".$_POST['pass']."---";
print "<li>".($pw==$_POST['pass']);
print "</ul>";
----
ブラウザ表示
・1234
・1234
・1
・test
・---test---
・
23:デフォルトの名無しさん
22/09/30 17:31:33.96 anKKL5Vh0.net
>>21
神
ありがとうございます!
違いが出てきました。!!!
bin2hex()を調べてみます。
----
phpコード
print "<ul>";
print "<li>".$id;
print "<li>".$_POST['login_id'];
print "<li>".($id===$_POST['login_id']);
print "<li>".bin2hex($pw);
print "<li>".bin2hex($_POST['pass']);
print "<li>".($pw==$_POST['pass']);
print "</ul>";
----
ブラウザ表示
・1234
・1234
・1
・74657374
・2074657374
・
24:デフォルトの名無しさん
22/09/30 17:36:24.68 NBzDpu1o0.net
0x20(スペース)が入っているね
トリムしてもいいならtrim()で前後のスペースを除去する事も可能
25:デフォルトの名無しさん
22/09/30 17:36:47.30 HxNT59pn0.net
POSTがおかしいね
' test'になってる
26:デフォルトの名無しさん
22/09/30 17:44:13.43 anKKL5Vh0.net
おっしゃるとおりです。
フォームに半角スペースが含まれていました。
これに気づかず数時間ハマってました。
ありがとうございました。
----
ブラウザ表示
・1234
・1234
・1
・74657374
・74657374
・1
27:デフォルトの名無しさん
22/09/30 18:20:29.34 3aBoBWM+0.net
>>26
やってる事がおかしい事に気づけ
IDEでブレークポイント当てれば1分で自力解決出来た案件だ
そもそもprintではデバッグにならないし、<li>も駄目だし
28:デフォルトの名無しさん
22/09/30 21:41:08.05 anKKL5Vh0.net
そうですね。
これを機にSublimetextから、ちゃんとしたIDE環境で作業するよう考えてみます。
vscodeがいいのかな。
29:デフォルトの名無しさん (ワッチョイ c77b-dQvS)
[ここ壊れてます] .net
>>28
実際のソース変更は慣れたエディタを使いつづけて問題ないが、
ブレークポイント当ててステップ実行出来るデバッグ環境は立ち上げておくべき
一般的にはVSCodeでいいんじゃね?呪文が必要らしいが(以下参照)
URLリンク(atmarkit.itmedia.co.jp)
30:デフォルトの名無しさん
22/10/02 00:51:15.34 Omlyv0OK0.net
Ruby on Rails では、組み込みRuby・ERB で、HTML ファイルを書く
文字列を結合して、HTML片を作ってはならない。
相手が、script タグなどを送ってきて、それで危険なJavaScript を実行されてしまうから
だから逆に、<% ~ %>, <%= ~ %> を使って、HTML内にRubyの構文を書く
<% price = 2500 * 1.05 %>
<p>
本の値段は<%= price %>円です。
</p>
こうすると、< > & " など、HTMLの特殊文字がエスケープされて、scriptタグも実行されない
31:デフォルトの名無しさん
22/10/03 22:50:16.95 ZWE2UPrr0.net
mysqliで、queryメソッドに格納するクエリ文なのですが。
文字列の囲いはどっちがいいですかね。。
$insert = "INSERT INTO product(product_id,product_code,product_name,price,category_id) VALUES(21,2000,\"三菱えんぴつ\",100,1)";
$insert = "INSERT INTO product(product_id,product_code,product_name,price,category_id) VALUES(21,2000,'三菱えんぴつ',100,1)";
32:デフォルトの名無しさん
22/10/03 22:57:13.59 IWMZiHvT0.net
どちらでも好きな方で
URLリンク(dev.mysql.com)
33:デフォルトの名無しさん
22/10/03 23:12:19.96 G1EEp94o0.net
>>31
外側をシングルクォートにしますかね
うっかり変数展開を使わないよう鉄下駄を履くイメージで
34:デフォルトの名無しさん
22/10/04 00:00:28.28 nXyy/Qec0.net
mysqliを使わずにPDOを使いprepare()などを使った方が良いのでは?
35:デフォルトの名無しさん
22/10/04 00:03:57.15 m1wIfZza0.net
完全に内部処理だけの場合だと
別にプレースホルダー使う必要ってないの?
念には念を入れておくべきなの?
36:デフォルトの名無しさん
22/10/04 00:18:31.66 GRVyRRF90.net
>>35
プリペアドステートメント(プレースホルダ)の「本来の役割」はデータ部分を除くSQLを事前コンパイルしてデータをバインドすることによりパフォーマンスを向上させることです
そのため、パフォーマンス観点で使うことがあります
内部処理というのが何を指すのか不明ですが、セキュリティ観点で見た場合、文字リテラルをわざわざ変数に入れてバインドする必要はないです
ただ、変数に入っているものであれば文字連結でSQLを作るよりプリペアドステートメントを使用することをおすすめします
プリペアドステートメントを使用すれば、引用符は自動で付加されるので >>31 のような悩みはなくなります
また、何より後で読んだときに「アレ?」って悩まなくて良いです。
37:デフォルトの名無しさん
22/10/04 00:44:39.24 77RhElC90.net
>>35
外部に公開しない内部専用の鯖でもSQLインジェクション対策が必要かという意味なら、必要だよ。
悪気はなくとも、意図的でなくとも、フォームに間違った内容をコピペする事はある。
その場合に偶々変な文字列が入ってたらDBが破壊される事があります、では駄目だろ。
38:デフォルトの名無しさん
22/10/04 02:02:08.77 m6zUfl020.net
ありがとうございます。
参考になりました。
39:デフォルトの名無しさん
22/10/04 02:03:00.45 m6zUfl020.net
もう一つ質問させてください。
MVCについて学習していて、二つの捉え方がありそうで混乱しています。
①Modelは関数やクラスの定義を記述する。Controllerはその実行場所。
②Modelはデータベースへの命令とビジネスロジックの実行場所。Controllerはユーザーと直接アクセスする処理の実行場所。
どちらがより正しい捉え方なのでしょうか?
40:デフォルトの名無しさん
22/10/04 14:16:20.93 fqSkVIi/0.net
内部処理だけというのは、
DBから読み込んだ結果を
impodeして新しく、
WHERE IN 文を作ってる場合などです。
元がDBの値なので、ずれたり不正な値はないはずですが、どうなのでしょうか
SQLインジェクションの心配はでるのでしょうか
高速化の意味として使用するのはわかりました。
あくまで素朴な疑問で。
41:デフォルトの名無しさん
22/10/04 14:25:51.27 GRVyRRF90.net
>>40
>>36 でも書いたけど
OK
$sql = "INSERT INTO product(product_id,product_code,product_name,price,category_id) VALUES(21,2000,'三菱えんぴつ',100,1)";
NG
$sql = "INSERT INTO product(product_id,product_code,product_name,price,category_id) VALUES(21,2000,'$val',100,1)";
$val の代入元に外部入力がないかを都度検証しなくてはならないのでプリペアドステートメントを使用するのが無難
ただ、'impodeして新しく、 WHERE IN 文を作ってる場合'ってのがそもそも正規化ができてないケースっぽいね^^;
42:デフォルトの名無しさん
22/10/04 14:33:14.85 GRVyRRF90.net
>>39
フレームワークを使用する前提だと思うけど、今どきのphpだとMVCで分類できないような設計になることが多い
クリーンアーキテクチャとかを調査してみるといい
フレームワークは Laravel だと思うので、「Laravel クリーンアーキテクチャ」あたりでググるとそれっぽい記事に当たれる
ただ、フレームワークの基礎概念がわかっていてもややこしいので、基本的になんちゃってクリーンアーキテクチャを採用することになると思う
43:デフォルトの名無しさん
22/10/04 14:50:31.74 kffIYV9Ia.net
ありがとうございます。
フレームワーク利用の前提でなく、素?のPHPです。
phpの学習のためにMVCを理解しようとしているので、
実務で構築するものとは、ちょっとズレているかもしれません。
疑問に思うのは、
例えば、入力バリデーションを実行するのは、Controllerなのかもしれませんが、
その関数は、Modelで定義するべきなのか?でもこれはビジネスロジックじゃないし。
とか思いました。
一方でModelは関数ライブラリみたいなものという意見もありました。
実務経験のあり皆様の知見をお借りしたいと思います。
44:デフォルトの名無しさん
22/10/04 14:58:12.02 GRVyRRF90.net
>>43
過ぎわかるけど、そのへんの厳密さはすぐに役に立たなくなる知見だよ
フレームワークと紐付けて学習することをおすすめします
45:デフォルトの名無しさん
22/10/04 14:58:57.95 GRVyRRF90.net
すまん。ミスw
過ぎわかるけど → すごいわかる
46:デフォルトの名無しさん
22/10/04 15:15:33.37 fqSkVIi/0.net
ありがとうございます。
脱線するけど、
*営業成績テーブル
個人ID,成績
*部門テーブル
部門ID,部門情報
*個人テーブル
個人ID,部門ID,個人情報
こんな感じのテーブルで
A部門所属のデータをとるときにとるときに、
個人テーブルからA部門所属をとってから、
営業成績テーブルにWHERE INしてたんですけど、
どうしたらよかったんですかね。
テーブルがそもそもダメなのかな。
47:デフォルトの名無しさん (ワッチョイ cf73-OAEy)
[ここ壊れてます] .net
素直に結合
何のためのRDBかと
48:デフォルトの名無しさん
22/10/04 22:31:47.47 lI8qARGk0.net
test
49:デフォルトの名無しさん
22/10/04 22:32:03.64 lI8qARGk0.net
php疎い者です。
javascriptでよくある処理ですが、
現在表示しているページの<body>タグにクラス(.current)があるか否かで処理を分岐したいのですが、
これをPHPではどのように書いてよいのかわかりません。
・取得対象の現在のドキュメントのbodyタグの指定の仕方
・正規表現など使わずにgetElementsByTagNameのようなものがhtmlでも使えるのか
など、、
宜しくお願いいたします。
50:デフォルトの名無しさん
22/10/04 22:35:18.09 BwJYUobP0.net
現在表示しているページは、誰が作っているの?
51:デフォルトの名無しさん
22/10/04 23:35:33.89 lI8qARGk0.net
>>50
自分で作っているページです。
恐らく方法論として間違っているのだと思いますが、
後学の為に方法を知っておきたいです。
52:デフォルトの名無しさん
22/10/04 23:51:17.05 nXyy/Qec0.net
ん?サーバーで先にHTMLを生成するのだからその段階で判断基準があるでしょ?
それが無くて後から動的ならjavascriptでやるしか無い気がするのだが
53:デフォルトの名無しさん
22/10/04 23:52:48.63 CNGS9dK70.net
Ruby なら、Nokogiri, Selenium Webdriver などを使う。
PHP にも、そういうモジュールがあるのでは?
require 'nokogiri'
doc_1 = Nokogiri::HTML(<<EOT)
<html><body class="abc">あ</body></html>
EOT
doc_2 = Nokogiri::HTML(<<EOT)
<html><body class="current">い</body></html>
EOT
element_1 = doc_1.at_css( 'body.current' )
if element_1
puts element_1.content
elsif
p element_1
end
#=> nil
element_2 = doc_2.at_css( 'body.current' )
if element_2
puts element_2.content
elsif
p element_2
end
#=> い
54:デフォルトの名無しさん
22/10/04 23:55:32.56 lI8qARGk0.net
例えばスマホ/PCなど、表示条件によりbodyタグにphpでクラス付与するケースです。
phpの分岐条件をbodyのクラスで判定する事自体がナンセンスというか方法論として間違っているという事かと思いますが、
もしこのような方法がphpでもできるならば具体的にどのようなソースになるか知っておきたい感じです。
これに限らず、classのあるなしをphpでもできれば便利だなあと、、
とても煩雑で面倒で無意味な事であれば諦めます。。
55:デフォルトの名無しさん
22/10/04 23:55:56.42 L5kRkIm30.net
生成したサイトにスクレイピングするスクリプト書くとかしか無いんじゃない?
56:デフォルトの名無しさん
22/10/04 23:57:51.22 lI8qARGk0.net
>>53
ありがとうございます。
恐らく「PHP Simple HTML DOM Parser」などがそれに当たるかと思われますが、
ちょっと1回使いたいだけの場合にライブラリ使わずサクッとできないかと思い、質問しました。
57:デフォルトの名無しさん
22/10/04 23:59:21.33 lI8qARGk0.net
>>55
現在のページに対しfile_get_contentsなどを使うイメージでしょうか。
ありがとうございます。
58:デフォルトの名無しさん
22/10/05 00:03:03.19 W5I+dJQy0.net
>>39
Ruby on Rails のMVC では、
Model はデータベース・ビジネスロジック、
View はHTML、
Controller はルーティングなど、MV 以外
歴史的には、コントローラーの肥大化を防ぐために、
Skinny Controller, Fat Model を推奨した。
その結果、モデルが肥大化した
そこで今度は、モデルの処理を減らすために、
Form Object, Service Object へ処理を分けた
また表示処理は、Presenter へ分けた。
それで、Form Presenter, Model Presenter が出来た
59:デフォルトの名無しさん
22/10/05 00:06:29.81 j989iulk0.net
クライアント側でJavascriptなど使って書き換えしているときはどうするんだろう
60:デフォルトの名無しさん
22/10/05 00:10:18.85 4fLF3mVy0.net
>>59
今回は一旦そのケース(jsによる操作)はないという前提でお願います...
61:デフォルトの名無しさん
22/10/05 00:28:51.30 W5I+dJQy0.net
>>54
Ruby on Rails では、
<html><body></body></html> の部分は、レイアウトファイルと言う。
絵画でいう額縁の部分
body 内では、<%= yield %> で、各テンプレートファイルを読み込むようになっている。
だから、bodyタグを変える場合は、複数のレイアウトファイルを切り替える
<html><body class="abc">
<%= yield %>
</body></html>
<html><body class="xyz">
<%= yield %>
</body></html>
それか、Selenium Webdriver で、JavaScript で書いて、ブラウザに送信できる。
body要素を取得して、class属性を変更する
62:デフォルトの名無しさん
22/10/05 08:10:28.17 lxgtpcSQr.net
>>49
phpで生成する段階で分岐しないといけないならphpで分岐する
レンダリング後に分岐したいならjsで分岐するしかない
63:デフォルトの名無しさん (ワッチョイ 6fe7-pIDl)
[ここ壊れてます] .net
>>61
RubyってマジでPHPそっくりなんだな
64:デフォルトの名無しさん
22/10/05 23:07:42.68 W5I+dJQy0.net
すべてのフレームワークは、Ruby on Rails を基本としているから、
初心者はRailsから始めるべき
JavaScript なんかは、Rubyの20年遅れ。
ES6(ES2015)で、ようやく辞書・クラス構文・テンプレート文字列などが出来たなど、Ruby化を進めた
65:デフォルトの名無しさん
22/10/05 23:15:54.32 W5I+dJQy0.net
Ruby は、JavaScript(JS), Python, PHP よりも、バグらない
Rubyの偽は、nil, false の2つだけ
一方、他の言語は、各型に偽がある。
空文字、0, 0.0、空配列など
これのおかげでバグるから、
JS などは、== 緩い等価演算子を使うなと言われて、=== 厳密等価演算子を使えとなった。
さらに、TypeScript も必須になった
66:デフォルトの名無しさん
22/10/06 12:50:00.65 tI414gt60.net
Rubyガイジは嫌われていることにそろそろ気付けよw
67:デフォルトの名無しさん
22/10/07 01:00:05.85 /3WJyx6k0.net
こういうのはエゴな正義感でやってるんやろ
自分がRubyを支えてるみたいなw
やらかしてることには自ら目をつぶるタイプ、しょうもない人間
68:デフォルトの名無しさん
22/10/08 19:37:21.57 juauNmJw0.net
$comment_info_msg_tag = '<div class="comment-information-messag">'.$comment_info_msg.'</div>'
これって変数$comment_info_msg_tagを呼び出した時
変数$comment_info_msgの中身がクラスcomment-information-messagの<DIV>タグを付けられて出てくるって事で合っていますか?
69:デフォルトの名無しさん
22/10/08 19:57:47.78 rIAKoGAI0.net
>>68
合ってない
文字連結で変数に代入してるだけ
プログラミングにおいて「呼び出し」とは関数呼び出しであって、PHPなら()が付く
70:デフォルトの名無しさん
22/10/08 20:14:34.77 rIAKoGAI0.net
てかその記述の意味が分からないのなら、煽り抜きでphp.netを最初から全部読んだ方がいい
基本中の基本中の基本中の基本位のレベルだぞそれ
71:デフォルトの名無しさん
22/10/08 21:32:53.78 rIAKoGAI0.net
CGIの時にfilter_input(INPUT_SERVER,'REMOTE_ADDR')で値が取れないという仕様バグに遭遇してるのだが、
一般的にこれはどう対処されてるんだ?
詳細は以下で、15年前かららしい。
URLリンク(www.php.net)
原因は以下で、
URLリンク(www.php.net)
要はENVとSERVERの値は鯖から渡されるが、
使わない場合は無駄なのでデフォでjitするが、CGIだとこれでは動かないらしい。
上記下側のURLによると auto_globals_jit をdisableにすれば直るらしいが、俺の実行環境(fastCGI)では駄目だった。
開発中はモジュールでやってたので気づかなかった。
本番環境(最安値帯のレンサバ)で動作テストする段階になって発覚。(今)
ターゲットは最安値~中間帯のレンサバなので、CGIを切る事も出来ない。
IDEがうるさいから全部filter_inputにしたのにこれかよ!というところ。
諦めて $_SERVER 直接アクセスにソース書き換えるしかないか、と思ってるが、
それ以外の解決策があればよろしく。
72:デフォルトの名無しさん
22/10/11 13:51:56.12 5Qn6fZG50.net
if ($sex == 0) {
$hoge = 'ちんこ';
} else if ($sex == 1) {
$hoge = 'まんこ';
}
return $hoge;
C系やJavaとは異なり、
変数hogeが初めて宣言されているのがif文の中なのに、if文から出たあとでその変数が見えてしまうことに戸惑っています。
「こういうもの」で慣れるしかないのですか?
何かありがちな注意点ってありますか?
イテレーターの中でしか使わない変数が残ってしまうことでの不安。
73:デフォルトの名無しさん
22/10/11 14:40:16.45 j0iSNFpd0.net
注意する
サポートするエディタを使う
デバッグする
ちなみに挙げてるコードも$sexが0,1以外ならいわゆる未定義になる可能性があって、
まあいいコードではないよね(すぐreturnするだけなら変数いらへんやん的なとこも)
ちなみに9からだとerrorになるらしい
今のPHPでは通っちゃうだけで、戸惑う感覚はなくさないほうがいいと思うよ
74:デフォルトの名無しさん
22/10/11 14:40:56.76 a24aUp+M0.net
気持ちが悪いなら未定義の変数をいきなり使うようなことはしなければ良いだけでは?
普通はそんな事しない訳だし
typoはどうしょうもないが
75:デフォルトの名無しさん
22/10/11 15:20:07.39 17+/w9Hg0.net
Ruby でも、if は、スコープを作らない。
C みたいに、{ } で囲むとスコープを作る言語もあるけど、動的言語では少ないかも
if true
a = 3
else
b = 5
end
p a, b #=> 3, nil
76:デフォルトの名無しさん (ワッチョイ 5ebb-Ir1l)
[ここ壊れてます] .net
>>71
興味深い
かなり限定的な不具合だけど、結構基本的なとこだしそんなの残ってるんかなぁ...
手が空いたときに試してみたいと思うけど、環境揃えるのがめんどいからとりあえずissueであげてみては?
Symfonyは$_SERVERから取ってるっぽい
URLリンク(symfony.com)
77:デフォルトの名無しさん (ワッチョイ c6e7-kHT+)
[ここ壊れてます] .net
>>72
pythonとかもスコープは関数単位だよね
スクリプト系言語で 途中で出てきた変数は
それ以降でずっと使えるのが多い気がする
78:デフォルトの名無しさん (ワッチョイ 5ebb-Ir1l)
[ここ壊れてます] .net
>>72
まずは、マニュアル読めば?
基本的な注意点は書いてある
URLリンク(www.php.net)
ただ、phpのマニュアルにしては珍しくちょっとわかりにくいw
79:デフォルトの名無しさん
22/10/11 20:33:48.75 Xj3nI9lP0.net
>>76
15年前から公式に載ってるからissueに上げなくとも存在は知られてるはず。
ただcontributeするような連中はモジュールで使うから直す奴が居ないのだろう。
俺はPHPに詳しくないのでcontributeはしないが、Cは読めるので、
contributeする気ならソースの確認は手伝う。
知らないところも含めて推測するなら、
・元々は$_SERVERがimmutable扱いでコピーしても問題なかった(推測、実際の仕様は知らん)
・jitを導入する際にこれでは駄目になり、修正するときに漏れた(或いは修正されなかった)
・モジュールモードは完全に後付で、$_SERVERはApache内のメモリを直接読んでる(多分)
・直接参照の上記構造だとjitすら必要ないが、$_SERVERはCGIモードのjitでも動作するので、
jitはApacheからcharの塊で貰った物をパースする事を意味している?ならここに接続すればいい
のではないかとなる。
ただ、CGIモードのfilter_inputだけで使えない=filter_input内でコピーを持ってる
という構造は上記推定でもナンセンスではあるが。(駄目ではないが無駄)
この部分をさておくなら、仕様変更に対してソースが変更されずに放置されると現状況は発生する。
よって、見るならfilter_inputと$_SERVERの取り扱いと、CGI/moduleモードを決めてる変数だね。(当たり前だが)
修正は、そのコピーを見てる部分を$_SERVERを直接見るようにすればいいだけではある。
修正し忘れてるだけなら簡単だが、修正しようとしても出来なかったから放置されてる場合は多分無理ゲー。
80:デフォルトの名無しさん (ワッチョイ 034f-iygP)
[ここ壊れてます] .net
Symfony って、かなり古そう
PHP は、Laravel 以外は無理じゃないの?
人気のないフレームワークを選ぶと無理
基本、Ruby on Rails 以外は無理だと思う。
Laravel, Django など
ZOZO はLaravelだけど
81:デフォルトの名無しさん (ワッチョイ 5ebb-Ir1l)
[ここ壊れてます] .net
>>80
LaravelのRequestオブジェクトはSymfonyだよ
コード読んでみ
てか、シラン分野に口出して恥かくのいい加減やめれば?
82:デフォルトの名無しさん
22/10/12 14:51:05.57 MmvRDuvc0.net
Symfonyで作られたかなり古いシステムの改修案件に入りそうなんですが、
これを最新のフレームワーク、最新のPHPに置き換えるのはかなり工数かかりますか?
自分は下っ端だし何も決定権無いんですが、後学のために知りたいです。
83:デフォルトの名無しさん
22/10/12 14:57:37.19 zrvaLfr+0.net
Mなのかもしれないな
84:デフォルトの名無しさん (ワッチョイ 5ebb-Ir1l)
[ここ壊れてます] .net
>>82
設計書/仕様書が残ってるか次第じゃないかなぁ
なければ仕様調査から初めなきゃならないのでかなりしんどい
85:デフォルトの名無しさん
22/10/12 16:20:29.22 0CBrymoV0.net
WEBが絡まない案件でもフレームワーク使ってる?
なんかディレクトリ構成から毎回試行錯誤なんだけど
86:デフォルトの名無しさん
22/10/12 16:23:30.68 vpmJO63Z0.net
webが絡まない案件ってどんなのだろうか
将来使えるようにという意味で何かの処理をするみたいな話なら
例えばだけどLaravelのCommandで呼べるように作っておけば移行も楽になるとかはあるかも
87:デフォルトの名無しさん
22/10/13 08:51:46.75 Reu2mtSt0.net
データベースとHTML 画面を使うだけでも、
面倒くさいから、Ruby on Rails を使う
プロジェクト管理ツールのRedmine などがそう。
でも、これはウェブサービスかな?
プロジェクトを他人と共有する場合、
Railsみたいな既製品を使う方が、フォルダ構成も決まっているし、分かりやすい
自作のものは、フォルダ構成も個人でバラバラになるから、共同製作できない
88:デフォルトの名無しさん
22/10/16 23:15:47.50 1lEHOAQp0.net
Ruby on Rails はプロ・企業用だから、Heroku, AWS, Docker
大きすぎて、レンタルサーバーでは無理
89:デフォルトの名無しさん
22/10/17 17:31:09.75 5FwYTQU90.net
WPやEC-CUBEは同じPHPだといっても別業界の話って感じがする
>>89
WPインストールできる鯖だったらだいたいRubyも対応してない?
とはいえRoRはレン鯖のイメージないよね、AWSだね
90:デフォルトの名無しさん
22/10/18 18:16:46.46 eLrtEQ000.net
公開サーバーの「ドキュメントルート」の中に、あるディレクトリがありそこにはphpのライブラリファイルが複数あります。
そのディレクトリに対して、直接ブラウザからアクセスできないような設定を行うことができますでしょうか?
ただし、同じドメインサーバーのphpファイルからのアクセスは許可いたします。(ソースをincludeさせます。)
本来ならば、公開サーバーの「ドキュメントルート」の外に「include」ディレクトリを配置して、
そこにアクセスされないようなファイル類を置くことが一般的だと思いますが、さまざまな理由により
「ドキュメントルート」の中にアクセスできないファイル類を置くことになりました。
何かアイデアがありましたらアドバイスください。
91:デフォルトの名無しさん
22/10/18 18:24:17.73 eZjQhR3g0.net
それPHPの質問じゃなく、ウェブサーバーの設定の質問だからなぁw
ドキュメントルートに.htaccessをおいてアクセス制限すればいいだけでは?
詳しくは.htaccessの書き方などを調べてみては?
92:デフォルトの名無しさん
22/10/18 18:35:06.55 oo0O6LY/0.net
基本方針として >>91 が良いと思うけど、昔のphpでアクセス可能なphpファイルでグローバル変数に適当な値詰め込んで、アクセスできちゃまずいファイルで、それがなければdie()するやつはよく見た気がする
93:デフォルトの名無しさん
22/10/19 00:14:08.21 yzq3WDoT0.net
ありがとうございます。
おっしゃるとおり、ウェブサーバーの範囲なのですが。
あちらの世界の人たちが、phpのincludeとか理解いただけるか
不安だったので、ついこっちで質問してしまいました。
一つだけ追加質問させてください。
こういったものは、
パーミッション? chmodなどで設定するものではなくて、
.htaccessでの設定が基本と思っていいですかね。
94:デフォルトの名無しさん
22/10/19 00:21:40.99 jaKz+yV10.net
httpd.confからドキュメントルートのrequire ip を127.0.0.1にすればいけるのかな?少なくとも外部からのアクセスは弾けるはずだけどさ
95:デフォルトの名無しさん
22/10/19 07:16:27.43 Js5Cj1j50.net
>>93
上司に聞け、マジで、そうしないと事故るよ
96:デフォルトの名無しさん
22/10/19 07:31:19.51 +5kcU5m20.net
>>94
phpからのファイル読み込みだとWebサーバ通らないから意図したものではない設定になると思うよ
97:デフォルトの名無しさん
22/10/19 10:40:35.61 mOIoNYE10.net
>>93
それで大丈夫です
.htaccessの設定で上書きされるので何より優先されます
98:97
22/10/19 11:21:48.30 +5kcU5m20.net
phpで制限してるやつ思い出したんで書き込んどく
URLリンク(github.com)
CodeIgniter3系で各ファイルの先頭に
defined('BASEPATH') OR exit('No direct script access allowed');
があってスクリプト以外から読めないようにしてた
フォルダにも空ディレクトリ用にindex.html用意してたりして、昔のインフラ対応を一所懸命にやってた感じ
URLリンク(github.com)
99:デフォルトの名無しさん
22/10/19 11:26:05.56 FPDvrmQDr.net
下手にWebhttp通そうとしないで、社内とかで相談したほうがいいと思うわ
インフラ関係させたほうが、後々責任とるハメにならないよ
100:デフォルトの名無しさん
22/10/19 13:52:22.97 Js5Cj1j50.net
>>98
wikiによると2006からあるらしいけど、当時ですらその方式はナンセンスだよね。
上の階層には.htaccess置いてるし、ソフト403でいいのか?だし。
そもそもPHPではサーバーレス的な構成はほぼ無いので、諦めて普通に癒着させた方が綺麗だった気がする。
101:デフォルトの名無しさん
22/10/19 14:06:52.57 +5kcU5m20.net
>>100
んなこたぁないと思うよ
あの頃のレンサバの開放ディレクトリってフラットだったから
あと、レンサバ以外でnginxがはやりつつあったからフールプルーフでしょ
まぁ、あんまりきれいでないことは同意w
102:デフォルトの名無しさん
22/10/19 15:41:31.30 Js5Cj1j50.net
>>101
当時の仕様は知らんが、今と変わりなければ、
nginxでは.htaccessは使えないし、ディレクトリインデックスはデフォでオフだから、まるで意味無いよ。
> If a request ends with a slash, NGINX treats it as a request for a directory and tries to find an index file in the directory. The index directive defines the index file’s name (the default value is index.html). To continue with the example, if the request URI is /images/some/path/, NGINX delivers the file /www/data/images/some/path/index.html if it exists. If it does not, NGINX returns HTTP code 404 (Not Found) by default. To configure NGINX to return an automatically generated directory listing instead, include the on parameter to the autoindex directive:
> URLリンク(docs.nginx.com)
フールプルーフを目指すなら、Apacheとnginxの両方の設定ファイルもちゃんと用意しておけばいいだけ。
.htaccess置くのなら、Options でディレクトリインデックスも切れるはずだし、グダグダすぎる。
まあ歴史は長いようだから、大抵何らかの理由があるものではあるけど、
見た目、単なる技量不足(鯖を知らないだけ)で、初心者的なコーディングをしてしまったように見える。
そうでなければ、鯖がグダグダ過ぎて設定してもまともに動かなかったのでPHP側で対応した、てなところだろう。
103:デフォルトの名無しさん
22/10/19 17:33:25.58 +5kcU5m20.net
>>102
基本古いレンサバ仕様で動くように作ってあったのよ
で、その頃ディレクトリの中丸見えじゃん問題ってのがそこそこ話題にされてたんで、index.htmlを用意するってのはそれ対策かと
nginxの設定テンプレートは、そこいらの野良blogとか記憶が確かならnginxの公式でも配布してたと思う
ただ、野良の方はかなり程度が低いのも多かったから、できる範囲で対応をとってたって感じかなぁ(多分w)
exit()がこっちの対策だね
なんせcomposerインストールとかも野良な時代だからねぇ
色々大変だった
ところで、apache/nginx用の設定ファイルを同梱ってありえるの?
.htaccessを突っ込んでるのは見るけど、設定ファイルを配布してるのは見たことないんだけど
104:デフォルトの名無しさん
22/10/19 19:27:01.72 vYLhahcn0.net
PHP技術者認定試験って難しい?
105:デフォルトの名無しさん
22/10/19 19:35:32.95 yzq3WDoT0.net
ありがとうございます。
まさか盛り上がる案件だとは。
個人で借りたレンタルサーバーの研究サイトなのです。
心配させてスイマセン。
htaccessで整えてみます。
106:デフォルトの名無しさん
22/10/19 20:27:01.24 Js5Cj1j50.net
>>103
> ところで、apache/nginx用の設定ファイルを同梱ってありえるの?
知らん。けど、技術的に出来ない理由はないだろ。
もっとも、nginxのは.htaccessから変換して作るものらしいし、.htaccessがあれば何とかなるんだろう。
(と思って公式のrewriteちょっと見てみたが、手動ならさておき、自動では厳しいなこれは)
レンサバ+PHPにはnginxは向かなかったのかもね。
上げたら見えるほうが分かりやすいし、
大量の静的ファイルを捌くだけの元々の鯖の使い方だとその方がいいし、
apacheのデフォがそうだからnginxレンサバもそうしたら、
鯖単位でしか設定出来ないのだから丸見えになってしまう。
無理にapacheに合わせず、nginx本来の設定で使えばよかっただけだね。
つってもnginxレンサバがapacheに合わせたのは商業的な理由だろうし、
結果、その歪みのしわ寄せがフレームワーク側に残ってる、間抜けだがありがちな状況に見えるよ。
しかし今も更新してるんだから直せばいいのにとも思うが。コントリビュートするならどうぞ。
最上位の階層の.htaccessに一行、
Options -Indexes
と書けばそれ以下のソフト403なindex.htmlは全部削除出来るはず。以下参考
> URLリンク(www.javadrive.jp)
> URLリンク(httpd.apache.org)
107:デフォルトの名無しさん
22/10/19 20:40:24.15 Js5Cj1j50.net
>>105
個人で研究するなら好き勝手にやるべきだが、一応
> 一般的に、サーバの主設定ファイルにアクセスできない場合を除いて、 .htaccess ファイルの使用は極力避けてください。
> 世の中には、例えば、ユーザ認証は常に .htaccess ファイルで 行なわなければならない、という誤解が広まっていますが、
> まったくそんなことは ありません。ユーザ認証の設定はサーバ主設定ファイルに書くことができ、 実際、その方がより良い設定方法です。
> URLリンク(httpd.apache.org)
まあサーバの設定ファイルもほぼ同じ書式なのでhtaccessの書き方を確認するのも悪くはないが、
そもそもhtaccessなんて無くても動くように作るべきだよ。
(それがCodeIgniterでやってる事だと言われればそうなのだが)
108:デフォルトの名無しさん
22/10/19 20:49:06.23 +5kcU5m20.net
>>106
> 知らん
まぁそうやんな。俺も知らんw
ちょっと誤解させたかもしれないけど、nginx使ってたのは自前サバとかVPSとかで、レンサバのnginxは無かったと思う
余談だけど、CodeIgniter4だとどうなってるか見てみた。
ちゃんとcomposer install にも対応してて、随分モダンになってたわ(当たりまえだけど)
でも、index.htmlは残っててちょっと笑ったw
久しぶりに週末にでも使ってみようかと思う
109:デフォルトの名無しさん
22/10/19 21:00:01.66 +5kcU5m20.net
>>107
laravelとかはもう割り切って.htaccessないしね
個人的にはレンサバ以外でapache使うこともなくなったから書き方も忘れたw
110:デフォルトの名無しさん
22/10/19 22:21:11.99 Js5Cj1j50.net
>>108
> nginx使ってたのは自前サバとかVPSとかで、レンサバのnginxは無かったと思う
ならセルフ開示じゃないですか~。
それなら、nginx登場の2004はxhrがajaxとして再発見される2005より前なので、
nginxは当初は(wiki読む限り今もらしいが)静的ファイルの高速配信向けで、
おそらくデフォでApacheと同じくディレクトリインデックス有りで、
しかも.htaccessが効かないから事故りまくったのだろう。
んで、動的サイトの増加に伴い、デフォでディレクトリインデックス無しに仕様変更したのではないかと。
>>109
まあ参考にすべきは最近最高に使われてるソースであって、PHPならLaravelなのは確か。
ただ俺はWeb系でもないのでさっぱり知らないし、実際どう配置して使うのかも知らないが、publicには転がってる。
URLリンク(github.com)
robots.txtもあるから、おそらく外から見えるディレクトリなのだろうとは思う。
ただ、PHPの場合、構造的に最低限のrewriteはサーバーにやって貰うしかない。
他言語みたいにURL文字列を引数として関数コールして貰えれば鯖と完全分離出来るが、
そうではないので、諦めて片足突っ込んだ状態で行くのが一番ましだと思うよ。
Laravelは Options -MultiViews -Indexes と rewrite だけだから、最小限に留めてる。これが多分ベスト。
CodeIgniterはこのOptionsの一行をケチった結果index.htmlが大量に必要になってるわけだが、
htaccess見たところアク禁指定だけでrewriteが無いので、rewriteしないつもりなら鯖と完全分離出来る。
が、現実的にrewrite無しの動的鯖って厳しい気が。
とはいえ、ユーザーに直接クエリ文字列を書いてもらえるのなら有りなので、フレームワークとしてはこれでいいのかも?
111:デフォルトの名無しさん
22/10/19 22:26:04.73 o5dUZxuy0.net
レンサバって、ユーザーにて医今日してくれる場所は、ユーザーのHOMEディレクトリで、
その配下にpublic_htmlがあるんだよね?
その隣にディレクトリ作れば、Webからはアクセス出来ないでしょう
112:デフォルトの名無しさん
22/10/19 22:26:46.26 o5dUZxuy0.net
× て医今日
○ 提供
なんて変換だよ・・・
113:デフォルトの名無しさん
22/10/20 00:52:50.25 JdSscN+80.net
>111
おっしゃるとおりです。
ですが、いろいろと理由がありドキュメントルート配下に、
ブラウザからアクセスさせないディレクトリを作りたいと思ったのですが。
それが、こんなにイレギュラーなことかとは思わなかったです。。
ベーシック認証やIP制限などで、htaccessは何度か弄ったことはありますが、
そもそもこのファイルなんぞやとは思っていました。
htaccessとかの学習は、サーバー関連の学習で得られますでしょうか?
Linuxとかの基礎本とか読んでみたのですが、コレジャナイ感がしてます。
「htaccessとは?」という基礎レベルから理解したいのですが。。
114:デフォルトの名無しさん
22/10/20 01:50:07.83 kET4P9rE0.net
今時レンタルサーバーでPHPを動かすという需要がWPぐらいしか無い気がするんだよね
だからLaravelみたいなのを使う場合はレンタルサーバーなんかで動かせられないし
(データベースなども必要だし)
AWSの無料枠とかでやった方が良いのでは無いかと思うのだけどね
さくらのクラウドとか安いサービスもあるし、選択肢は結構ある筈だけどね
115:デフォルトの名無しさん
22/10/20 08:21:45.81 MwzDpM35r.net
AWSは無料枠にハメられて高額になるからレンサバ使えるならレンサバがコスト的にいい
116:デフォルトの名無しさん
22/10/20 08:36:09.51 Y6zWMSoX0.net
>>113
言うほどイレギュラーでもない。
ただ、レンタルサーバーでもドキュメントルートは変更出来るだろうから、ディレクトリ作って下にずらせばいいだけではある。
htaccessは知っておけばいいものでわざわざ学習する物ではない。
とりあえず公式全部読めば何となく分かるだろうし、その程度でいい。1~2日程度。(8~16時間程度)
それでも意味不明ならググれば何とかなる。
URLリンク(httpd.apache.org)
URLリンク(httpd.apache.org)
機能一覧なら以下。
URLリンク(httpd.apache.org)
逆に言えばここに挙げられていることしかできないから、この中にやりたい事がなければhtaccessでは実現出来ない。
見れば分かるがサーバーの設定であり、PHP的に必要な物はほぼ無い。(当たり前だが)
ぶっちゃけ、今の君の理解でも大して問題ないと思う。
ただ、その場合、例えばCodeIgniterみたいに(あれは意図的だと思うけど)、
それhtaccessに書けば一行で済むよ?みたいな事になる可能性があるだけ。とはいえ、それでも問題ないのも事実。
117:デフォルトの名無しさん
22/10/20 08:40:25.19 Y6zWMSoX0.net
>>114
今時無料レンタルサーバーでもMySQL使えるよ。
URLリンク(www.star.ne.jp)
もっとも、初心者がPHPをわざわざ書く必要は無くなってきてて、最終的にWPかNoCodeになる気はするが。
118:デフォルトの名無しさん
22/10/20 17:37:46.33 CBxQXJka0.net
laravelインストールできなかったり、
MySQLがwindow関数使えないVerだったり
半端なレンサバのほうが何故か多い印象
なんでMySQLは5止めが多いんだ?
119:デフォルトの名無しさん
22/10/20 18:53:20.55 zfdkX5sTH.net
レンサバは極端な話WPだけ出来ればいいしって設計が多い
さくらとかも
120:デフォルトの名無しさん
22/10/25 13:00:09.47 S5n6e8jb0.net
PHPやりはじめてます。
ソースを修正するたびにサーバーにアップロードしてWebで試しているんですが
アップロードを何回も連続で繰り返してるとプロバイダから何か異常なアクセスしていると思われて
突然使用禁止とかになってしまうこととかはないんでしょうか?
121:デフォルトの名無しさん
22/10/25 13:07:11.70 SJXXwtKb0.net
ないです
122:デフォルトの名無しさん
22/10/25 14:52:36.86 7auWfLY00.net
めっちゃ高速に大量に頻繁にbot並にやるなら思われるかもね
123:デフォルトの名無しさん
22/10/25 15:49:08.68 Em+AyBVc0.net
アップロードの時は回線速度超える事はないし
よっぽどアクセス集中していない限り、処理が破綻することはないと思う
使用禁止にするかはサーバーの利用規約と管理者の裁量
124:デフォルトの名無しさん
22/10/25 20:40:23.57 nojkBjJF0.net
何故ローカルで開発環境を作ってそこで試さないのか・・・
125:デフォルトの名無しさん
22/10/26 09:34:23.26 coiJgjfP0.net
サーバの構築はPHPの学習の本質ではないからですね
126:デフォルトの名無しさん
22/10/26 09:36:02.91 gnI45ZOc0.net
>>120
手作業程度でそんな事にならんよ
毎日12時間以上5人程度が同じサーバにそういう事してたけど問題なし
ただ、その方法だとデバッガー使えないんじゃないの?
トレースとか出来たほうが楽だよ
127:デフォルトの名無しさん
22/10/26 10:08:24.28 coiJgjfP0.net
>>126
xdebugを使えばリモートでトレースデバッグできるのでお勧めですね
128:デフォルトの名無しさん
22/10/26 10:50:27.55 s5FmrwgX0.net
>>125
いやいやwwww
開発環境を作れないような奴は開発する以前の問題
個人でやるだけなら別に好きにやればいいけど
仕事で開発環境も作れませんは流石に無いわw
xamppとかサルでも出来るようなのもあるし、docker等も先に学習しておいた方がいい
129:デフォルトの名無しさん
22/10/26 10:59:19.37 b6oRD2LO0.net
学習するなら、本番と(なるべく)同じ環境でやるのが良いと思う
130:デフォルトの名無しさん (ワッチョイ eef8-B2ja)
22/10/26 15:45:27.26 NvEAaUGj0.net
APIの接続制限してるのだと実験しにくい
レンサバのIPアドレスは登録してるけど、
ローカルサバからAPIが使えなくて
こゆときどうしてる?
相手先にローカルサバにも解放してもらう?
131:デフォルトの名無しさん
22/10/27 00:39:49.92 vwkoq2WA0.net
日本語でおけ
132:デフォルトの名無しさん
22/10/27 01:29:49.29 rsMc68LB0.net
AというサーバーのAPIを使いたいけど、Bのレンタルサーバーからのアクセスは許可しているが
ローカル(自宅か会社?)のIPからは許可されてないから使えないって事?
どっちにしてもPHP全く関係ないけどw
133:デフォルトの名無しさん
22/10/31 19:22:50.72 4ZX07akh0.net
PHPのSQLのサンプルで次のようなデータの登録と読み出しはうまくいきました。
DB書き込み送信側
$stmt=$pdo->query('CREATE TABLE test_table (id text, name text)');
$stmt=$pdo->query("INSERT INTO test_table (id, name) VALUES ('abc', 'def')");
DB読み込み受信側
$stmt=$pdo->query('OPEN test_table (id text, name text)');
$result_rows = $pdo->query('SELECT * FROM test_table');
foreach ( $result_rows as $row ) {
echo "id: {$row['id']}"."<br>";
echo "name: {$row['name']}"."<br>";
}
結果表示:abc def
この項目名idや nameを別の文字にするとうまく機能しなくなります。
idや nameが必須項目なのかと思い、3つ目に独自の名前の項目を追加してもだめでした。
この項目名は決められた名前しか使えないのでしょうか?
独自の名前を追加するにはどうすればいいのでしょうか?
134:デフォルトの名無しさん
22/10/31 19:41:02.63 CaQ/+DOQ0.net
PHP以前にSQLを理解しているか?
mysql workbenchなどでSQLを入力してどんな挙動をするかを先に勉強した方が良いのでは?
135:デフォルトの名無しさん
22/10/31 21:26:35.07 DaaCK8GW0.net
>>133
同じ名前で再度CREATEしてもテーブル再作成されたりしないのよ?
136:デフォルトの名無しさん
22/10/31 21:48:21.38 4ZX07akh0.net
そこは書くの省いてますが毎回テーブル消去しての実行になってます
137:デフォルトの名無しさん
22/10/31 21:53:29.34 h9jqxmjM0.net
何で毎回テーブル消すのかが分からん
138:デフォルトの名無しさん
22/10/31 23:20:50.12 bH7L5hyf0.net
何をやったのか詳しく書いた方がいいと思う
長くなってもかまわないから
エラーメッセージも
情報が少なすぎて何がなんだかわからない
teratail とかの質問のフォーマットが参考に
なるかもしれない
139:デフォルトの名無しさん
22/10/31 23:26:53.75 KoRc+sfH0.net
OPENって初めてみたわ
コレってDB何?
140:デフォルトの名無しさん
22/11/01 14:46:59.98 CRXHeHIYM.net
>>139
mysqlかpostgresqlだと思う
141:デフォルトの名無しさん
22/11/01 15:42:59.29 hGXBrabD0.net
OPENと言うステートメントはある事はあるが、カーソル操作だな
>>133の記述は変だと思う
142:デフォルトの名無しさん
22/11/03 22:09:25.88 xQnCuP5H0.net
質問
Webのurl下のファイルって表面上見えなくてもある方法でダウンロードしようと思えばできますよね?
ということはPHPのソースはまんま見られてしまうのでしょうか?
見られると簡単に解析されていいように弄られてしまう可能性も高いんでしょうか?
143:デフォルトの名無しさん
22/11/03 22:29:30.25 ROsFLORr0.net
>>142
できません
144:デフォルトの名無しさん
22/11/03 22:53:58.13 WOBTUDvw0.net
>>142
Webサーバの設定ミスで見えてしまうケースはあります
また、外部入力の取り扱いが不適切なサイトで意図しないソースをダウンロードしたり表示したりすることが可能となるケースもあります
手法はいくつもありますがディレクトリトラバーサルを使用した攻撃は観測しやすいので調査してみると良いでしょう
ソースを見られると解析は可能ですが、解析されても問題がないようにするためのナレッジも色々あるので調べてみると良いです
145:デフォルトの名無しさん
22/11/03 23:17:12.77 RxtPrKwp0.net
Web APIのアクセストークンとかどこに置くのが良いんだろ
146:デフォルトの名無しさん (ワッチョイ fbe7-Tk+f)
22/11/04 10:03:40.02 fjW+y4zq0.net
>>145
index.php と同じところにおいてください
147:デフォルトの名無しさん (ワッチョイ 8bbb-/OGx)
22/11/04 10:34:34.64 7HgZbeW40.net
>>145
cookieとlocalstorageのどちらか?って議論なら、JWTの議論が参考になると思う
phperなら徳丸さんの日記あたりを漁るとなんかあった気がする
ただ、時期によって推奨が変わってきてるんで、直近の議論じゃなければ新しい議論を探したほうがいい
148:デフォルトの名無しさん (ワッチョイ 1363-HLP5)
22/11/04 10:39:08.02 QCeBmW6M0.net
議論が変わると言うことは、まだ枯れてないんだろうな
149:デフォルトの名無しさん (ワッチョイ 8bbb-/OGx)
22/11/04 10:53:31.17 7HgZbeW40.net
結論が時期によって変わるのは、ブラウザの進化と各種Webフレームワークのデフォルト状態がその時々で変化しているせいですね
ただ、どの時期でも大きく変わらないのは「実態としてはどちらも大差ない」「XSSがあればどっちも危険」ってとこです
なので、その時々の推奨と言っても僅差ですね
150:デフォルトの名無しさん
22/11/04 13:02:42.65 1sxu7itbH.net
適当にまとめちゃうと「どこでも危険なのは変わりないから大して変わらない」で落ち着くのかな
151:デフォルトの名無しさん
22/11/04 18:23:18.46 mo/2hjrh0.net
fopenのモードの語源
r はread
wはwirte
で。。
aは、append? add? どっちですか。
152:デフォルトの名無しさん
22/11/04 20:43:22.06 mATgUcp20.net
appendかと(追記モードみたいな意味合いだし)
153:デフォルトの名無しさん
22/11/08 07:48:23.75 c6RTZORh0.net
jpegの画像を読み込んで、画面全体を50%の透明度にしてpngで保存するにはどうしたらいいですか?
imagecopymergeで完全に透明な画像を50%で合成しても無理でした。
154:デフォルトの名無しさん
22/11/08 11:12:12.94 6dXM39fN0.net
www.php.net/manual/ja/book.imagick.php
155:デフォルトの名無しさん
22/11/08 17:14:26.31 c6ryzee70.net
自己解決しました
imagecoloratとimagesetpixelで1pxずつコピーすればよし
156:デフォルトの名無しさん
22/11/09 17:37:16.27 jregjzg7M.net
PHPて複数の人が同時に同じPHPのアドレスにアクセスするとやっぱり
そのPHPが同時に実行されるんですかね?
同時であっても問題が起こらないように記述しとかないといけないんですかね?ファイルアクセスとか
特に気にしなくても問題になるようなことはほとんどないんでしょうか?
157:デフォルトの名無しさん
22/11/09 18:12:02.46 v9YRsbRp0.net
問題が起きるかどうかはロジック次第
ネットショップで残りあと1つの商品を
複数の客が取り合ったときどうなるかな
158:デフォルトの名無しさん
22/11/09 22:21:42.93 B8ttDfTq0.net
複数の<input>タグがあり、その<input>要素が何番目か、またその<input>の状態のデータ(flag)を送りたい。
<input>で送れる情報は、name属性が$_POST[]のKeyとなり、データ自体はvalue属性となるが。
これでは、送れる情報は一つだけになってしまう。
inputのtypeはボタンを予定していて、valueの値に対して背景色などの装飾を設定したい。flagの状態はデータベースで管理したいと思っています。
ボタンを押したとき、そのボタンは①何番目の<input>か?そのボタンは②どんなステータスなのか?
を送る一般的な方法ありますか?
159:デフォルトの名無しさん
22/11/09 23:19:53.18 N3jhnMoZ0.net
ん?別にnameを被らないようにすればいいだけでは?
160:デフォルトの名無しさん
22/11/09 23:25:54.31 qkSO7igA0.net
nameって被って良いんだっけ?
161:デフォルトの名無しさん
22/11/09 23:26:13.49 v9YRsbRp0.net
ボタンのステータスって押されてるかどうかなの?
複数ボタンがあって、それをマウスで選択し同時に押して、
さらにサブミットする訳かな?
162:デフォルトの名無しさん
22/11/10 00:03:46.62 OiyyiqKZ0.net
もうJavaScriptでやればいいじゃない
163:デフォルトの名無しさん
22/11/10 02:59:06.05 9rsfrZ3t0.net
ありがとうございます。
イメージとして
URLリンク(deai.mokuren.ne.jp)
こんなものです。
JavaScript併用しかないでしょうか?
164:デフォルトの名無しさん
22/11/10 03:12:39.55 D1e6h/yW0.net
phpはname="hoge[]"みたいに[]付けると配列、name="hoge[hage]"みたいにすると連想配列で値取れるよ
165:デフォルトの名無しさん
22/11/10 03:31:30.79 9rsfrZ3t0.net
ありがとうございます。
いま。環境がないので確かめられないのですが。
POSTで受け取ったときは、こんなかんじで値が取得できますかね。。
明日チャレンジしてみます。
foreach($_POST['hoge'] as $flag){
echo $i;
echo $flag;
$i++;
}
166:デフォルトの名無しさん
22/11/10 15:22:36.26 yzcqKQgo0.net
URLリンク(www.php.net)
$iなんていらないw
key valueを取る方法でやればいいだけ
167:デフォルトの名無しさん
22/11/12 09:26:14.24 6XR5KbEP0.net
>>156
共有メモリのこと?
168:デフォルトの名無しさん
22/11/12 17:51:55.77 X6RVlC/X0.net
>>167
URIのことだと思うよ
169:デフォルトの名無しさん
22/12/01 15:52:23.45 vegZ2o8T0.net
URLリンク(kanda-it-school-kensyu.com)
この処理ってどういうこと。
phpはサーバーで処理してhtmlタグに変換するものだし。
クライアント側は、そりゃブラウザで上からタグを読むので当然なんだが。
170:デフォルトの名無しさん
22/12/01 16:20:11.56 d04ep7qN0.net
>>169
PHPの最小のHello,world出力プログラムは
Hello,world
です
171:デフォルトの名無しさん
22/12/01 20:16:53.86 REXaKPyC0.net
例えば、Ruby のERB では、上から順番に実行される
<p>あ</p> を読み込んで、
Ruby の式、<p><%= RUBY_VERSION %></p> を実行してから、
<p>い</p> を読み込む
require 'erb'
html =<<HTML
<p>あ</p>
<p><%= RUBY_VERSION %></p>
<p>い</p>
HTML
puts ERB.new( html, nil, "<>" ).result( binding )
出力
<p>あ</p>
<p>2.5.7</p>
<p>い</p>
172:デフォルトの名無しさん
22/12/01 21:58:45.19 oIO2xTp30.net
PHPモード書くとエラー吐くんだな、このサーバー
173:デフォルトの名無しさん
22/12/02 17:29:48.09 PlsoFJv80.net
phpって数万行(一行10列程度)のCSV等を出力させるのってバッチ処理でもない限り無理だよね?
174:デフォルトの名無しさん
22/12/02 17:33:19.36 PlsoFJv80.net
一応phpのタイムアウト無制限にしたりメモリ上限上げたりとかしてみたけど3万行くらいで落ちる
なんかいい方法あればだれか教えて~
175:デフォルトの名無しさん
22/12/02 17:50:40.60 Gp+8HXJF0.net
サーバにファイル作ってダウンロードさせる
他にはHTTPで圧縮かけるとか
176:デフォルトの名無しさん
22/12/02 18:36:24.61 xWddkTKj0.net
>>173
しゅつりょくばっふぁりんぐしなければよゆう
それかめもりをたくさんつかえるようにする
177:デフォルトの名無しさん
22/12/02 19:03:21.41 gLaIiOiZ0.net
>>173-174
俺はPHP詳しくないけど、まず何で落ちてるか正確に確認してるか?
タイムアウトは0、メモリは-1の指定で上限無しに出来ることになってるし、
落ちたらそう分かるメッセージが出るはずだが。
ちな、gc_collect_cycles()でGCも出来る。
URLリンク(www.php.net)
ただ、吐き出すだけでメモリを食い尽くすのは余程プログラムの構造がおかしい限りありえない。
とりあえずmemory_get_peak_usageの値でも取ってみ?
URLリンク(www.php.net)
仮に5万行=50k行=1行100文字なら5MBだろ。メモリ上限はあり得ないと思うが。
これら以外で落ちてるのなら、その対策をしないと。
例えば、レンサバなら、長寿命のプロセスは自動的に切られる。
対策は、専用鯖にすること。
178:デフォルトの名無しさん
22/12/02 19:05:57.07 R6aGvMSq0.net
CSV ファイルのサイズは、どれぐらい?
テキストファイルなら、zip/gzip などで圧縮できるかも
179:デフォルトの名無しさん
22/12/02 21:35:42.65 Ny0E8yV10.net
数万行ぐらい余裕じゃないかなぁ
100万行ぐらいのダウンロードやインポートとか普通にやってたけど
180:デフォルトの名無しさん
22/12/02 22:49:13.60 V7r+YhBf0.net
数万行のデータがどの位のサイズになるか分からないが
1GB程度のファイルダウンロード処理などメモリ-使わず出来る
181:デフォルトの名無しさん
22/12/03 01:33:06.32 PlWN8Jgn0.net
エクスポートファイルがSJISとかだった場合、5C問題ってどうしてんの?
182:デフォルトの名無しさん
22/12/03 01:33:54.05 PlWN8Jgn0.net
エクスポートしたCSVがSJISでPHPでインポートする場合か
183:デフォルトの名無しさん
22/12/04 23:02:03.15 APQ0RP7C0.net
事前にUTF-8に変換してから読み込めばいけそう
184:デフォルトの名無しさん
22/12/07 11:45:23.79 1fkWXeae0.net
同一ファイルへの連続書き込みについて
filewrite();
filewrite();
function filewrite() {
// 'w'の新規モードで同一ファイルへの書き込み
}
こういった感じで連続で書き込んだのですが
テキストファイルの出力結果が1回目が終わった末尾に次の書き込み
それも先頭部分ではない途中からの書き込みが重なってなされてるようでした。
関数は同期処理だと思うので途中で次に行ってるとも思えないですし
間にsleep(1);で1秒間を入れてみたのですが結果は変わらず、よくわからなくなりました。
PHPの設定はアップロードに反映まで時間間隔を入れないに設定しています。
それでも一回目の書き込みがまとめて反映されるまでやや間隔があって
2回目の反映と重なってしまってるのだろうか?と考えてもみました。
これはどうやれば1回ずつの書き込みはそのつど締められて正常に連続書き込みできるようになるのでしょうか?
PHPで同一ファイルに連続して書き込む際の注意点とかありますか?
185:デフォルトの名無しさん (ワッチョイ 91da-7kHv)
22/12/07 12:46:25.55 /vDZIDbT0.net
>>184
プログラムに問題が無いなら、プログラム以外に問題があんだろ
他のプロセスがいるとかな
sleep(30)とか入れて、初回書き込みのあと5秒おきに
テキストの内容および更新時刻を観察するといいよ
186:デフォルトの名無しさん
22/12/07 15:19:37.18 w780kgYS0.net
fclose()する前にfsync()でもしておけば同期はされるのでは?
187:デフォルトの名無しさん
22/12/07 15:31:04.93 1fkWXeae0.net
flock($fp,LOCK_SH); flock($fp,LOCK_UN); fflush($fp);
これらは付けてみました、しかしプログラムの方の問題だったようです
strcmp()===0の3つイコールの徹底化や改行コードの統一で正常に動くようになりました
188:デフォルトの名無しさん
22/12/08 10:49:14.78 yEj7mUL70.net
PHPUnitってデバッグしながら実行できます?
189:デフォルトの名無しさん
22/12/08 11:16:07.17 FA1I/9HE0.net
できますん
190:デフォルトの名無しさん
22/12/08 19:56:18.82 O25d6TKs0.net
xammpの環境ではexecが動くけど素のphp+apacheで動かないのって
やっぱhttpd.confかphp.iniの設定の違いかな?
phpからexecで自作のプログラム(音源出力、キー有力受付)を呼びたいんだけど、
xammpの環境からは正常に動作するんだけど、apache2.4+php7.4の環境だと
音源出力は動くけどキー入力が受け付けない。
タスクマネージャー上には存在するから呼び出しはされてるけどキー入力を受け付けて
無いみたいなんだよね。
なんか設定で怪しい項目ある?
safe_modeは一応offにしてある。
191:デフォルトの名無しさん
22/12/08 20:03:31.21 9104bOlZ0.net
何故キー入力が必要になるのか理解できないです
192:デフォルトの名無しさん
22/12/08 20:15:01.79 O25d6TKs0.net
>>191
装置の中にサーバーが組み込まれていてそこにデバイスが
接続されている状態なんだ。
そこでユーザーのレスポンスを受けたい感じ
193:デフォルトの名無しさん
22/12/08 20:17:19.07 O25d6TKs0.net
ちなwin10環境ね
194:デフォルトの名無しさん
22/12/08 20:58:43.48 wvTxK2BR0.net
ん?
言っている事が分からんw
サーバー側もwindowsでそこでPHPからexeを動かす(コンソールアプリ?)
その動かしたexeでキー入力?
何の意味があるんだ・・・
もっと分かるように説明してくれ
195:デフォルトの名無しさん
22/12/08 21:23:04.49 O25d6TKs0.net
装置A(apache,php)にデバイス(キーボードとか)が繋がっている状態。
でユーザーは装置Aから音声ガイダンスが流れるからそれに従って
キー入力を行って、装置Aでどのキーが入力されたのかって
情報が欲しい。
でPHPからexceで自作のexe(C++で作成したもの)を呼び出して装置A上で
音声の再生、キー入力を受けつけたい。装置Aには画面が無い状態ね。
まぁ、普通にCSで作れってのはおいておいてw
何で装置にWebサーバーが入っているのかはhttp通信で外部からその
装置を制御したいから。
例えば俺のマシンから装置Aに対して、音声出してってPOSTすると
装置Aが音声を出すって感じ
196:デフォルトの名無しさん
22/12/08 21:31:46.95 O25d6TKs0.net
apache上で動いているPHPにそのマシンからのキー入力情報が
受け取れるなら別にexecで外部プログラムを呼ばなくてもいいけど、
他に方法があるなら教えてくれ。
Node.jsでjavascriptで受け取るってのはだめだったら試す。
197:デフォルトの名無しさん
22/12/08 21:39:10.00 O25d6TKs0.net
サーバー上で標準入力を受け取りたいんだけど
エンターボタンは無いからC++で書いてる。
198:デフォルトの名無しさん
22/12/08 21:56:41.92 yrpHKjJA0.net
xamppでは動いたんだよね?
だったらxamppでやけば良い気がするけど...
いくつか制限できる方法はあるのですぐ出てきたやつ貼っとく
URLリンク(www.php.net)
レンサバなんかだと制限があったりするけど、デフォルトでは特に制限なかったと思うけどなぁ
199:デフォルトの名無しさん
22/12/08 22:02:56.68 O25d6TKs0.net
>>198
ありがと。php.iniはほぼデフォで使ってるから
その辺の設定は特に入れてないはずなんだよな・・・・
タスクマネージャみてるとxampp controllから呼ばれている場合は
動いてるんだよな・・・
2つのexeのうち1つは普通に動いているから権限でもなさそうだし・・・
200:デフォルトの名無しさん
22/12/09 00:28:47.75 TadN+Pts0.net
apacheがwindowsサービスで動いてるなら仕様じゃね?
201:デフォルトの名無しさん
22/12/09 20:34:02.72 jNmVPDHZ0.net
文字列は "abc" 囲いでも 'abc' 囲いでもどちらでもいいようになってますが
皆さんはどちらを標準にして囲ってますか?
あるいはこういうケースの時はこっちを使うというような例などがあったら聞かせてください
202:デフォルトの名無しさん
22/12/09 23:16:21.56 UyKdfg3p0.net
普段はシングルクォーテーション
変数展開とかするならダブルクォーテーションだな
203:デフォルトの名無しさん
22/12/09 23:21:07.50 WbcD0Rxq0.net
Cから来たので基本はダブルクォーテーションかな
シングルは 文字列中にダブルクォートが多いときか
オプションみたいな1文字ですって強調したいときに使う
204:デフォルトの名無しさん
22/12/10 12:45:51.50 y3cK8mxB0.net
みんなでどっちに揃えましょうとかどっちが多数ですというようなものはないんですかね
205:デフォルトの名無しさん
22/12/10 17:00:52.24 wlUDu/T/0.net
どっちにそろえようとかは特にないし
PSR-12なんかでも規定はないね
というか、一貫性が何より大切だから
どっち使ってもいいけど必ず統一しろ
と書いてある
206:デフォルトの名無しさん
22/12/10 17:28:10.93 8BH9hZYzF.net
テンプレートリテラル使うからダブルクォーテーションが多め
Viewとコントローラ一緒のファイルで記述する時はPHP側は基本シングルクォーテーションにしてる
207:デフォルトの名無しさん (ワッチョイ 675f-TX1J)
22/12/14 10:36:26.00 clTPPvgu0.net
どなたかfuelphpという産廃使ってる方いませんかー!
テスト導入に苦戦してまして…
208:デフォルトの名無しさん
22/12/14 17:12:07.16 EUJoHYXL0.net
>>207
産廃はお前だよ
209:デフォルトの名無しさん
22/12/14 18:44:26.38 1dR4tl0p0.net
>>207
FuelPHPなら使っているが、産廃などと言うやつには一切の手助けはしない。
210:デフォルトの名無しさん
22/12/14 19:11:09.38 erx97Ujd0.net
文字列としてSQL扱うときは、外側は " にしてた
211:デフォルトの名無しさん
22/12/15 11:47:59.66 LeGrOdjQ0.net
>>208
もう更新されてないフレームワークだろ?ググればオワコンってすぐ出てくるし
>>209
あっそ
212:デフォルトの名無しさん
22/12/15 22:44:28.75 2voHnGHc0.net
上手くいったら報告して
213:デフォルトの名無しさん
22/12/15 22:54:29.04 lBgSxiuh0.net
URLリンク(fuelphp.jp)
これ参考にならんの?
214:デフォルトの名無しさん
22/12/15 23:22:29.62 2B516vAy0.net
10年前のフレームワークかぁ
215:デフォルトの名無しさん
22/12/15 23:49:29.88 2voHnGHc0.net
歴戦の勇士なら使える
216:デフォルトの名無しさん
22/12/15 23:59:56.21 WOnFczjv0.net
まともな情報量をもった質問もできない産廃をかまってやるなんてお前ら優しいな
217:デフォルトの名無しさん
22/12/16 18:02:33.05 sLgaZEhZ0.net
>>216
産廃をありがたがって使ってるお前が異端なんだよ
218:デフォルトの名無しさん
22/12/16 18:04:56.98 sLgaZEhZ0.net
>>213
モックのライブラリ入れるとcomposerさんがちゃんと更新してくれなくてな…記事も少なくてクソだわ
219:デフォルトの名無しさん
22/12/16 18:25:02.16 s8p4pdj90.net
将来的な事を考えたら多少コストがかかろうがLaravelなどに書き換えた方が良さそうだけどねぇ
多分そんなに予算も無く、修正や機能追加に金は出せないみたいな所から受けていたら悲惨としか・・・
220:デフォルトの名無しさん (ワッチョイ 675f-TX1J)
22/12/16 18:52:17.38 sLgaZEhZ0.net
>>219
まさしくそれ…
好き好んで使ってるやつの気がしれん
221:デフォルトの名無しさん
22/12/16 20:43:17.62 kkMqd6VL0.net
上司「オーバーヘッドと速度低下おきるからフレームワークは禁止。クラスとMVCは自分で定義してわかりやすくしろ、見本は無い」
222:デフォルトの名無しさん
22/12/17 10:51:57.18 kvss8RMi0.net
まずその上司のリファクタリングが必要
223:デフォルトの名無しさん
22/12/17 11:02:16.79 QDDpMmFH0.net
ネコの会社
224:デフォルトの名無しさん
22/12/17 17:05:55.72 PuWdgN410.net
>>222
リファクタリングって動きは変えないから何も変わらんのでは?
225:デフォルトの名無しさん
22/12/17 17:11:12.27 on9KAdJq0.net
テストしやすくなるんでしょ
重要w
226:デフォルトの名無しさん
22/12/18 22:34:02.51 Sye5af7x0.net
下らねえ質問はここに書き込みやがれ
227:デフォルトの名無しさん
22/12/18 23:07:20.33 HXc3HAGH0.net
file_gets_contentってマジカル変数みたいなの使わないとうまく行かないことがあるけど何か違いあるのかな?
同じフォルダ階層にいるjsonの内容読み取るだけだから必要無さそうな気がするんだが
228:デフォルトの名無しさん
22/12/19 08:00:13.41 GcFpX62a0.net
assert()など、デバッグ用のコードって本実装のとき残しているものなのですか?
それとも削除するものなのですか?
229:デフォルトの名無しさん
22/12/19 09:48:24.14 aVzxjlfF0.net
>>227
マジカル変数ってなに?
バナナと言ったら黄色?
230:デフォルトの名無しさん
22/12/19 10:51:17.06 +PhZX49Z0.net
>>229
マジック定数って言うのか!恥ずかしい!!
231:デフォルトの名無しさん
22/12/19 11:00:09.40 aVzxjlfF0.net
>>230
それでもまだ意味がわからないんだけど、第二引数のことを言ってる?
つまり、それは、同じディレクトリを探索させたいのに
インクルードパスの探索を指定(true)していて、かつ
インクルードパスにカレントを指定してないって感じか
そう、君のバグです
232:デフォルトの名無しさん
22/12/19 11:20:29.71 +PhZX49Z0.net
>>231
第2引数には何も指定してない
同じディレクトリにあるJSONに対して
file_get_contents('hoge.json');
ってやったら戻り値がfalseだった
233:デフォルトの名無しさん
22/12/19 11:30:22.81 kpBvGP850.net
多分コレのことだろう
URLリンク(bashalog.c-brains.jp)
だから、絶対パスでの指定が推奨されてて、そのために__DIR__が大活躍する
234:デフォルトの名無しさん
22/12/19 16:21:21.04 A864IMiY0.net
>>228
建前としてはDEBUGフラグが立ってる時だけ機能するように作るんだけど
実際は本番実行でも残すよ
235:デフォルトの名無しさん
22/12/19 20:04:25.66 qVdptYk+0.net
postの判別を検索したら、php入門なるサイトで
if($_SERVER["REQUEST_METHOD"] = "POST"){
というのがあったので、やってみてもダメだったのが
if($_SERVER["REQUEST_METHOD"] == "POST"){
ならokだったのですが、
php4やphp5の頃は問題が無かったのか、そもそもサイトの情報が間違いなのかどっちなのでしょうか?
236:デフォルトの名無しさん
22/12/19 20:41:16.39 GWLkdDwg0.net
そりゃ=は代入だからダメだろw
237:デフォルトの名無しさん (ワッチョイ ea97-ZR1D)
22/12/20 09:14:27.19 B/jnFsL10.net
>>234
ありがとうございます。あと一点質問させてください。
debugならassert()系のメソッド?関数?で事足りるとおもうのですが、
わざわざphpUnitなるライブラリを使う方法もあるそうです。
phpUnitを使うことのメリットがよくわかりません。
どんなことで利点があるかお分かりになれば教えてください。
238:デフォルトの名無しさん
22/12/20 10:07:52.67 QTfYNwyf0.net
>>237
多分根本的に間違って理解してると思う
URLリンク(speakerdeck.com)
リンクした章を読んでみるとassertの使い方が分かるんじゃないかなぁ
239:デフォルトの名無しさん (ワッチョイ aa7c-e5AJ)
22/12/20 12:46:29.70 cyGUI4Ab0.net
デバッグを効率的にやりたいだけの話なら
xdebug入れてブレークポイントなどを使う方が良いんじゃない?
240:デフォルトの名無しさん
22/12/20 14:33:30.45 F+OZA9Ef0.net
全部デバッグレベルのログで出力してるわ
printfデバッグの上位互換です
本番はログレベル下げるだけだし
241:デフォルトの名無しさん
22/12/25 08:18:35.97 YjenC8+L0.net
bashからphpも始めた身ですが、
変数を ${hogehoge} の波括弧でも動作しますが、{$hogehoge}のほうがいいですか?
242:デフォルトの名無しさん
22/12/25 08:33:33.01 8c2A2dic0.net
>>241
バージョンによる
以下、8.2以降に関して
URLリンク(www.php.net)
> "${var}" と "${expr}" 形式の文字列への値の埋め込みは、推奨されなくなりました。 "$var"/"{$var}" や "{${expr}}" 形式をそれぞれ使ってください。
243:デフォルトの名無しさん
22/12/25 08:44:53.24 YjenC8+L0.net
>>242
php7.4から始めていますが、警告されているのですね
危なかったです・・そのまま使い続けるところでした
244:デフォルトの名無しさん
22/12/25 08:49:53.76 8c2A2dic0.net
>>243
教本等での指定がなければ、8.1以降で学習するほうが良いです
URLリンク(www.php.net)
7.4はすでにサポート対象外であり、8.0もアクティブサポートは終わっています
8.0以降で大きく変わった箇所もあるので、教本もできれば8.0以降のものを選ぶのが良いです
245:デフォルトの名無しさん
22/12/25 10:30:36.23 YjenC8+L0.net
>>244
ありがとうございます、最新を選ぶのにこしたことは無いのですね。
使わない新機能がたくさんありそうなので初学者には7.4でも同じだと思っていました。
246:デフォルトの名無しさん
22/12/26 13:14:09.74 9taBvybYa.net
vendor配下はpushしない人多いと思いますが、例えば10年後にディスク障害で再インストールが必要になった場合に、composer install でちゃんと元通りになるもんなんでしょうか?
古いバージョンのライブラリなどはアーカイブされててinstallがコケそうな気がするんですが。
ちゃんとバックアップとっておいてそこから戻せって話ですかね?
247:デフォルトの名無しさん
22/12/26 13:21:51.28 /E6J1+u80.net
まず10年後までアップデートしないで使うのがNGかと
そもそもphpが全然変わってるはず
248:デフォルトの名無しさん
22/12/26 15:04:43.24 56qYJgfP0.net
約10年前のLaravel 4もまだリポジトリにあるし
10年くらいじゃ旧バージョンも含めて管理下にあると思ってよいと思う
バージョンが古すぎてcomposer updateが通らなくなることはあっても
composer installは通るんじゃないかな
249:デフォルトの名無しさん
22/12/26 15:25:46.38 6zrBELjK0.net
ところがどっこい通りません
250:デフォルトの名無しさん
22/12/26 15:53:40.61 RVhrOqwEa.net
vendor配下をプッシュしないのは、composer install で復元出来ることと、容量の無駄遣いってことだと思ってましたがデメリットが容量の問題だけならプッシュしておいた方が何も考えなくて良い感じですかね?
251:デフォルトの名無しさん
22/12/28 18:11:15.40 iMra0KKw0.net
配列の要素数だけを繰り返したいのですが。
これまでforeach文を利用していました。
ですが、その配列の要素を参照するだけでなく、
同じ要素数の別の配列を参照したりしています。
ちょっとforeachではないような気がします。
例えば、以下のような要素数を合わせた配列を
要素番号に沿って同時に処理します。
$color_arr
$body_arr
$subcomment_arry
配列の要素数だけを繰り返す。
という意味でもっとも適した繰り返し文は
何でしょうか?
252:デフォルトの名無しさん
22/12/28 18:16:59.77 uPVj0Dve0.net
ちょっと何言ってるかわからない
もう少し具体的なコードなりデータなりで質問すると回答があるかも
あと、配列操作に関しては php は充実しすぎてるんで、以下のリンクも参考に見てみるといい
URLリンク(www.php.net)
253:デフォルトの名無しさん
22/12/28 20:12:34.76 kuotjsyy0.net
>>251
foreachだよ。
それは構造がおかしい。
セットで使うものなら、 ["color"=>xxx, "body"=>yyy, "subcomment"=>zzz] として最初から纏めておく。
254:デフォルトの名無しさん
22/12/29 00:02:29.48 CeHhEiXD0.net
参照に使った変数をunsetし忘れると
マジで意味不明な挙動するよね
あれどうにかなんねーのかな
255:デフォルトの名無しさん
22/12/29 00:26:52.03 Au5DjajA0.net
>>254
php.netのforeachに警告として載っているケースなら、変だし糞だけど意味不明ではないね。
URLリンク(www.php.net)
foreachでスコープを作らず、変数宣言もない(=最初の使用が宣言扱い)言語なら、こうなる。
正しい解はforeachでスコープを作り、外側の変数を見えるようにすることで、CやJSやその他言語は勿論そうなってる。
言語としてのPHPは相変わらずぶっちぎりで糞なだけだね。
256:デフォルトの名無しさん
22/12/29 01:12:32.11 ptlutJts0.net
そんなにforeachで参照してる配列自体の要素を変更する?
読みづらくなるからワイはしないようにしてるけど
257:256
22/12/29 02:15:09.37 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:デフォルトの名無しさん
22/12/29 02:17:19.06 KIQEFzci0.net
×
foreach($ImageId_array as $key){
〇
foreach($ImageId_arr as $key){
259:デフォルトの名無しさん
22/12/29 04:56:37.27 L5ICo1eU0.net
それなら foreach() でよさげ
$rows = $result->fetch_assoc());
foreach($rows as $row){
echo "<p>".$row["image_id"]."</p>";
・
・
}
260:デフォルトの名無しさん
22/12/29 05:46:19.92 KLxb2KfBa.net
>>246
Ruby on Rails ではプロは、全てのモジュールを1週間毎に更新する。
もし更新しなかったら、セキュリティーホールから侵入されて、データを抜かれる
例えば、そのサイトのJava のTomcat から、パスワードが抜かれましたとか、
ブラウザから通知が来る
それで、そのサイトがモジュールを更新していない事が分かる
261:デフォルトの名無しさん
22/12/29 05:46:19.99 KLxb2KfBa.net
>>246
Ruby on Rails ではプロは、全てのモジュールを1週間毎に更新する。
もし更新しなかったら、セキュリティーホールから侵入されて、データを抜かれる
例えば、そのサイトのJava のTomcat から、パスワードが抜かれましたとか、
ブラウザから通知が来る
それで、そのサイトがモジュールを更新していない事が分かる
262:デフォルトの名無しさん
22/12/29 07:40:46.65 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
22/12/29 07:45:09.94 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)
22/12/29 08:29:06.21 Au5DjajA0.net
>>256
しないね。
だから昨今の関数型や再代入禁止とかの"正しい"プログラミング流儀に則ってれば、大して問題にならない。
とはいえPHPでは主力ループがforeachだし、
この仕様変更で動かなくなるプログラムが大量にあるとも思えないし、さっさと修正すべきだね。
まあそれ以前の比較や三項演算子を修正してる段階だから、あと10年くらいかかるか?
どうでもいいが珍しくPHP.netの糞な所を見つけた。
最近のこの手のサイトはURLの#xxxで該当部分にすぐ飛べるように<a>を散りばめているが、PHP.netはやってない。
だから260にも記事ページを頭から全部読め、のURLしか貼れなかった。
各ページを頭から全部読んでも問題ない量に抑えるアナログ的解決も素晴らしいが、<a>はやっておくべきだね。
contributeしたいぞと思ってる人はどうぞ。
265:デフォルトの名無しさん
22/12/29 08:56:07.28 Au5DjajA0.net
>>257
それを気持ち悪いと感じるのは、君が連想配列やジャグ配列に慣れてないだけだよ。
むしろ普通は、元々一体だった$rowをわざわざバラし、
再度くっつけ直すときにforeachガーとか言ってるそのコードが気持ち悪い。
明らかにやらなくて済むことをやってて文句言ってるだけだし、意味無いだろ。
266:デフォルトの名無しさん
22/12/29 12:34:23.96 KIQEFzci0.net
>>259
ありがとうございます。以下のコードですが、
$rows = $result->fetch_assoc();
これだと1レコードのカラムだけをrowsに格納することになります。
それで、
$rows = $result->fetch_all();
にしてみると、全てのレコードを取得できるのですが、
カラムがそのまま連想配列のキーとなりません。
全てのレコードのカラムを連想配列として取得するには
どう記述すればよろしいでしょうか?
267:デフォルトの名無しさん
22/12/29 12:44:04.70 aUIDokF60.net
マニュアル読んだ方が早いよ
268:デフォルトの名無しさん
22/12/29 12:55:39.42 b2cknnYm0.net
>>266
$rows = $result->fetch_all(MYSQLI_ASSOC);
269:デフォルトの名無しさん
22/12/29 13:08:54.14 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:デフォルトの名無しさん
22/12/29 13:58:39.47 qAF+l3pr0.net
>>255
そうそれ
PHP10あたりで変数宣言できるようになんねーかな
そうすればスコープとか効いてくるしバグも減るよな
271:デフォルトの名無しさん
22/12/29 14:24:41.49 Au5DjajA0.net
>>269
× 二次元配列
○ ジャグ配列(配列の中の配列)
な。PHPでは(というよりもほぼ全部の言語では)多次元配列はジャグ配列で構成するので、
ほぼ区別する必要はないが、逆に言えば、ここで引っかかってる時点で256はPHP出身ではない。
今時、連想配列を使えない言語なんてCくらいしかないので、おそらく256はC(かその程度の原始的な言語)出身。
だから添字は数字のみ、と考えてああいうコードになってる。
Cにはforeachも無いので、使い方にも悩むことになる。
で、Cの場合は多次元配列はジャグ配列以外でも実装出来る
(というよりCで多次元配列と言うとジャグ配列じゃない物を指す)ので、
256に対してその言い方だと誤解を招くかもしれないので、
この辺まで見えてたら非PHP用語使ってあげて。
272:デフォルトの名無しさん (ワッチョイ e17b-xQ0t)
22/12/29 14:57:10.69 Au5DjajA0.net
>>270
結局のところ、スクリプト言語=お手軽に使える言語=大きいのを作るのには無理がある、ってだけだな。
JSはまだマシだが、PHPではかなり無理がある。
変数宣言は、ワンライナーをやる場合は壮絶にウザイが、PHPではこの点は問題ない。
ただ、過去のコードが使えなくなるのは大問題なので、現実的にはTSのようにビルド時の対応しか出来ないだろう。
個人的には、Array. String周りの関数の引数の順や名前や挙動とかマトモに整理してくれよ、と思う。
PHPが主力言語な連中なら全部覚えればいいのだろうが、そうではないので、一々毎回引き直して引っかかって不快感半端ない。
(じゃあLaravel使えではあるが、実際わざわざ導入するほどそれらの関数を使いまくることもないので中途半端で困る)
逆に、スコープ周りとかはポンコツではあるが一貫性はあるので、それほどストレスは感じない。
273:デフォルトの名無しさん
22/12/29 18:03:16.58 9qmzIgrL0.net
phpでHTML中に<?php echo $変数名 ?>使わずに表示出来る簡易方法ってどうやるんだっけ?
274:デフォルトの名無しさん
22/12/29 19:04:00.81 qAF+l3pr0.net
>>273
<?= $unko ?>
275:デフォルトの名無しさん
22/12/29 19:04:47.25 qAF+l3pr0.net
消えた
イコールを使う
276:デフォルトの名無しさん
22/12/29 19:10:26.77 9qmzIgrL0.net
>>274
ぉぉ、ありがとう