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

■ このスレッドは過去ログ倉庫に格納されています
2020/06/05(金) 14:25:26.87ID:RQhNy1WS0
PHPに関する質問スレです

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

次スレは>>980以降
本文の1行目に以下を追加すること
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
311デフォルトの名無しさん (ワッチョイ 137c-SQv1)
垢版 |
2020/08/09(日) 23:58:38.82ID:cc0OxtMe0
>>308
ありがとうございます👍
312デフォルトの名無しさん (ワッチョイ 137c-SQv1)
垢版 |
2020/08/10(月) 00:02:18.61ID:eVQ5NROO0
>>309
あなただれ?
何に対しての投稿??
2020/08/10(月) 07:09:42.68ID:k2ud7k4K0
Ruby on Rails なら、scaffold とすれば、全自動で、CRUD 処理ができるけど
2020/08/10(月) 07:57:49.90ID:0qF8N4Z/0
文盲ばかりの会話ってこういうことを言うんだな
315デフォルトの名無しさん (ワッチョイ 1bc7-qEq0)
垢版 |
2020/08/10(月) 18:18:24.20ID:rTlZ13Bm0
?php
$hoge = "gufufufufu";
if(strpos($hoge,"g"))
{

echo "true";

}else{

echo "false";
}
?

strposの使い方なんですが、文字列が含まれているはずなのにfalseが返ってきます
これはなぜでしょうか?
316デフォルトの名無しさん (ワッチョイ 1bc7-qEq0)
垢版 |
2020/08/10(月) 18:37:47.44ID:rTlZ13Bm0
ドルつけてたごめん(´・ω・`)
2020/08/10(月) 18:38:45.68ID:BXZAjCBt0
strpos($hoge,"g")が何を返しているかを調べる
そして、その理由を考える
あとは、わかるな
318デフォルトの名無しさん (ワントンキン MM53-IKly)
垢版 |
2020/08/10(月) 20:15:14.58ID:bVpI+4NnM
PHP7を学習中の者です
8.0で仕様、書き方がガラッと変わったと聞いたのですが本当ですか?
2020/08/11(火) 10:36:06.23ID:7m/ufExf0
>>315
そりゃ0を返しているからそうなるだけ
FALSEとイコールで見付からなかったと判定するのが正解
2020/08/11(火) 10:57:15.24ID:7m/ufExf0
>>318の質問でちょっと調べてみたら
>>315のような文字列が存在しているか調べる関数がPHP8で導入されるようで
PHP8ではstr_contains()で書けるようになるらしい
まぁ、確かにこの方が存在しているだけを調べるならスマートではあるね
PHP8になってもプログラマの方はそんなに気にする必要は無いみたいな感じ
321デフォルトの名無しさん (ワッチョイ 1bc7-qEq0)
垢版 |
2020/08/11(火) 11:20:57.46ID:x3iAuc4F0
なぜphpは.ではなく、アロー演算子なんでしょうか?
2020/08/11(火) 11:27:26.60ID:1kHdySm/M
>>321
.ピリオドは文字連結にも使われるので可読性が落ちるから
323デフォルトの名無しさん (ワッチョイ 1bc7-qEq0)
垢版 |
2020/08/11(火) 12:16:30.51ID:x3iAuc4F0
なるほど
なかなか慣れなくて、、、(´・ω・`)
324デフォルトの名無しさん (ワッチョイ 1bc7-qEq0)
垢版 |
2020/08/11(火) 19:10:21.31ID:x3iAuc4F0
strposに関してですが、検索文字列にはてなが指定されていることがあります。
これは一体何をしているのでしょうか。
記号なので検索しづらく、情報が見つかりませんでした。

strpos($target,'?')
こんな感じです
2020/08/11(火) 19:20:21.18ID:gJF+/AhQ0
>>324
指定されていることがありますってなら
実際に使っているソースを見せてくれないか?

一休さんと同じで、出してくれればたちどころに捕まえて見せます、だろう
326デフォルトの名無しさん (ワッチョイ 1bc7-qEq0)
垢版 |
2020/08/11(火) 19:51:57.81ID:x3iAuc4F0
https://ideone.com/gdHAao
https://techacademy.jp/magazine/7525
すみません
このソースの4行目です
ワードプレス関連で、ページ送りに使われています
2020/08/11(火) 19:57:48.63ID:m6hVVdmE0
あんま見ないけど
対象文字列が何であっても全てワイルドカードに変換してるってことかな
2020/08/11(火) 20:22:21.18ID:RdKhLiIu0
ページのリンク形式がqueryかPATH_INFOか判定してるだけでしょ
strposの'?'に特別な機能があるわけじゃない
329デフォルトの名無しさん (ワッチョイ 1bc7-qEq0)
垢版 |
2020/08/11(火) 20:34:17.94ID:x3iAuc4F0
はてなの含まれないurlを判定してるということですね
ありがとうございました
330デフォルトの名無しさん (ササクッテロレ Spf1-pkts)
垢版 |
2020/08/13(木) 17:41:21.72ID:MXf8lpiCp
新しいpcでxamppいれてphp.ini書き換えてもphpinfoに反映されない。旧pcでもダメだった、アパッチ再起動、Loaded file一致も確認してるけどダメ。ネットで調べてもこれ以外で出てこないし、何か分かる方いますか?win10です
php.iniはインストールしてそのままc:¥xampp¥php¥php.iniにあります
2020/08/13(木) 19:24:44.14ID:4EoQL8yn0
phpinfo()で表示されているphp.iniのフルパスを確認した方がいいかも?
332デフォルトの名無しさん (ワッチョイ 4d61-QlkZ)
垢版 |
2020/08/13(木) 20:07:42.50ID:Cfghw1580
まずコマンドライン(php -iや-mなど)で確認できているか?
コマンドラインで確認出来ていて、サービス化すると確認できなくなる場合は、
一度システム再起動の必要になる(Windowsのsvchost?のめんどくさい仕様)。
333デフォルトの名無しさん (ササクッテロレ Spf1-pkts)
垢版 |
2020/08/13(木) 21:01:19.91ID:MXf8lpiCp
>>331
すみません、phpInfo()のフルパスとは何かがわかりませんが、Configuration File(php.ini)PathはC:¥windows、Loaded Configuration FileはC:¥xampp¥php¥php.iniとなっています。前者は初心者ゆえ何のことだかわかりませんが、少なくとも後者のファイルは自分で編集したファイルと一致しているはずなのですが...

>>332
シェルにてphp -i、php -m それぞれ実行しました。が、前者で表示された記載と私が編集したphp.iniの記載が一致していませんでした。

なんにしろxamppも入れたてで入門書やネット情報通りに操作してもうまくいかないので、もっと根本的な部分で誤りがあるのかもしれません。もう少し調べてみます。
2020/08/13(木) 22:49:03.97ID:4EoQL8yn0
>>333
今新規にxampp入れてみて、XAMPP Control PanelのApacheのConfigからphp.iniを選択して
memory_limitを512Mから1024Mに変えて再起動して
http://localhost/dashboard/phpinfo.php
で確認したらちゃんと変更が更新されていたので、それで設定が変えられないなら
個別にphpを入れたものとかあったりしてそれがpathの関係で邪魔しているとかもあるので
一旦全部消してxamppを入れなおせば変な事にはならないと思うが
2020/08/14(金) 00:07:59.91ID:SCMnTycc0
例えば、メモ帳のパスなら、コマンドプロンプトで確認できる。
上に表示される方が、優先される

where notepad
C:\Windows\System32\notepad.exe
C:\Windows\notepad.exe

同様に、where php とやってみれば?

環境変数パスを知らないような人は、システム環境構築運用なんて、とてもできない
336デフォルトの名無しさん (ワッチョイ 46c7-zLXa)
垢版 |
2020/08/14(金) 16:23:54.63ID:gdj6lSjH0
wordpressでfunction phpに以下を記述しました
function hogehoge(){
$hoge = "ほげ";
}

header phpでこれを呼び出しました
?php echo hogehoge().hoge;?
きちんと表示されます

?php echo hogehoge()->hoge;?
しかしこれは表示されませんが、何故でしょうか?
phpはアロー演算子をピリオドの代わりに使うそうですが、、
337デフォルトの名無しさん (アウアウカー Sa69-68fl)
垢版 |
2020/08/14(金) 17:30:27.59ID:XEPDP23xa
>>336
https://techacademy.jp/magazine/19296
-> アロー演算子はその左辺にはクラスのインスタンスを取り、
右辺には左辺のクラスが持つプロパティやメソッドを指定し
プロパティへのアクセス・メソッドの呼び出しを実行します。
338デフォルトの名無しさん (ワッチョイ 46c7-zLXa)
垢版 |
2020/08/14(金) 18:17:39.77ID:gdj6lSjH0
クラスのプロパティへのアクセス方法と、関数のプロパティへのアクセス方法gあ違うのですか?
他の言語だと同じだと思うんですが、アロー演算子の場合、インスタンス化と取り出しを一気に行うということでしょうか?
2020/08/14(金) 19:58:37.47ID:Knkd60VG0
>>336
何がしたいのか良く分からないが
function hogehoge(){
$hoge = "ほげ";
return $hoge;
}

と表示したいものをreturnしてから
echo hogehoge();
とすれば良いだけでは?
340デフォルトの名無しさん (ワッチョイ 46c7-zLXa)
垢版 |
2020/08/15(土) 06:35:37.77ID:OMYcSWb50
クラスや関数の変数にアクセスしたいのです
アロー演算子はインスタンス化も行うのでしょうか
2020/08/15(土) 09:10:22.35ID:fdFbalj40
取り合えず簡単なコード書いてみたけど
https://paiza.io/projects/e/sIu4YD7XajYVl7bDeo-EYg

クラスにする必要があるのならクラスのコードを書いてnewでインスタンスを作成して
メソッド(関数)を呼び出せばいいだけ
staticにすればインスタンスを作る必要はないのでクラス名::メソッド名で呼べる
342デフォルトの名無しさん (ワッチョイ 46c7-zLXa)
垢版 |
2020/08/15(土) 09:21:26.06ID:OMYcSWb50
アロー演算子とピリオドの機能的な違いを知りたいのですが、なんでしょうか?
クラスのメソッドを呼び出す場合はアローで、メソッドからプロパティなどを呼び出す場合はピリオドですかね。
2020/08/15(土) 11:11:58.10ID:fdFbalj40
PHPのピリオドは文字列を連結する演算子で、メソッドやプロパティもstaticでなければインスタンスから
アロー演算子でしかアクセス出来ません(勿論publicでないと呼べません)

メソッドからプロパティを呼ぶという言葉が意味不明過ぎて
勘違い?としてなら良くあるシングルトンの実装で

TestClass::getInstance()->hige();
みたいな事は可能ですがgetInstance()は自身のインスタンスを返すように作って無ければなりません
2020/08/15(土) 12:02:32.14ID:6WbTgz8j0
リクエストで外部キーを引っ張ってくるときに
ddで確認すると数字は取れてるんですが→nullになっていて関数上で使えません。
助けてください。
2020/08/15(土) 12:35:24.61ID:6WbTgz8j0
補足です。
ブレードからコントローラーに値を送る際です。
ショウメソッド的な感じで、新たに自分で作ったメソッドで
インデックスブレードからコントローラーにあるIDを送りたいんですが
ddで見ると一応数字は取れてるのに、=>nullとなっていて
そっから展開が進みません。
助けてください。
2020/08/15(土) 13:04:40.20ID:6WbTgz8j0
自決したっぽいです。
2020/08/15(土) 13:14:03.77ID:0tc6f7mC0
自決は、ちょっと待て
これを見てからにしろ

http://twitpic.com/6ro6ks
348デフォルトの名無しさん (ワッチョイ 46c7-zLXa)
垢版 |
2020/08/15(土) 16:54:55.83ID:OMYcSWb50
>>343
よくわからないですが、一旦飲み込みますです
2020/08/15(土) 17:45:17.35ID:z+dvr5Wj0
id year
1 2003
2 2004
3 2005
4 2006
5 2007
6 2008
7 2009


みたいなテーブルがあるんですが
find($id)でidで探すことは可能なんですが
find($year)で例えば2007で検索しようとするとnullになってしまいます。
yearカラムのデータはstringだったのでintegerに変えたりしましたが解決しません。
どうすればよろしいでしょうか。。
2020/08/15(土) 18:39:34.17ID:fdFbalj40
>>349
Laravelのeloquentでの話とします
find()はidを検索するものなので
yearを検索するなら
where('year', $year)->first()
と書きましょう
2020/08/15(土) 18:47:04.37ID:z+dvr5Wj0
>>350
早速ありがとうございます!!
ご指摘の通りやらせていただいたところ解決致しました(TT)
whereも気になってググってみてはいたんですが使い方がイマイチわからず、、
本当に助かりました。
352デフォルトの名無しさん (ワッチョイ 46c7-zLXa)
垢版 |
2020/08/17(月) 04:54:24.89ID:nU1LGxzf0
https://ideone.com/4IX092
htmlタグはすべてphp内に書くべきなんでしょうか?
どちらの書き方がいいですか?
353デフォルトの名無しさん (ワッチョイ 46c7-zLXa)
垢版 |
2020/08/17(月) 05:11:52.46ID:nU1LGxzf0
?php
$tag = "<p>"{0}"</p>";

echo $tag.format("hoge");


formatなのですが、これで波括弧がunexpectedになるのは何故でしょうか?
354デフォルトの名無しさん (ワッチョイ 46c7-zLXa)
垢版 |
2020/08/17(月) 05:12:19.85ID:nU1LGxzf0
失礼 これでした
$tag = "<p>".{0}."</p>";
2020/08/17(月) 07:39:28.83ID:9mJqNW620
>>352
Ruby では、ERB という埋め込みテンプレートエンジンがあって、
HTML ファイル内に、Ruby のコードを埋め込める

<% 式 %> では、表示せず、単に式を実行するだけ。
<%= 式 %> では、式を実行して、その結果を表示する

<ul>
<% [ 1, 2, 3 ].each do |num| %>
<li><b><%= num %></b></li>
<% end %>
</ul>

結果
<ul>
<li><b>1</b></li>
<li><b>2</b></li>
<li><b>3</b></li>
</ul>
356デフォルトの名無しさん (ワッチョイ 46c7-zLXa)
垢版 |
2020/08/17(月) 08:44:55.76ID:nU1LGxzf0
いえ、phpです
2020/08/17(月) 10:02:01.39ID:9mJqNW620
できる限り、Ruby に似せて書けばよい

その方が、可読性が高い
2020/08/17(月) 10:16:02.28ID:R6L6Ndbb0
>>353
どこの言語からやってきたのか分かりませんが・・・
PHPではsprintf()か変数展開で可能
$hoge = 'hoge';
echo sprintf('<p>%s</p>', $hoge);
または
$hoge = 'hoge';
echo "<p>$hoge</p>";
359デフォルトの名無しさん (ワッチョイ 46c7-zLXa)
垢版 |
2020/08/17(月) 10:31:15.34ID:nU1LGxzf0
pythonと勘違いしてました、、
360デフォルトの名無しさん (ワッチョイ 46c7-zLXa)
垢版 |
2020/08/17(月) 10:46:06.64ID:nU1LGxzf0
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Query
wp queryというのは関数ではなく、クラスでしょうか?
関数リファレンスとなっていますが、、、
2020/08/17(月) 11:36:05.01ID:p+skW/fDM
>>352
どちらも用途によって使い分ける
テンプレートに宛字する時は埋め込みを使うし
データベースから引っ張ってきたらテーブルタグはジェネレートで生成するから
362デフォルトの名無しさん (ワッチョイ 46c7-zLXa)
垢版 |
2020/08/17(月) 16:27:11.96ID:nU1LGxzf0
>>361
では、基本的には埋め込みはあまり使わない感じですよね
363デフォルトの名無しさん (ワッチョイ c261-QlkZ)
垢版 |
2020/08/17(月) 23:13:09.81ID:VzEaSA8o0
いやいや、PHPはHTMLのテンプレートから発展した言語だから。
2020/08/17(月) 23:39:47.68ID:9mJqNW620
最初、Ruby では、
Rubyで、文字列のHTML 片を作っていた

これがあまりにも面倒なので、考えを逆転させて、
HTML内で、Rubyのコード片を実行するようになった

それが、この2つの表記
<% 式 %>, <%= 式 %>

これが、ERB という、Rubyの埋め込みテンプレートエンジン。
ちなみに、あらゆる種類のファイルに、Rubyのコード片を埋め込める

a.html.erb, b.js.erb など
2020/08/18(火) 00:28:03.33ID:3tEZ7IxF0
埋め込みは当たり前のように遣ってたな
2020/08/18(火) 01:44:22.07ID:IZwRntbAM
phpのスレでRubyの勧誘するのってなんなの?
2020/08/18(火) 07:02:13.19ID:Fdm1HnVu0
>>366
この板に住み着いた壊れたボットだよ
言葉は通じないからスルーするしかない
2020/08/18(火) 17:31:30.36ID:IdLI5hpvr
>>364
Rubyすげぇ、、、phpじゃできないもんな
369デフォルトの名無しさん (ブーイモ MM0f-qjQY)
垢版 |
2020/08/19(水) 03:15:55.98ID:lmPqEok8M
設定やDBへのログインパスなどを記したインクルードファイルの拡張子は何がオススメですか?慣例とかありますか?
2020/08/19(水) 04:01:54.62ID:832DQeBHa
拡張子は変えないでいいんじゃね
2020/08/19(水) 07:40:21.79ID:Mw6y6ZKQ0
>>366
Rubyが過疎で話し相手がいないんだろう
2020/08/19(水) 10:39:56.60ID:Jv991dcL0
拡張子を.inc とかにするとソースコードが丸見えになることがあるとかないとか
2020/08/19(水) 12:14:24.52ID:hsLGYVPM0
OS上の安全な所に保存して、中身はparse_ini_file使って取得してる
2020/08/19(水) 21:48:15.08ID:EjRsdu110
簡単なものでもLaravelなどのフレームワークを用いた方が何かと便利だとは思う
フレームワークなら設定用のファイルなども用意されていて、Laravelの場合は
プロジェクトのルートに.envファイルがありそこにDBの接続情報など書いたりする
2020/08/22(土) 05:03:03.61ID:iyOM14R/0
function isIe()
{
$userAgent = $_SERVER['HTTP_USER_AGENT'];
if (strstr($userAgent, 'Trident') || strstr($userAgent, 'MSIE')) {
return true;
}
return false;
}

IEかどうかチェックする関数があるのですが、
特有の文字列があれば真を返すのはわかるのですが、その後に偽を返してしまいそうなのですが、
phpはreturnがあれば強制的にそこで関数が終わると考えて良いのでしょうか?
2020/08/22(土) 06:45:18.27ID:6Z2EqbSN0
>>375
リファレンスを読まない理由を教えてください
2020/08/22(土) 07:43:46.74ID:iyOM14R/0
>>376
https://www.php.net/manual/ja/language.references.return.php
ここを読んで見ましたが、リファレンスを返すというのがわからない状態です
2020/08/22(土) 10:29:48.91ID:tZBSf8Cz0
>>375
その通り。
phpはreturnがあれば強制的にそこで関数が終わると考えて良い。

>>377 のリファレンスは、「参照」という機能であり、
>>376 のリファレンスは、「言語の説明書(マニュアル)」という意味でたぶん使われている。
意味が違う別のものだから勘違いしない方がいい。
2020/08/22(土) 17:02:25.49ID:iyOM14R/0
>>378
ありがとうございます。
そこで終わるのですね、やっと真偽がわかるようになってきたので、
リファレンスという言葉が出てきて混乱しました。
2020/08/24(月) 06:48:39.71ID:C1uB6ZQy0
ググれば分かることを人に聞くのは
本人のためにならないんだよな
そこ、プログラマの基本的な資質だから
安易に答えるのもどうかと思うし
381デフォルトの名無しさん (ワッチョイ ffc7-KCZZ)
垢版 |
2020/08/25(火) 20:26:57.46ID:khngmmlE0
https://on-ze.com/archives/1615
rssの取得にライブラリは必要なんですか?
rss-phpを使用している場合が多いですが、上では必要ないですね
2020/08/26(水) 02:37:14.50ID:BpaQECb00
Ruby では、RSS ライブラリを使う

RSS Parserは、RSS 0.9x/1.0/2.0, Atom 1.0 をサポートしていますが,RSS 0.90 はサポートしていない

独自では、バージョン判定・XML 整形式の判定など、作れない
383デフォルトの名無しさん (ワッチョイ 86c7-Xbxe)
垢版 |
2020/08/26(水) 05:57:56.26ID:rxHVxy4B0
rubyではなくです
384デフォルトの名無しさん (ワッチョイ 86c7-Xbxe)
垢版 |
2020/08/26(水) 10:56:12.28ID:rxHVxy4B0
curlとsimple xmlの違いはなんでしょうか?
rss取得が目的です。
385デフォルトの名無しさん (ワッチョイ 86c7-Xbxe)
垢版 |
2020/08/26(水) 11:28:22.15ID:rxHVxy4B0
ちがった
file get contentsとcurlの違いす
2020/08/26(水) 11:32:21.96ID:V3GgHeuL0
まず、処理の切り分けをするべき

1. rssを取得する
2. 取得したrssを解析してオブジェクトなり配列なりを返す

1だけなら、file_get_contents()なりcURLなり使えばいい

simplexml_load_fileは、1と2を同時にやってくれる
そんだけ

>>381
外部のライブラリは必須ではない
ライブラリを使った方がより直感的に書けたり標準関数にはない機能があったりする事もあるってだけ
プログラムの書き方は1つじゃない
387デフォルトの名無しさん (ワッチョイ 86c7-Xbxe)
垢版 |
2020/08/26(水) 12:10:42.02ID:rxHVxy4B0
simplexml_load_fileは1と2を同時にやるということですが、file_get_contentsとセットで使われていますので、1はfile_get_contents、2はsimplexml_load_fileということではないのですか?
2020/08/26(水) 12:35:09.11ID:BpaQECb00
>>384-385
普通、Ruby でスクレイピングするなら、

require 'open-uri'
require 'nokogiri'

url = 'http://www.example.com/' # @
doc = Nokogiri::HTML( open( url ) ) # @

elements = doc.css( "h1" )
puts elements.first.content #=> Example Domain

上の@ の2行を、下のように、
curl という、OS の外部コマンドを呼んでも、HTML を取得できるというだけ

html = `curl http://www.example.com/`
doc = Nokogiri::HTML( html )
2020/08/26(水) 13:20:32.20ID:V3GgHeuL0
>>387
せめてPHPマニュアルぐらいは読もう
https://www.php.net/manual/ja/function.simplexml-load-file.php

simplexml_load_file()はURLとファイルパスの両方を受け付ける(PHPにはこういう関数が多い)
つまり、

A
1. file_get_contents()で指定URLの内容を取得
2. 1をファイルに保存
3. 2をsimplexml_load_file()でパース

としなくても

B
1. simplexml_load_file()でURLを直接パース

ってできる。


じゃぁなぜわざわざAみたいな書き方もするかっていうと、
例えば取得したrssをローカルに保存してそれをキャッシュとして利用すれば
URLを何度も取得する負荷を減らせるから

この「なぜ」そういう書き方をするか?って事が理解できてないのは、プログラマとしては失格だなぁ
390デフォルトの名無しさん (ワッチョイ 86c7-Xbxe)
垢版 |
2020/08/26(水) 13:42:33.83ID:rxHVxy4B0
変数にするってことですよね
それはもちろん理解できます

マニュアルはむずくてなかなか、、、
2020/08/26(水) 14:05:12.50ID:V3GgHeuL0
>>390
> 変数にするってことですよね

違うw
よく読もうw
392デフォルトの名無しさん (ワッチョイ 86c7-Xbxe)
垢版 |
2020/08/26(水) 14:30:59.58ID:rxHVxy4B0
サーバのキャッシュする場所に置いておくってことですかね
2020/08/26(水) 14:48:59.13ID:V3GgHeuL0
そんな感じ
PHPなんかスクリプト言語ですぐに書いて実行できるんだからさ、
四の五の悩んでる暇あったら実際にコードを書けばいいんだよ

$url = 'https://news.yahoo.co.jp/rss/topics/it.xml';

// file_get_contents()で取得しファイルに保存してからパースする場合
$data = file_get_contents($url);
file_put_contents('test.xml', $data);
$xml = simplexml_load_file('test.xml');
print_r($xml);
exit;

// URLから直接パースする場合
$xml = simplexml_load_file($url);
print_r($xml);
exit;

// おまけ
$data = file_get_contents($url);
$xml = simplexml_load_string($data);
print_r($xml);
exit;


結果はどれも一緒だ
394デフォルトの名無しさん (ワッチョイ 86c7-Xbxe)
垢版 |
2020/08/26(水) 15:15:38.88ID:rxHVxy4B0
あい
2020/08/26(水) 20:24:33.92ID:d0L9I3XQ0
ipアドレスが該当する1つであれば上手くいっていたのですが、
2つのうち、どちらかという場合がうまくうごきません。
||を使うとは思うのですが、どう考えれば良いのでしょうか?

if($_SERVER["REMOTE_ADDR"] === ("1.2.3.4" || "5.6.7.8") ) {
echo "hoge";
}
2020/08/26(水) 20:33:58.21ID:pmFEpI1gd
>>395
$remote = $_SERVER["REMOTE_ADDR"];
if ($remote == "1.2.3.4" || $remote == "5.6.7.8") {
echo "hoge";
}
2020/08/26(水) 21:11:30.29ID:d0L9I3XQ0
>>396
ありがとうございます、うまく2箇所にて挙動が変わりました。

変数と評価することを1つの単位として、それを「または」するのですね。
グローバル変数を、ユーザ変数にしてからifをしていますが、
グローバル変数だけを使えば、$remoteを作らなくて済むと思いますが、
なにかしらセキュリティ的にやってはいけない行為なのでしょうか?
398デフォルトの名無しさん (ワッチョイ 86c7-Xbxe)
垢版 |
2020/08/26(水) 22:17:39.89ID:rxHVxy4B0
クラウドワークスで仕事取る乗って相当ハードル高いですよね
2020/08/26(水) 22:40:58.29ID:DBhvvIDx0
>>397
別に代入する必要は無いけど
長ったらしいものを何箇所にも書く場合には良く使いますね
こういう判定の場合は、別の書き方としてswitch文でやるのもアリかと
2020/08/27(木) 08:39:43.14ID:ILlGTI8s0
>>399
いやin_arrayを使う。
2020/08/27(木) 10:22:19.17ID:kvOAK9FE0
>>397
$_SERVERは環境変数といって環境によって
・定義されないことがある
・値が汚染されてることがある

ので注意

例えば $_SERVER['REMOTE_ADDR'] は、CLI環境では未定義になる

例えば $_SERVER['HTTP_USER_AGENT'](ユーザーエージェント) はクライアントの「自称」なのだから、
未定義の事もあるし、もし$_SERVER['HTTP_USER_AGENT']をそのまま表示してしまうプログラムだとXSS脆弱性にもなる
2020/08/27(木) 10:24:09.30ID:kvOAK9FE0
で、>>401を踏まえてもし俺が書くとしたらこう書くな

// 拒否するIP => メモ
$deny = [
'104.18.231.150' => '5ch.net',
'176.10.99.200' => 'tor(accessnow.org)',
'23.20.100.217' => 'HTTP Proxy(amazonaws.com)',
];

$ip = getenv('REMOTE_ADDR');

if (isset($deny[$ip])) {
die("{$ip}は拒否");
}

こんな風にしておけば、拒否するIPが増えたり減ったりしても
$deny の値を書き換えるだけで済むので
※もちろん$denyは定数にしても可
2020/08/27(木) 10:31:16.12ID:kvOAK9FE0
>>398
「慣れ」だと思うけど、少なくとも「プログラムを書けるだけ」では仕事は取れないのは間違いない

客の要望を汲み取って「提案」できる必要があるし、(根拠のある)要件定義書や見積書だって書けないと話にならない
※これにはこれぐらいのコストが発生するよと、客が納得できるよう説明する能力

そもそも客は実績を見て相手を選ぶのだから、実績のない人間なんか相手にされない
スクールの広告とかで、未経験でもプログラムを学んで副業で儲けよう!みたいなのがあるけど、
頭にお花畑が咲いてるとしか思えないw
2020/08/27(木) 10:37:18.26ID:ILlGTI8s0
値側使わないなら無駄

$deny = [
'104.18.231.150',
'176.10.99.200',
'23.20.100.217',
];

$ip = getenv('REMOTE_ADDR');

if (in_array($ip,$deny)) {
throw new Exception($ip . 'は拒否');
}

こうだな。

>例えば $_SERVER['REMOTE_ADDR'] は、CLI環境では未定義になる
これを意識するならそもそも
php_sapi_nameでチェックロジックを組み込んでこの処理に行かないようにする。
405デフォルトの名無しさん (アウアウウー Sa85-Uas5)
垢版 |
2020/08/27(木) 10:46:40.57ID:Hzz3eOdRa
テキスト処理のアプローチって、正規化、ラインで読み込んでデリミタで行列処理しかありませんか?
いつもいつも泥臭いなと思うんです。
僕が知らないだけかもと思い質問しました。
2020/08/27(木) 10:55:40.76ID:kvOAK9FE0
>>405
具体的なコードを提示して
2020/08/27(木) 10:57:34.30ID:ILlGTI8s0
>>405
そのやる処理による。
2020/08/27(木) 11:53:13.05ID:UMnMnU6h0
データは、JSON, YAML, CSV とか

一方、単なるテキストは、行区切り
409デフォルトの名無しさん (ワッチョイ 86c7-Xbxe)
垢版 |
2020/08/27(木) 12:17:35.39ID:ygBOOYPT0
>>403
実務経験ないと厳しいよね
410デフォルトの名無しさん (ワッチョイ 86c7-Xbxe)
垢版 |
2020/08/28(金) 19:34:15.71ID:7ps1QWM60
$feed = simplexml_load_string($str);
echo $feed->channel->title . "<br />";

ブログのタイトルを取ってくるときにchannelという物を使いますが、これはプロパティということでいいんですか?gettypeではobjectということです。

またリファレンスが見つからないのですが、どこにあるでしょうか?
ximplexml_loadのページにはなかったです
2020/08/28(金) 20:00:06.86ID:Rmnqhg9P0
この前の話の続きだろうからRSSで何かしたいのでしょうけど
https://www.php.net/manual/ja/function.simplexml-load-file.php
ちゃんと読んでます?
返り値はSimpleXMLElementクラスのオブジェクトを返しますとちゃんと書いてありますよね?
あくまでXMLをパースする為に存在するものなので
返された結果をprint_r()などで表示すれば内容がどうなっているかは確認出来る訳で
質問内容的にはRSSを取得して何かしたいのは分かりますが、それはRSSを理解した上で
更にPHPでどういう風にコードを書くかという話で順序が違うと思う訳ですが・・・
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況