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

■ このスレッドは過去ログ倉庫に格納されています
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
2019/12/22(日) 01:24:13.80ID:buP4BnNs0
GoやRustやC#でもFFI書けるよ
628デフォルトの名無しさん (ワッチョイ 775f-B9Tc)
垢版 |
2019/12/23(月) 00:53:27.33ID:2qWBTAwK0
>>626
書くのが必ずしも許されるわけではないから難しいよね。
俺はライブラリ系は全部書き直した。
これじゃメンテナンスできないですーっていう方々を炙り出すために
629デフォルトの名無しさん (ワッチョイ 9f07-Rp4x)
垢版 |
2019/12/24(火) 17:13:26.50ID:oJYJsXMm0
exec関数でサーバのコマンドを実行できますが、
ソフトウェアをインストールするときなどに表示される
「キーボードのyを押してインストールを進める」
みたいな処理もexecで行うことができるのでしょうか?
もしできる場合、どのように書けばいいか教えて下さい
2019/12/24(火) 17:23:02.72ID:4UlhXCkA0
>>629
バッチで動かすことを想定しているプログラムには
例えば起動オプションに "-y" が用意されてあって
キーボード応答全てにyが打たれたとして動作するものもある
動かしたいプログラム次第だと思うが
こういうものなら動かせるかもしれない

そうで無い場合は、プログラムからの応答を判断しながら
動かさないと、想定出来ない問題が起きかねないのでは
2019/12/24(火) 17:57:31.74ID:SDqv4krt0
>>629
yes
632デフォルトの名無しさん (ワッチョイ 775f-B9Tc)
垢版 |
2019/12/25(水) 00:49:42.46ID:oMbV4Iar0
>>629
yesかecho yesをpipeで渡す
2019/12/25(水) 12:42:04.67ID:ZI663GBY0
漏れは、自分のPC で、
Windows10, WSL, Ubuntu16.04 で、全パッケージの更新をするのに、

Ruby で、sudo のパスワードの入力とか、
apt-get の-y で、yes の入力もやってる

#!/usr/bin/ruby
# frozen_string_literal: true

# 全パッケージの更新

# sudo のパスワードを自動入力する
# echo <your_password> | sudo -S <your_command>

puts `echo パスワード | sudo -S apt-get update`

puts `sudo apt-get upgrade -yV`
2019/12/25(水) 23:05:26.90ID:+4x8Vudl0
>>630-633
適当なコマンドですが、
exec("create database -y hogehoge");

みたいに-yをつけると
「hogehogeデータベースを絶対作成する」みたいな事ができるのでしょうか?

>>632さんが書いてるのは
exec("echo yes");

ということなのでしょうか?
2019/12/25(水) 23:45:00.44ID:TuXJcfTM0
yesっていうコマンドがあるんだよ
exec('yes | create database hogehoge');

-yオプション的なのををサポートしてるかどうかはそのコマンドのマニュアル読んで
2019/12/26(木) 00:03:12.37ID:QbBK51Lf0
すみません。公式のマニュアルを見てみたのですが、
yesに関しての記述が見当たらなかったんです。
>>635のように書くのだと理解します。ありがとうございました。
2019/12/26(木) 06:40:21.95ID:kwmHN0pwd
yesはLinuxのコマンド。
2019/12/26(木) 07:36:02.91ID:G8FNklXra
>>637
エイプリルフールかと思ったら本当にあってビビった
コマンド打ってウイルスに感染したような挙動になって焦ったわ
2019/12/27(金) 00:29:11.90ID:TcF0JrOBr
PHPの環境構築ってWindowsの場合どの方法が主流なのかね

検索するとXAMPPの記事ばかり出てくるけど手軽な一方環境を汚すんで微妙な気がするんだが
2019/12/27(金) 00:38:09.97ID:Jp3jdKct0
Windows自体が汚れてるんだから気にしないの
2019/12/27(金) 00:44:39.91ID:EEOcwadQ0
自分なら、仮想環境を構築してその中でやりたい
642デフォルトの名無しさん (ワッチョイ a601-LIdJ)
垢版 |
2019/12/27(金) 08:17:09.42ID:4FJgkgoK0
PHPの勉強が目的ならXAMPPやMANPでいいと思うけどな
仮想環境やらの設定や不具合で時間食ってたら元も子もない
2019/12/27(金) 10:56:24.24ID:EEOcwadQ0
その程度の知識は何れにしろ必要だろう
644デフォルトの名無しさん (ワントンキン MMac-HCDf)
垢版 |
2019/12/27(金) 11:51:48.01ID:54ZzlDGdM
初心者にいきなり全CUI操作を強いるのはどうかと思う
VirtualBoxあたりでUbuntu入れて環境構築させればいいんじゃない
645デフォルトの名無しさん (ワッチョイ 468c-1wr4)
垢版 |
2020/01/02(木) 18:10:26.21ID:NsD5otxd0
PHPを使ったサーバーサイドってどんなことしてるの?
ここはSQLの内部データ表示したいからhtmlの中にdivタグ付けて関数呼び出してってそんな感じでやってるの?
2020/01/03(金) 20:24:16.45ID:9LIAX5hH0
>>645
別にPHPに限ったことじゃないけどサーバサイドでやることはだいたいそんな感じ
647デフォルトの名無しさん (ワッチョイ 468c-1wr4)
垢版 |
2020/01/04(土) 03:43:48.23ID:5wVpG03+0
やっぱそうなんか、SQLのログイン設定とかばれるからそうやって防いだり動的処理するんか
2020/01/04(土) 05:01:29.27ID:E/0LWI5y0
何言ってんだかわかんない
649デフォルトの名無しさん (ワッチョイ fe89-GYAN)
垢版 |
2020/01/04(土) 23:05:43.91ID:9+8EnAbP0
質問です。
環境はMacでXAMPPを使っています。
エラーが出てググったところgdの「JPG Support」がないからだというところまでわかりました。
ですがサポートのさせ方がわかりません。
どうするといいのでしょうか?
2020/01/04(土) 23:16:35.72ID:9cRomv9Ua
php7環境でpear mailを練習していたところ、

Parse error: syntax error, unexpected 'new' (T_NEW) in /usr/share/pear/Mail/smtp.php on line 349
が出るので調べてみると非対応のようですが、

何に置き換えるのが一般的なのでしょうか?
mail、mb_send_mailでも良いのでしょうか?
これらがあるのにpear mailが利用されていたのでしょうか?
2020/01/04(土) 23:34:51.34ID:9cRomv9Ua
SMTP.phpの該当箇所349行目を見ると
$this->_smtp = &new Net_SMTP($this->host,
とあったので、&new を new に置き換えると
エラーは出なくなりましたが。

さすがにソースを変えるのは良くないと思いますが、
php7用のpear mailがremiから提供されているのでしょうか?
他の方法を検討するべきでしょうか?
2020/01/04(土) 23:54:26.28ID:LM3WrULI0
>>649
macは知らんけど一般的にはphp.iniでgdのextensionを有効にするだけでいい
ていうか自己判断してるけどエラー内容を書かないことには答えようがないな

>>651
pearとかPHP7時代にそぐわないレガシーだよ
PHPMailerでも使えばいいんじゃない?
653デフォルトの名無しさん (ワッチョイ fe89-GYAN)
垢版 |
2020/01/05(日) 00:03:45.20ID:ftX4LjxF0
>>652
エラーは
Fatal error: Uncaught Error: Call to undefined function imagecreatefromjpeg() in /Applications/XAMPP/xamppfiles/htdocs/php/sample2.php:5 Stack trace: #0 {main} thrown
です。
ググったところgdの「JPG Support」がないとのことで、phpinfoで調べたところ実際にありませんでした。
extension=php_gd2.dllのコメント化も解除し、再起動しましたがまだエラーになります。
654デフォルトの名無しさん (ワッチョイ 468c-1wr4)
垢版 |
2020/01/05(日) 00:08:18.80ID:mNtiIqp60
https://ideone.com/VwTTUI
こういう書き方って良くないん?こういう手があったかって思ったが見た目が悪いことに気付いた
2020/01/05(日) 01:17:40.44ID:qDQaoTCH0
>>653
XAMPP7.4x使ってる?
確かにPHP7.4(XAMPP7.4x)でGDのJPEG Supportがないって報告出てるね
7.4からGDのconfigureオプションが変更されてるようだけど
旧オプションのままコンパイルしようとして無視されてるのかも
そのうち対応してくれると思うけど
自力でどうにかできないならPHP7.3(xampp7.3x)以下を使ってみると解決するかも?

>>654
https://ideone.com/ZwhEN8
まあフレームワーク使いましょう
656デフォルトの名無しさん (ワッチョイ 468c-1wr4)
垢版 |
2020/01/05(日) 01:19:29.11ID:mNtiIqp60
>>655
やっぱそれが正しい書き方なんだな、悩んでたがスッキリしたわ
2020/01/05(日) 02:02:10.08ID:sULWpEk60
プログラマー脳は前者、WEB屋は後者って感じ
658デフォルトの名無しさん (ワッチョイ fe89-GYAN)
垢版 |
2020/01/05(日) 09:10:52.06ID:ftX4LjxF0
>>655
データ移して、アンインストールして7.3.13にダウングレードしたところありました。
ありがとうございます。
2020/01/05(日) 10:23:42.03ID:GvoILGxb0
>>655
foreach のブロックをカッコじゃなく endforeach にするのはなんで?
カッコの対応を取ってくれるテキストエディタは多いのにそういうアシストも受けられなくなるし、タイプ量も増えるし、
あんまりやらんとは思うがループを foreach から for に変更するなんてのも面倒だし、何がよくてそうするのかさっぱり分からん。
2020/01/05(日) 13:29:38.07ID:qDQaoTCH0
>>659
テンプレートエンジンだとだいたいそういう風に書くと思うけど
2020/01/05(日) 14:35:14.19ID:1zEvaEuJM
>>660
理由になってなくね?
他のテンプテートエンジンと雰囲気を合わせると何かいいことある?
2020/01/05(日) 14:39:22.34ID:qDQaoTCH0
そんな下らないとこで噛みつかれるとは思いもしないんで
気の利く答えなんて持ち合わせてないでw
自分にあったスタイルで「好きにしろ」でいいんじゃないの別に
2020/01/05(日) 16:55:06.61ID:1zEvaEuJM
あぁ、ごめん
そういうスタイルで書いてるのをしばしば見るので、どんなメリットがあってそうしてるのか気になっただけだ。
単に好みの問題なのね。
664デフォルトの名無しさん (ワッチョイ c261-BfT8)
垢版 |
2020/01/05(日) 17:25:59.86ID:HEA2L3oC0
括弧だとわかりにくいから。
htmlが混じるとインデントもややこしくなるし。
665デフォルトの名無しさん (ワッチョイ 468c-1wr4)
垢版 |
2020/01/06(月) 13:02:17.22ID:udFWw96L0
個人的にはhtmlのタグのインテリセンスがかかるからスペルミス閉じミスが起きないから良いなって感じかな
2020/01/06(月) 17:09:39.10ID:RuDbGpDl0
配列なら、$his より $histories の方がしっくりくる
変に略されると読みづらい
2020/01/08(水) 02:17:03.00ID:DD+ZGKXm0
新しいサーバへの移行をしているのですが、
とりあえず動かすと「Parse error: Invalid numeric literal 」が出ます。

覚え立ての開発環境ではこんな感じです。
https://i.imgur.com/Jmw3irM.png

配列を空にして、配列が空でないならば、それぞれの「時」に対して「true, false」を入れた連想配列を作って、
現在時の「時」を$hourに入れて、それを比較して連想配列の「時」をキーにして「true」か「false」どちらかを返すということだと思いますが、
Invalid numeric literalは「使えない数字」と考えて良いのでしょうか?
php5では使えていたとは思いますが、php7では厳しくなったということでしょうか?

vscodeを覚えて時を止めてデバッグができる時に感動しました。
変数がコマ送りに変化していくことが見えるのは凄いです。
2020/01/08(水) 02:41:05.10ID:kulAlEGT0
0から始まってるのは8進数なのでphp7ではエラー
php5以下で08は0と解釈されてたはず
2020/01/08(水) 08:48:02.53ID:DD+ZGKXm0
ありとうございます。
シングルクォートを使ってキーを文字列として配列にしました。
phpって曖昧とは聞きますが、08 にだけ8進数として反応するのですね。
2020/01/08(水) 10:56:17.40ID:Bxyfcf/k0
そんなばかなー
10進数で言う0から10までを8進数で書いてみるといい(手書きでいい
2020/01/08(水) 18:23:40.37ID:DD+ZGKXm0
>>670
0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12
ですよね。
シングルクォートで文字列にしてエラーは出なくなりました。

この関数は昔誰かが書いたものですが、時によってフラグを立てる方法としてはまだ改良の余地があるのでしょうか。
2020/01/08(水) 18:37:40.91ID:Bxyfcf/k0
08と09は8進表記であり得ないからInvalid numeric literal
素直に頭文字0を削除すればいいのに
2020/01/08(水) 18:47:21.77ID:Z7OGNEnI0
>>671
そもそもなんだけど、関数の引数で $time_array が渡されたとき、その添字はどんな形式になってるの?
$hour は文字列なんだから、元々配列の添字は文字列であるべきだったように見えるけど。

それはそれとして、小さなフラグテーブルなら文字列で書く方法もあるかもね。

$timetbl = '000000000011111111111100';

return $timetbl[(int)$hour] === '1';

みたいな。
その例ではインタフェースを変更しないといけなくなるから適用しづらいだろうけど。
2020/01/08(水) 19:49:43.97ID:w19vYwgJ0
>>671
do_check_exec_time関数だけどさ
返却値が不規則ならともかく、10〜21の範囲ならtrue、それ以外はfalseで駄目なの?
引数範囲もチェックしたいなら、先頭行で行えば良いと思う
2020/01/08(水) 21:14:25.57ID:DD+ZGKXm0
レスを書くと forbiddenになったので、レスにNGワードが含まれているようです。
何がダメなんだろう・・・
レスは返したかったので画像にしました
https://i.imgur.com/XjOXs1g.jpg
2020/01/08(水) 22:18:06.43ID:zDxhP1FM0
PHPはJavaScriptなんかと違って文字連結とは演算子が別れてるから
+演算子は加算専用で数字として扱えるというか数値として扱うというのが正しい

>>667のコード見た感想としてはそこで初期値設定するか?って思ったわ
渡すべき$time_arrayの初期値としてならともかく
ちゃんとarrayのみ渡されるよう想定したほうがいいね
2020/01/08(水) 22:26:16.06ID:zDxhP1FM0
ちなみに勘違いしてなければいいけど
date関数のreturn値は文字列なんで08は正確には"08"
8進数でも他の数値的な何者かではなくただの文字列
678デフォルトの名無しさん (ワッチョイ 7fd4-ErPi)
垢版 |
2020/01/13(月) 21:12:24.20ID:KUUG8Hhj0
質問があります。もしわかる方がいましたらご教授頂きたいです。

htmlを読み込んでbodyタグの中のaタグに書かれている内容を表示させようとしています。
(このサイトを参考:https://blog.katty.in/1400

$url = 'https://haruoto.com/?page_id=11';
$html = file_get_contents($url);
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'ASCII, JIS, UTF-8, EUC-JP, SJIS');
$domDocument = new DOMDocument();
$domDocument->loadHTML($html);
$xmlString = $domDocument->saveXML();
$xmlObject = simplexml_load_string($xmlString);
$array = json_decode(json_encode($xmlObject), true);
echo $array['body']['a'];  //「コンテンツへスキップ」と表示される

上記のコードは正しく動作するのですが、URLを「https://haruoto.com/?reply=407」に変更すると正しく動作しません。
何が原因なんでしょうか?
2020/01/13(月) 21:17:58.61ID:xgMgrp400
HTMLの構造が違うんじゃねーの?

FirefoxなどのブラウザでHTMLのソースを見てみたら?
2020/01/13(月) 21:52:49.01ID:DUDFC3XS0
?reply=407の693〜697行目がコメントの中に--を含む不正な構造なのでsimplexml_load_stringが失敗してるから
681デフォルトの名無しさん (ワッチョイ 7fd4-ErPi)
垢版 |
2020/01/14(火) 00:49:39.13ID:Pp7kDtDs0
>>680
ありがとうございます!
そちらのコメント部分を修正したところ正常に動作するようになりました!
2020/01/14(火) 01:08:34.22ID:HMRlieOS0
PHPのDOMload周りは@でエラー無視が一般的だと思う

$domDocument->loadHTML($html);

@$domDocument->loadHTML($html);

>>678も自分の環境じゃWarning出まくるけどこれで結果を得られるし
?reply=407へURL書き換えたあともちゃんと結果を得られる
自分はPHPのDOM周りはいまいちなんでJavaScript側でやるかな
683デフォルトの名無しさん (ワッチョイ dff1-///2)
垢版 |
2020/01/14(火) 11:21:04.15ID:LsFOQfCc0
自分のサイトを作ることにしました。
目的は主に2つあって、なにか簡単な商売をして副業としてお金をかせぐことと、ブログみたいになにか情報発信しようかと思っています。
PHPも使います。
どこのレンタルサーバを使うのが得策でしょうか?
今後生涯サイトは使おうと思います。
684デフォルトの名無しさん (ワッチョイ 7f59-alJZ)
垢版 |
2020/01/14(火) 14:36:03.43ID:Yv2y+5Q60
ここはまんさんでもやさしくしてくれるやろか

あのな、画像検索するとある画像が大きさが5504x8256ってなってるんやが開くとちっさいんや大きさが指定してあって。アドレスバーのとこに410x618って書いてあって。しかもこいつ実際は274x410なんやで。
wysiwygとかでダメなんやろかってやってもちっさいんや。大きいのは格納されとるハズなんやろうけど初心者すぎて大きい元画像にたどりつけないんやで。

やさしい人手取り足取り教えてほしいんやでどなたか
685デフォルトの名無しさん (ワッチョイ 7f59-alJZ)
垢版 |
2020/01/14(火) 14:36:34.20ID:Yv2y+5Q60
スレチやったらごめんなさい
686683 (ワッチョイ dff1-///2)
垢版 |
2020/01/14(火) 16:42:58.46ID:LsFOQfCc0
どうですかね?
いまの時代、無料のレンタルサーバでPHP/SQLも使えるところはあるのでしょうか?
687デフォルトの名無しさん (ワッチョイ 5fda-woae)
垢版 |
2020/01/14(火) 16:49:46.95ID:HWX79XGs0
>>684
自分のサイトの話じゃなくて、他人のサイトに置いてある画像の元ファイルにどうしたらたどりつけるかって話か
ここは下らねぇ質問のスレだが自分のサイト以外の問題を持ち掛けられてもしょうもないと思います
2020/01/14(火) 16:57:43.19ID:R0T58PMv0
>>683
スレチ
レン鯖スレへ
「いまの時代、”無料のレンタルサーバでPHP/SQLも使えるところ”はあるのでしょうか?」
ダブルクォートのワードそのまんまで検索すればいいのに

>>684
スレチ
google画像検索ならimagesizeのオプション追加すればある程度絞り込めても万能じゃない
サイトまでたどり着けてるならurlを想像してアタックする
2020/01/14(火) 20:36:37.48ID:/BEaD92M0
mysql_real_escape_string($string)
を多用している手続き型のphp5環境からphp7へ移行をしていて、
mysqli_real_escape_string($link, $string)
への修正しているのですが、

htmlspecialcharsのように、エスケープ目的で多用しているコードなのですが、
データベースのリンクも引数の強制になったようですが、リンクを使うのはどういう理由なのでしょうか?

また使いどころとしては、多用せずsqlクエリを使う前に1回で済ますという感じでしょうか?
2020/01/15(水) 00:51:29.73ID:0SK8bZ/o0
>リンクを使うのはどういう理由なのでしょうか?
マニュアルに書いてるけど、
「接続の現在の文字セットを考慮して、SQL 文で使用する文字列の特殊文字をエスケープする」から。
接続が複数あって文字セットが異なる場合なんかを考慮してるのでしょう。

>多用せずsqlクエリを使う前に1回で済ますという感じでしょうか?
プリペアドステートメントで行うのが普通。
mysqliみたいなベンダー固有関数は汎用性がないのであまり使われないよ。
mysqlしか使わないならいいけど、本気で修正するなら手間も同じだしPDOでやったほうがいいと思う。
2020/01/15(水) 01:29:34.93ID:0SK8bZ/o0
>>690の答えはちょっと答えになってなかったから補足しとく

・mysql関数時代も接続(リンク)は必要っちゃ必要だったけど、省略可能な第二引数だった。
 省略した場合は、直近に使った接続になる。
・mysqli関数は省略不可能な第一引数になった。(引数の順番が変わった)

mysql関数は、接続を明示しなくていいので、
接続が複数ある場合、意図しないDBを操作するミスがおきる可能性がある。
エスケープする場合も同様、意図しないエスケープ結果になってしまう恐れがある。
そういうミスを減らすためにも、接続を明示しないといけないmysqli関数ってことなんじゃないかな多分。
2020/01/15(水) 19:33:51.69ID:OZZ+PtiC0
今まで1つの接続しかしたことが無かったので複数を接続するって考えもしなかったです。
たしかにそれだと文字コードが違う場合も想定すると、明示したほうが良いですよね。
古すぎてpdoに書き直すのは難しいので、とりあえず地味に書き換えていきます。

しかしmysqli_real_escape_stringや、mysqli_queryとか
引数の強制が増えたり、引数が入れ替わったり、pdoを使っていない古いコードは修正に振り回されることになりますよね。


プリペアドステートメントは「?」とかコードの行数が一気に増えて難しそうなのですが、
クエリに直接変数を書いて、real_escapeすればと思ってしまうのですがやはりデメリットがあるのでしょうか。
新規で練習するときはプリペアドステートメントを使おうと思っています。
2020/01/16(木) 04:41:59.97ID:WGM+n45y0
>>692
具体的なコードは書かないけど、
real_escape_stringでは攻撃対策としては不十分だから、プリペアドステートメントは必須。
(PDO使う場合、PDO::ATTR_EMULATE_PREPARESが1で、PDO側でエミュレートする場合、攻撃が成立する場合があるのは注意)
型を調べたり、想定してるフォーマットに沿うものか検証(バリデーション)して、
受け渡された変数が安全なデータであることが保証されてればいいけど、それこそコード長くなるし、
プリペアドステートメントでやったほうが、確実だし簡単だと思う。
2020/01/16(木) 09:20:07.39ID:yWLTyI800
>>692
あちこちに適用するライブラリでもなくいろんなDBに対応するわけでもないんだろうから、無理して PDO に置き換える必要は無いんじゃね。
プリペアドステートメントのいいところはプレースホルダが使えることもあるけど、プリペア済みのオブジェクトを何度も使い回すことによってSQLのパースを省略してパフォーマンスを上げられるって利点がある。
でも使い回しなんてせず同じSQLでも使う度にプリペアするようなコードが多いだろうし、バッチならともかくwebの1リクエストでどんだけ使い回せるの?って話もある。

それに加えて LIKE とか可変個の IN とか面倒だから、プリペアドステートメントに拘る必要は無いというのが俺の考えだな。
新規じゃないなら特に。
2020/01/16(木) 14:43:23.92ID:B1/MNbmAM
pdoに置き換えは無理してってほど大袈裟なものじゃないでしょ
手続きが用意されてないからオブジェクトになるけど
オブジェクト型のmysqliと比較してコードは似たりよったりだ
新規はpdoにしたほうがいい
2020/01/16(木) 14:49:59.78ID:7uXyXPAQ0
どこかの機会で書き替えて行けば良いよ
将来はサポートされなくなる訳だし
697デフォルトの名無しさん (ワッチョイ 8d07-muX5)
垢版 |
2020/01/16(木) 16:00:44.94ID:NkO/oANm0
クラス内のメソッドについて、
似たような処理を行うもの(少し変更している)のがあるとします。
たとえば「redirect」というメソッドだったとして、
少し変更したのを「_redirect」みたいにして、親クラスに用意しているのですが
こういう書き方・使い方はまずいでしょうか?
beforeRedirectとかcustomRedirectみたいに変えた方がいいでしょうか?
2020/01/16(木) 16:10:34.16ID:QgmPcxAO0
extendsで新しいクラスにすることと比べると
悩みどころですね
2020/01/16(木) 16:42:45.37ID:7uXyXPAQ0
将来メンテする人にとって無用な負担をかけない方法を選択しよう
使うユーザーができるだけ負担を感じない道を選んだ方がいい
2020/01/16(木) 17:54:13.09ID:WGM+n45y0
>>697
どう変更してるのかわからないけど、
引数の数や型が違うならオーバーロードにする手もある。
ただしPHPにはない機能なので、可変引数を使ったり工夫が必要になるけど。
あとは柔軟に引数でモード選ぶとか、言ってるように名前変えるとかでいいと思う。
701デフォルトの名無しさん (ワッチョイ 8261-s5Rz)
垢版 |
2020/01/16(木) 18:12:11.14ID:9x78fuLW0
共通部分の処理は親側で全部行うようにして、差分だけを子側に委譲する(abstractメソッド)。
2020/01/16(木) 20:22:40.39ID:HZuE80s1a
>>693-694
今回は古い部分を直すだけで必死なのでreal_escapeを使いますが、
たしかにプリペアドステートメントが
エスケープも兼ねるので新規では使いたいです。

古いコードなので、闇雲に同じクエリを投げているので、そういう意味ではプリペアドステートメントの利点を受けられるかもしれません
2020/01/17(金) 17:10:14.42ID:HDLfgQuO0
>>699-700
できれば他の人が見てもわかる方法にしたいのですが、

親クラス
class Main {
 function redirect($url){
  header('Location:' . $url);
 }

 function _redirect($url){
  〜$urlになにかする処理〜
  $this->redirect($url);
 }
}

みたいなことをしていまして、これだとわかりづらいですよね?
※redirectになにかする処理を書くのは別とします。

なので別のメソッド名にした方がいいのかな?と思うものの、
beforeRedirectとかcustomRedirectとかにするのは変かな?
と感じており、質問した次第です。
2020/01/17(金) 18:45:49.52ID:vvJW2PiAM
コールバックでいいんじゃ
2020/01/17(金) 22:12:48.18ID:9k6vGiaj0
>>703
API見て使い方が理解出来ん
クラス利用者はredirectと_redirectのどっちをコールする想定なんだ?

あとbeforeRedirectは名前的にイベントハンドラっぽく思える
2020/01/20(月) 10:56:16.47ID:UzBq59x80
>>705
通常はredirectの方で、変わったことがしたい(ページ推移を分岐させたい等)時は
_redirectの方を使うというイメージです。

そのため、「このリダイレクトは、カスタマイズしたリダイレクトですよ」
ということを説明するためのメソッドであればと思うのですが、
「_redirect」のような名前は、間違いやすいし、
beforeRedirectの場合はイベントハンドラっぽいので、悩んでいる次第です。
2020/01/20(月) 11:28:18.41ID:UzBq59x80
すみません、自己レスですがやっぱり変なので

class Main {
 function beforeRedirect($url){
  〜$urlになにかする処理〜
  return $url;
 }

 function redirect($url){
  $url = $this->beforeRedirect($url);
  header('Location:' . $url);
 }
}

みたいな設計にし直します。
2020/01/20(月) 19:21:08.15ID:OvG49n5/0
ネーミングの問題だと思うけど、アンダーバーが付いたのは予約語だったりシステムコールに
見えちゃうので、ちゃんと名前付けた方がいいね
個人的には面倒くさかったら拡張した方はすべて〜exで済ませる
2020/01/21(火) 22:14:23.82ID:k/0CqDEqa
editURL/editRedirectURLとか
あとはめっちゃ冗長だけどeditURLBeforeRedirectとかな

そもそもredirectと並列に並べるような処理してないんだから同じ動詞が中心になるような命名はダメ
2020/01/26(日) 21:35:09.22ID:X84CwPm80
formのactionを「action=""」と記述した場合、再帰的に現在のページが呼び出されると
あったのですが、その際は現在のページの記述を全て読み込みなおすってことでしょうか?
2020/01/26(日) 22:32:40.52ID:a2Fj97SM0
>>710
ある意味そうだよ。当然、新規にページが読み込まれる。
「再帰的に」っていうのはよくわからないが。
2020/01/26(日) 22:34:05.94ID:qUKNFCzW0
>>710
遷移先のURLが今と同じになるということ。
submitされる内容はその時のformの中身だから、ページの内容を読み込み直すということではない。
よくあるフォームだと、入力、確認、完了画面を順に遷移していくと思うけど、それら全部を同じ myform.php というひとつの URL で対応する感じ。
今どの画面を表示すべきなのかは submitされるパラメータのどれかに仕込むとかして判別できるようにする。

method が get だと URL自体が変化していくから、その手法をやるなら method は必然的に post になる。
2020/01/26(日) 23:01:03.81ID:X84CwPm80
>>711-712
即レスどうもです。

動画サイトで勉強してまして、なんでその記述になるのか説明がないので、
>>712さんの説明で理解が深まりました。


遷移先が同じ場合はformのパラメータのみが変化して、ページの記述は読み直さないってこと
なのでしょうか?

下記のようにPOSTされていたら関数を呼び出すという条件式がheadタグより
上に書いてあり、ページの記述を読み直しでもしないと
この条件式の処理が走りようがないのでは?と混乱しております。

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
 $uploader->upload();
}
2020/01/26(日) 23:24:50.30ID:9P93xbrg0
GETだとブラウザのキャッシュが使われる可能性もあるが
POSTなら確実に再度リクエストが来る
2020/01/26(日) 23:31:40.69ID:qUKNFCzW0
>>713
それは同じURLで get と post の両方に対応してるんだね。
リンク踏んだりURL叩いてページに来たときは get でのアクセスになるから、とりあえず動画閲覧画面でも表示するのでしょう。
でもその画面では動画のアップロードもできるようになってて、post によってアクセスされる場合はアップロードの操作がされたものとして動画を差し換え、改めて閲覧画面を表示するのでしょう。
ページの記述とか何言ってるのかはよくわからないけど、その URL はアクセスされる度に毎回一からページを送り出してるだけだと思うよ。
動画のIDなんかURL自体に含まれてて、閲覧や更新対象を示すキーとして満ち足りてるから、同じURLを使い回すようにしてるんじゃないかな。
ブックマークするときなんかも、リンク踏んで来た場合でもアップロード後でも URL が一緒になるからタイミングを選ばず都合がいいだろうしね。
2020/01/27(月) 19:31:57.14ID:5Ks+WgqK0
なんかHTTPの基礎がわかってなさそう
717デフォルトの名無しさん (ワッチョイ f689-Kz18)
垢版 |
2020/01/30(木) 15:15:02.21ID:H+L/BkWr0
phpでPixivの画像まとめてDLしたいなと思いついて
https://html-css-javascript.com/demo/pixiv/
これ参考にやってるんだけどうまく行かない
Pixivの画像ってphpじゃDLできないの?
2020/01/30(木) 15:50:27.29ID:smyD86f50
phpじゃ厳しいなあ
rubyなら簡単にできるんだけどね
2020/01/30(木) 17:42:05.62ID:vZSmPHC30
>>717
それ少なくともおととしのpixivのUIが糞化する前用のやつだから
720デフォルトの名無しさん (ワッチョイ f689-Kz18)
垢版 |
2020/01/30(木) 18:08:28.77ID:H+L/BkWr0
マジか…
Rubyわかんないからphpでやりたかった

Pixivの画像のURL自体は変わってなかったから下記のURLの画像が保存できる方法知ってたら教えて下さい
https://i.pximg.net/img-original/img/2020/01/28/01/28/46/79136582_p0.png
2020/01/30(木) 20:01:18.05ID:OBUYa7FA0
718にrubyで書いてもらって、PHPに移植すれば良いんでね?
2020/01/30(木) 20:29:52.18ID:N/97jNZ60
>>720
リファラーつければいいだけ

curl 'https://i.pximg.net/img-original/img/2020/01/28/01/28/46/79136582_p[0-16].png' -H 'Referer: https://www.pixiv.net/en/artworks/'

rubyでも簡単だけどajax不要でログイン不要なら
curlとか使ってシェルスクリプト書いたほうが簡単
2020/01/30(木) 20:52:22.46ID:N/97jNZ60
ranking TOP10のやつ全部ダウンロードするスクリプト
curl, pup, jqが必要

curl -s 'https://www.pixiv.net/ranking.php' ¥
| pup 'a.work' attr{href} ¥
| head -10 ¥
| sed -E 's/¥/artworks¥/([0-9]+)/¥1/' ¥
| xargs -I {} curl -s https://www.pixiv.net/ajax/illust/{}/pages ¥
| jq '.body[].urls.original' ¥
| xargs -I {} curl -# {} -H 'Referer: https://www.pixiv.net/en/artworks/' -O -w "%{url_effective}¥n"
2020/01/30(木) 20:54:05.78ID:N/97jNZ60
円マークはバックスラッシュに変換して
725デフォルトの名無しさん (ワッチョイ a5f1-yzQx)
垢版 |
2020/01/30(木) 20:58:51.80ID:Rpk6h2gy0
>>724
なぜ?
円マークとバックスラッシュは同じじゃないの?日本語のパソコンだと円マークに表示されるだけで。

この辺の仕組みを「文字コード」とてう言葉を使って竹を割ったようなスッキリ解説できるかた、どうかお願いできませんかね?
726デフォルトの名無しさん (ワッチョイ b501-0Ybi)
垢版 |
2020/01/30(木) 21:01:33.81ID:Z7o7STkD0
フォントデザインが違うだけ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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