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
【PHP】下らねぇ質問はここに書き込みやがれ 10
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ cfe8-+65u)
2018/11/28(水) 17:08:46.02ID:Nb5yTkdM0652デフォルトの名無しさん (ワッチョイ 49a7-BfT8)
2020/01/04(土) 23:54:26.28ID:LM3WrULI0653デフォルトの名無しさん (ワッチョイ 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のコメント化も解除し、再起動しましたがまだエラーになります。
エラーは
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
こういう書き方って良くないん?こういう手があったかって思ったが見た目が悪いことに気付いた
こういう書き方って良くないん?こういう手があったかって思ったが見た目が悪いことに気付いた
655デフォルトの名無しさん (ワッチョイ 49a7-BfT8)
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
まあフレームワーク使いましょう
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
やっぱそれが正しい書き方なんだな、悩んでたがスッキリしたわ
やっぱそれが正しい書き方なんだな、悩んでたがスッキリしたわ
657デフォルトの名無しさん (ワッチョイ 4902-FJ/U)
2020/01/05(日) 02:02:10.08ID:sULWpEk60 プログラマー脳は前者、WEB屋は後者って感じ
658デフォルトの名無しさん (ワッチョイ fe89-GYAN)
2020/01/05(日) 09:10:52.06ID:ftX4LjxF0659デフォルトの名無しさん (ワッチョイ 3eca-aeaz)
2020/01/05(日) 10:23:42.03ID:GvoILGxb0 >>655
foreach のブロックをカッコじゃなく endforeach にするのはなんで?
カッコの対応を取ってくれるテキストエディタは多いのにそういうアシストも受けられなくなるし、タイプ量も増えるし、
あんまりやらんとは思うがループを foreach から for に変更するなんてのも面倒だし、何がよくてそうするのかさっぱり分からん。
foreach のブロックをカッコじゃなく endforeach にするのはなんで?
カッコの対応を取ってくれるテキストエディタは多いのにそういうアシストも受けられなくなるし、タイプ量も増えるし、
あんまりやらんとは思うがループを foreach から for に変更するなんてのも面倒だし、何がよくてそうするのかさっぱり分からん。
660デフォルトの名無しさん (ワッチョイ 49a7-BfT8)
2020/01/05(日) 13:29:38.07ID:qDQaoTCH0 >>659
テンプレートエンジンだとだいたいそういう風に書くと思うけど
テンプレートエンジンだとだいたいそういう風に書くと思うけど
661デフォルトの名無しさん (オイコラミネオ MM49-aeaz)
2020/01/05(日) 14:35:14.19ID:1zEvaEuJM662デフォルトの名無しさん (ワッチョイ 49a7-BfT8)
2020/01/05(日) 14:39:22.34ID:qDQaoTCH0 そんな下らないとこで噛みつかれるとは思いもしないんで
気の利く答えなんて持ち合わせてないでw
自分にあったスタイルで「好きにしろ」でいいんじゃないの別に
気の利く答えなんて持ち合わせてないでw
自分にあったスタイルで「好きにしろ」でいいんじゃないの別に
663デフォルトの名無しさん (オイコラミネオ MM49-aeaz)
2020/01/05(日) 16:55:06.61ID:1zEvaEuJM あぁ、ごめん
そういうスタイルで書いてるのをしばしば見るので、どんなメリットがあってそうしてるのか気になっただけだ。
単に好みの問題なのね。
そういうスタイルで書いてるのをしばしば見るので、どんなメリットがあってそうしてるのか気になっただけだ。
単に好みの問題なのね。
664デフォルトの名無しさん (ワッチョイ c261-BfT8)
2020/01/05(日) 17:25:59.86ID:HEA2L3oC0 括弧だとわかりにくいから。
htmlが混じるとインデントもややこしくなるし。
htmlが混じるとインデントもややこしくなるし。
665デフォルトの名無しさん (ワッチョイ 468c-1wr4)
2020/01/06(月) 13:02:17.22ID:udFWw96L0 個人的にはhtmlのタグのインテリセンスがかかるからスペルミス閉じミスが起きないから良いなって感じかな
666デフォルトの名無しさん (ワッチョイ 6258-bzpX)
2020/01/06(月) 17:09:39.10ID:RuDbGpDl0 配列なら、$his より $histories の方がしっくりくる
変に略されると読みづらい
変に略されると読みづらい
667デフォルトの名無しさん (ワッチョイ 7fa9-lZna)
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を覚えて時を止めてデバッグができる時に感動しました。
変数がコマ送りに変化していくことが見えるのは凄いです。
とりあえず動かすと「Parse error: Invalid numeric literal 」が出ます。
覚え立ての開発環境ではこんな感じです。
https://i.imgur.com/Jmw3irM.png
配列を空にして、配列が空でないならば、それぞれの「時」に対して「true, false」を入れた連想配列を作って、
現在時の「時」を$hourに入れて、それを比較して連想配列の「時」をキーにして「true」か「false」どちらかを返すということだと思いますが、
Invalid numeric literalは「使えない数字」と考えて良いのでしょうか?
php5では使えていたとは思いますが、php7では厳しくなったということでしょうか?
vscodeを覚えて時を止めてデバッグができる時に感動しました。
変数がコマ送りに変化していくことが見えるのは凄いです。
668デフォルトの名無しさん (ワッチョイ 7f61-MUcs)
2020/01/08(水) 02:41:05.10ID:kulAlEGT0 0から始まってるのは8進数なのでphp7ではエラー
php5以下で08は0と解釈されてたはず
php5以下で08は0と解釈されてたはず
669デフォルトの名無しさん (ワッチョイ 7fa9-lZna)
2020/01/08(水) 08:48:02.53ID:DD+ZGKXm0 ありとうございます。
シングルクォートを使ってキーを文字列として配列にしました。
phpって曖昧とは聞きますが、08 にだけ8進数として反応するのですね。
シングルクォートを使ってキーを文字列として配列にしました。
phpって曖昧とは聞きますが、08 にだけ8進数として反応するのですね。
670デフォルトの名無しさん (ワッチョイ df02-mx/f)
2020/01/08(水) 10:56:17.40ID:Bxyfcf/k0 そんなばかなー
10進数で言う0から10までを8進数で書いてみるといい(手書きでいい
10進数で言う0から10までを8進数で書いてみるといい(手書きでいい
671デフォルトの名無しさん (ワッチョイ 7fa9-lZna)
2020/01/08(水) 18:23:40.37ID:DD+ZGKXm0 >>670
0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12
ですよね。
シングルクォートで文字列にしてエラーは出なくなりました。
この関数は昔誰かが書いたものですが、時によってフラグを立てる方法としてはまだ改良の余地があるのでしょうか。
0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12
ですよね。
シングルクォートで文字列にしてエラーは出なくなりました。
この関数は昔誰かが書いたものですが、時によってフラグを立てる方法としてはまだ改良の余地があるのでしょうか。
672デフォルトの名無しさん (ワッチョイ df02-mx/f)
2020/01/08(水) 18:37:40.91ID:Bxyfcf/k0 08と09は8進表記であり得ないからInvalid numeric literal
素直に頭文字0を削除すればいいのに
素直に頭文字0を削除すればいいのに
673デフォルトの名無しさん (ワッチョイ ffca-SJ+5)
2020/01/08(水) 18:47:21.77ID:Z7OGNEnI0 >>671
そもそもなんだけど、関数の引数で $time_array が渡されたとき、その添字はどんな形式になってるの?
$hour は文字列なんだから、元々配列の添字は文字列であるべきだったように見えるけど。
それはそれとして、小さなフラグテーブルなら文字列で書く方法もあるかもね。
$timetbl = '000000000011111111111100';
return $timetbl[(int)$hour] === '1';
みたいな。
その例ではインタフェースを変更しないといけなくなるから適用しづらいだろうけど。
そもそもなんだけど、関数の引数で $time_array が渡されたとき、その添字はどんな形式になってるの?
$hour は文字列なんだから、元々配列の添字は文字列であるべきだったように見えるけど。
それはそれとして、小さなフラグテーブルなら文字列で書く方法もあるかもね。
$timetbl = '000000000011111111111100';
return $timetbl[(int)$hour] === '1';
みたいな。
その例ではインタフェースを変更しないといけなくなるから適用しづらいだろうけど。
674デフォルトの名無しさん (ワッチョイ 7f63-lB9F)
2020/01/08(水) 19:49:43.97ID:w19vYwgJ0 >>671
do_check_exec_time関数だけどさ
返却値が不規則ならともかく、10〜21の範囲ならtrue、それ以外はfalseで駄目なの?
引数範囲もチェックしたいなら、先頭行で行えば良いと思う
do_check_exec_time関数だけどさ
返却値が不規則ならともかく、10〜21の範囲ならtrue、それ以外はfalseで駄目なの?
引数範囲もチェックしたいなら、先頭行で行えば良いと思う
675デフォルトの名無しさん (ワッチョイ 7fa9-lZna)
2020/01/08(水) 21:14:25.57ID:DD+ZGKXm0 レスを書くと forbiddenになったので、レスにNGワードが含まれているようです。
何がダメなんだろう・・・
レスは返したかったので画像にしました
https://i.imgur.com/XjOXs1g.jpg
何がダメなんだろう・・・
レスは返したかったので画像にしました
https://i.imgur.com/XjOXs1g.jpg
676デフォルトの名無しさん (ワッチョイ dfa7-alJZ)
2020/01/08(水) 22:18:06.43ID:zDxhP1FM0 PHPはJavaScriptなんかと違って文字連結とは演算子が別れてるから
+演算子は加算専用で数字として扱えるというか数値として扱うというのが正しい
>>667のコード見た感想としてはそこで初期値設定するか?って思ったわ
渡すべき$time_arrayの初期値としてならともかく
ちゃんとarrayのみ渡されるよう想定したほうがいいね
+演算子は加算専用で数字として扱えるというか数値として扱うというのが正しい
>>667のコード見た感想としてはそこで初期値設定するか?って思ったわ
渡すべき$time_arrayの初期値としてならともかく
ちゃんとarrayのみ渡されるよう想定したほうがいいね
677デフォルトの名無しさん (ワッチョイ dfa7-alJZ)
2020/01/08(水) 22:26:16.06ID:zDxhP1FM0 ちなみに勘違いしてなければいいけど
date関数のreturn値は文字列なんで08は正確には"08"
8進数でも他の数値的な何者かではなくただの文字列
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」に変更すると正しく動作しません。
何が原因なんでしょうか?
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」に変更すると正しく動作しません。
何が原因なんでしょうか?
679蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ df01-fZVk)
2020/01/13(月) 21:17:58.61ID:xgMgrp400 HTMLの構造が違うんじゃねーの?
FirefoxなどのブラウザでHTMLのソースを見てみたら?
FirefoxなどのブラウザでHTMLのソースを見てみたら?
680デフォルトの名無しさん (ワッチョイ 7f61-euIa)
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:Pp7kDtDs0682デフォルトの名無しさん (ワッチョイ dfa7-alJZ)
2020/01/14(火) 01:08:34.22ID:HMRlieOS0 PHPのDOMload周りは@でエラー無視が一般的だと思う
$domDocument->loadHTML($html);
↓
@$domDocument->loadHTML($html);
>>678も自分の環境じゃWarning出まくるけどこれで結果を得られるし
?reply=407へURL書き換えたあともちゃんと結果を得られる
自分はPHPのDOM周りはいまいちなんでJavaScript側でやるかな
$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も使います。
どこのレンタルサーバを使うのが得策でしょうか?
今後生涯サイトは使おうと思います。
目的は主に2つあって、なにか簡単な商売をして副業としてお金をかせぐことと、ブログみたいになにか情報発信しようかと思っています。
PHPも使います。
どこのレンタルサーバを使うのが得策でしょうか?
今後生涯サイトは使おうと思います。
684デフォルトの名無しさん (ワッチョイ 7f59-alJZ)
2020/01/14(火) 14:36:03.43ID:Yv2y+5Q60 ここはまんさんでもやさしくしてくれるやろか
あのな、画像検索するとある画像が大きさが5504x8256ってなってるんやが開くとちっさいんや大きさが指定してあって。アドレスバーのとこに410x618って書いてあって。しかもこいつ実際は274x410なんやで。
wysiwygとかでダメなんやろかってやってもちっさいんや。大きいのは格納されとるハズなんやろうけど初心者すぎて大きい元画像にたどりつけないんやで。
やさしい人手取り足取り教えてほしいんやでどなたか
あのな、画像検索するとある画像が大きさが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も使えるところはあるのでしょうか?
いまの時代、無料のレンタルサーバでPHP/SQLも使えるところはあるのでしょうか?
687デフォルトの名無しさん (ワッチョイ 5fda-woae)
2020/01/14(火) 16:49:46.95ID:HWX79XGs0 >>684
自分のサイトの話じゃなくて、他人のサイトに置いてある画像の元ファイルにどうしたらたどりつけるかって話か
ここは下らねぇ質問のスレだが自分のサイト以外の問題を持ち掛けられてもしょうもないと思います
自分のサイトの話じゃなくて、他人のサイトに置いてある画像の元ファイルにどうしたらたどりつけるかって話か
ここは下らねぇ質問のスレだが自分のサイト以外の問題を持ち掛けられてもしょうもないと思います
688デフォルトの名無しさん (ワッチョイ fff2-ZJ4Y)
2020/01/14(火) 16:57:43.19ID:R0T58PMv0689デフォルトの名無しさん (ワッチョイ 7fa9-lZna)
2020/01/14(火) 20:36:37.48ID:/BEaD92M0 mysql_real_escape_string($string)
を多用している手続き型のphp5環境からphp7へ移行をしていて、
mysqli_real_escape_string($link, $string)
への修正しているのですが、
htmlspecialcharsのように、エスケープ目的で多用しているコードなのですが、
データベースのリンクも引数の強制になったようですが、リンクを使うのはどういう理由なのでしょうか?
また使いどころとしては、多用せずsqlクエリを使う前に1回で済ますという感じでしょうか?
を多用している手続き型のphp5環境からphp7へ移行をしていて、
mysqli_real_escape_string($link, $string)
への修正しているのですが、
htmlspecialcharsのように、エスケープ目的で多用しているコードなのですが、
データベースのリンクも引数の強制になったようですが、リンクを使うのはどういう理由なのでしょうか?
また使いどころとしては、多用せずsqlクエリを使う前に1回で済ますという感じでしょうか?
690デフォルトの名無しさん (ワッチョイ a9a7-s5Rz)
2020/01/15(水) 00:51:29.73ID:0SK8bZ/o0 >リンクを使うのはどういう理由なのでしょうか?
マニュアルに書いてるけど、
「接続の現在の文字セットを考慮して、SQL 文で使用する文字列の特殊文字をエスケープする」から。
接続が複数あって文字セットが異なる場合なんかを考慮してるのでしょう。
>多用せずsqlクエリを使う前に1回で済ますという感じでしょうか?
プリペアドステートメントで行うのが普通。
mysqliみたいなベンダー固有関数は汎用性がないのであまり使われないよ。
mysqlしか使わないならいいけど、本気で修正するなら手間も同じだしPDOでやったほうがいいと思う。
マニュアルに書いてるけど、
「接続の現在の文字セットを考慮して、SQL 文で使用する文字列の特殊文字をエスケープする」から。
接続が複数あって文字セットが異なる場合なんかを考慮してるのでしょう。
>多用せずsqlクエリを使う前に1回で済ますという感じでしょうか?
プリペアドステートメントで行うのが普通。
mysqliみたいなベンダー固有関数は汎用性がないのであまり使われないよ。
mysqlしか使わないならいいけど、本気で修正するなら手間も同じだしPDOでやったほうがいいと思う。
691690 (ワッチョイ a9a7-s5Rz)
2020/01/15(水) 01:29:34.93ID:0SK8bZ/o0 >>690の答えはちょっと答えになってなかったから補足しとく
・mysql関数時代も接続(リンク)は必要っちゃ必要だったけど、省略可能な第二引数だった。
省略した場合は、直近に使った接続になる。
・mysqli関数は省略不可能な第一引数になった。(引数の順番が変わった)
mysql関数は、接続を明示しなくていいので、
接続が複数ある場合、意図しないDBを操作するミスがおきる可能性がある。
エスケープする場合も同様、意図しないエスケープ結果になってしまう恐れがある。
そういうミスを減らすためにも、接続を明示しないといけないmysqli関数ってことなんじゃないかな多分。
・mysql関数時代も接続(リンク)は必要っちゃ必要だったけど、省略可能な第二引数だった。
省略した場合は、直近に使った接続になる。
・mysqli関数は省略不可能な第一引数になった。(引数の順番が変わった)
mysql関数は、接続を明示しなくていいので、
接続が複数ある場合、意図しないDBを操作するミスがおきる可能性がある。
エスケープする場合も同様、意図しないエスケープ結果になってしまう恐れがある。
そういうミスを減らすためにも、接続を明示しないといけないmysqli関数ってことなんじゃないかな多分。
692デフォルトの名無しさん (ワッチョイ 02a9-JESV)
2020/01/15(水) 19:33:51.69ID:OZZ+PtiC0 今まで1つの接続しかしたことが無かったので複数を接続するって考えもしなかったです。
たしかにそれだと文字コードが違う場合も想定すると、明示したほうが良いですよね。
古すぎてpdoに書き直すのは難しいので、とりあえず地味に書き換えていきます。
しかしmysqli_real_escape_stringや、mysqli_queryとか
引数の強制が増えたり、引数が入れ替わったり、pdoを使っていない古いコードは修正に振り回されることになりますよね。
プリペアドステートメントは「?」とかコードの行数が一気に増えて難しそうなのですが、
クエリに直接変数を書いて、real_escapeすればと思ってしまうのですがやはりデメリットがあるのでしょうか。
新規で練習するときはプリペアドステートメントを使おうと思っています。
たしかにそれだと文字コードが違う場合も想定すると、明示したほうが良いですよね。
古すぎてpdoに書き直すのは難しいので、とりあえず地味に書き換えていきます。
しかしmysqli_real_escape_stringや、mysqli_queryとか
引数の強制が増えたり、引数が入れ替わったり、pdoを使っていない古いコードは修正に振り回されることになりますよね。
プリペアドステートメントは「?」とかコードの行数が一気に増えて難しそうなのですが、
クエリに直接変数を書いて、real_escapeすればと思ってしまうのですがやはりデメリットがあるのでしょうか。
新規で練習するときはプリペアドステートメントを使おうと思っています。
693デフォルトの名無しさん (ワッチョイ a9a7-s5Rz)
2020/01/16(木) 04:41:59.97ID:WGM+n45y0 >>692
具体的なコードは書かないけど、
real_escape_stringでは攻撃対策としては不十分だから、プリペアドステートメントは必須。
(PDO使う場合、PDO::ATTR_EMULATE_PREPARESが1で、PDO側でエミュレートする場合、攻撃が成立する場合があるのは注意)
型を調べたり、想定してるフォーマットに沿うものか検証(バリデーション)して、
受け渡された変数が安全なデータであることが保証されてればいいけど、それこそコード長くなるし、
プリペアドステートメントでやったほうが、確実だし簡単だと思う。
具体的なコードは書かないけど、
real_escape_stringでは攻撃対策としては不十分だから、プリペアドステートメントは必須。
(PDO使う場合、PDO::ATTR_EMULATE_PREPARESが1で、PDO側でエミュレートする場合、攻撃が成立する場合があるのは注意)
型を調べたり、想定してるフォーマットに沿うものか検証(バリデーション)して、
受け渡された変数が安全なデータであることが保証されてればいいけど、それこそコード長くなるし、
プリペアドステートメントでやったほうが、確実だし簡単だと思う。
694デフォルトの名無しさん (ワッチョイ 7eca-uIHU)
2020/01/16(木) 09:20:07.39ID:yWLTyI800 >>692
あちこちに適用するライブラリでもなくいろんなDBに対応するわけでもないんだろうから、無理して PDO に置き換える必要は無いんじゃね。
プリペアドステートメントのいいところはプレースホルダが使えることもあるけど、プリペア済みのオブジェクトを何度も使い回すことによってSQLのパースを省略してパフォーマンスを上げられるって利点がある。
でも使い回しなんてせず同じSQLでも使う度にプリペアするようなコードが多いだろうし、バッチならともかくwebの1リクエストでどんだけ使い回せるの?って話もある。
それに加えて LIKE とか可変個の IN とか面倒だから、プリペアドステートメントに拘る必要は無いというのが俺の考えだな。
新規じゃないなら特に。
あちこちに適用するライブラリでもなくいろんなDBに対応するわけでもないんだろうから、無理して PDO に置き換える必要は無いんじゃね。
プリペアドステートメントのいいところはプレースホルダが使えることもあるけど、プリペア済みのオブジェクトを何度も使い回すことによってSQLのパースを省略してパフォーマンスを上げられるって利点がある。
でも使い回しなんてせず同じSQLでも使う度にプリペアするようなコードが多いだろうし、バッチならともかくwebの1リクエストでどんだけ使い回せるの?って話もある。
それに加えて LIKE とか可変個の IN とか面倒だから、プリペアドステートメントに拘る必要は無いというのが俺の考えだな。
新規じゃないなら特に。
695デフォルトの名無しさん (ワントンキン MM52-NIOJ)
2020/01/16(木) 14:43:23.92ID:B1/MNbmAM pdoに置き換えは無理してってほど大袈裟なものじゃないでしょ
手続きが用意されてないからオブジェクトになるけど
オブジェクト型のmysqliと比較してコードは似たりよったりだ
新規はpdoにしたほうがいい
手続きが用意されてないからオブジェクトになるけど
オブジェクト型のmysqliと比較してコードは似たりよったりだ
新規はpdoにしたほうがいい
696デフォルトの名無しさん (ワッチョイ 4263-A78j)
2020/01/16(木) 14:49:59.78ID:7uXyXPAQ0 どこかの機会で書き替えて行けば良いよ
将来はサポートされなくなる訳だし
将来はサポートされなくなる訳だし
697デフォルトの名無しさん (ワッチョイ 8d07-muX5)
2020/01/16(木) 16:00:44.94ID:NkO/oANm0 クラス内のメソッドについて、
似たような処理を行うもの(少し変更している)のがあるとします。
たとえば「redirect」というメソッドだったとして、
少し変更したのを「_redirect」みたいにして、親クラスに用意しているのですが
こういう書き方・使い方はまずいでしょうか?
beforeRedirectとかcustomRedirectみたいに変えた方がいいでしょうか?
似たような処理を行うもの(少し変更している)のがあるとします。
たとえば「redirect」というメソッドだったとして、
少し変更したのを「_redirect」みたいにして、親クラスに用意しているのですが
こういう書き方・使い方はまずいでしょうか?
beforeRedirectとかcustomRedirectみたいに変えた方がいいでしょうか?
698デフォルトの名無しさん (ワッチョイ fe02-gGzZ)
2020/01/16(木) 16:10:34.16ID:QgmPcxAO0 extendsで新しいクラスにすることと比べると
悩みどころですね
悩みどころですね
699デフォルトの名無しさん (ワッチョイ 4263-A78j)
2020/01/16(木) 16:42:45.37ID:7uXyXPAQ0 将来メンテする人にとって無用な負担をかけない方法を選択しよう
使うユーザーができるだけ負担を感じない道を選んだ方がいい
使うユーザーができるだけ負担を感じない道を選んだ方がいい
700デフォルトの名無しさん (ワッチョイ a9a7-s5Rz)
2020/01/16(木) 17:54:13.09ID:WGM+n45y0 >>697
どう変更してるのかわからないけど、
引数の数や型が違うならオーバーロードにする手もある。
ただしPHPにはない機能なので、可変引数を使ったり工夫が必要になるけど。
あとは柔軟に引数でモード選ぶとか、言ってるように名前変えるとかでいいと思う。
どう変更してるのかわからないけど、
引数の数や型が違うならオーバーロードにする手もある。
ただしPHPにはない機能なので、可変引数を使ったり工夫が必要になるけど。
あとは柔軟に引数でモード選ぶとか、言ってるように名前変えるとかでいいと思う。
701デフォルトの名無しさん (ワッチョイ 8261-s5Rz)
2020/01/16(木) 18:12:11.14ID:9x78fuLW0 共通部分の処理は親側で全部行うようにして、差分だけを子側に委譲する(abstractメソッド)。
702デフォルトの名無しさん (アウアウウー Sa05-DeBb)
2020/01/16(木) 20:22:40.39ID:HZuE80s1a >>693-694
今回は古い部分を直すだけで必死なのでreal_escapeを使いますが、
たしかにプリペアドステートメントが
エスケープも兼ねるので新規では使いたいです。
古いコードなので、闇雲に同じクエリを投げているので、そういう意味ではプリペアドステートメントの利点を受けられるかもしれません
今回は古い部分を直すだけで必死なのでreal_escapeを使いますが、
たしかにプリペアドステートメントが
エスケープも兼ねるので新規では使いたいです。
古いコードなので、闇雲に同じクエリを投げているので、そういう意味ではプリペアドステートメントの利点を受けられるかもしれません
703デフォルトの名無しさん (ワッチョイ 8d07-muX5)
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とかにするのは変かな?
と感じており、質問した次第です。
できれば他の人が見てもわかる方法にしたいのですが、
親クラス
class Main {
function redirect($url){
header('Location:' . $url);
}
function _redirect($url){
〜$urlになにかする処理〜
$this->redirect($url);
}
}
みたいなことをしていまして、これだとわかりづらいですよね?
※redirectになにかする処理を書くのは別とします。
なので別のメソッド名にした方がいいのかな?と思うものの、
beforeRedirectとかcustomRedirectとかにするのは変かな?
と感じており、質問した次第です。
704デフォルトの名無しさん (ワントンキン MM52-NIOJ)
2020/01/17(金) 18:45:49.52ID:vvJW2PiAM コールバックでいいんじゃ
705デフォルトの名無しさん (ワッチョイ e1da-A78j)
2020/01/17(金) 22:12:48.18ID:9k6vGiaj0706デフォルトの名無しさん (ワッチョイ 8d07-muX5)
2020/01/20(月) 10:56:16.47ID:UzBq59x80 >>705
通常はredirectの方で、変わったことがしたい(ページ推移を分岐させたい等)時は
_redirectの方を使うというイメージです。
そのため、「このリダイレクトは、カスタマイズしたリダイレクトですよ」
ということを説明するためのメソッドであればと思うのですが、
「_redirect」のような名前は、間違いやすいし、
beforeRedirectの場合はイベントハンドラっぽいので、悩んでいる次第です。
通常はredirectの方で、変わったことがしたい(ページ推移を分岐させたい等)時は
_redirectの方を使うというイメージです。
そのため、「このリダイレクトは、カスタマイズしたリダイレクトですよ」
ということを説明するためのメソッドであればと思うのですが、
「_redirect」のような名前は、間違いやすいし、
beforeRedirectの場合はイベントハンドラっぽいので、悩んでいる次第です。
707デフォルトの名無しさん (ワッチョイ 8d07-muX5)
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);
}
}
みたいな設計にし直します。
class Main {
function beforeRedirect($url){
〜$urlになにかする処理〜
return $url;
}
function redirect($url){
$url = $this->beforeRedirect($url);
header('Location:' . $url);
}
}
みたいな設計にし直します。
708デフォルトの名無しさん (ワッチョイ a902-1yOP)
2020/01/20(月) 19:21:08.15ID:OvG49n5/0 ネーミングの問題だと思うけど、アンダーバーが付いたのは予約語だったりシステムコールに
見えちゃうので、ちゃんと名前付けた方がいいね
個人的には面倒くさかったら拡張した方はすべて〜exで済ませる
見えちゃうので、ちゃんと名前付けた方がいいね
個人的には面倒くさかったら拡張した方はすべて〜exで済ませる
709デフォルトの名無しさん (アウアウウー Sa05-gGzZ)
2020/01/21(火) 22:14:23.82ID:k/0CqDEqa editURL/editRedirectURLとか
あとはめっちゃ冗長だけどeditURLBeforeRedirectとかな
そもそもredirectと並列に並べるような処理してないんだから同じ動詞が中心になるような命名はダメ
あとはめっちゃ冗長だけどeditURLBeforeRedirectとかな
そもそもredirectと並列に並べるような処理してないんだから同じ動詞が中心になるような命名はダメ
710デフォルトの名無しさん (ワッチョイ e7da-Jq7D)
2020/01/26(日) 21:35:09.22ID:X84CwPm80 formのactionを「action=""」と記述した場合、再帰的に現在のページが呼び出されると
あったのですが、その際は現在のページの記述を全て読み込みなおすってことでしょうか?
あったのですが、その際は現在のページの記述を全て読み込みなおすってことでしょうか?
711デフォルトの名無しさん (ワッチョイ e7f3-Ld1M)
2020/01/26(日) 22:32:40.52ID:a2Fj97SM0712デフォルトの名無しさん (ワッチョイ ffca-v+ft)
2020/01/26(日) 22:34:05.94ID:qUKNFCzW0 >>710
遷移先のURLが今と同じになるということ。
submitされる内容はその時のformの中身だから、ページの内容を読み込み直すということではない。
よくあるフォームだと、入力、確認、完了画面を順に遷移していくと思うけど、それら全部を同じ myform.php というひとつの URL で対応する感じ。
今どの画面を表示すべきなのかは submitされるパラメータのどれかに仕込むとかして判別できるようにする。
method が get だと URL自体が変化していくから、その手法をやるなら method は必然的に post になる。
遷移先のURLが今と同じになるということ。
submitされる内容はその時のformの中身だから、ページの内容を読み込み直すということではない。
よくあるフォームだと、入力、確認、完了画面を順に遷移していくと思うけど、それら全部を同じ myform.php というひとつの URL で対応する感じ。
今どの画面を表示すべきなのかは submitされるパラメータのどれかに仕込むとかして判別できるようにする。
method が get だと URL自体が変化していくから、その手法をやるなら method は必然的に post になる。
713デフォルトの名無しさん (ワッチョイ e7da-Jq7D)
2020/01/26(日) 23:01:03.81ID:X84CwPm80714デフォルトの名無しさん (ワッチョイ 5f61-RMi8)
2020/01/26(日) 23:24:50.30ID:9P93xbrg0 GETだとブラウザのキャッシュが使われる可能性もあるが
POSTなら確実に再度リクエストが来る
POSTなら確実に再度リクエストが来る
715デフォルトの名無しさん (ワッチョイ ffca-v+ft)
2020/01/26(日) 23:31:40.69ID:qUKNFCzW0 >>713
それは同じURLで get と post の両方に対応してるんだね。
リンク踏んだりURL叩いてページに来たときは get でのアクセスになるから、とりあえず動画閲覧画面でも表示するのでしょう。
でもその画面では動画のアップロードもできるようになってて、post によってアクセスされる場合はアップロードの操作がされたものとして動画を差し換え、改めて閲覧画面を表示するのでしょう。
ページの記述とか何言ってるのかはよくわからないけど、その URL はアクセスされる度に毎回一からページを送り出してるだけだと思うよ。
動画のIDなんかURL自体に含まれてて、閲覧や更新対象を示すキーとして満ち足りてるから、同じURLを使い回すようにしてるんじゃないかな。
ブックマークするときなんかも、リンク踏んで来た場合でもアップロード後でも URL が一緒になるからタイミングを選ばず都合がいいだろうしね。
それは同じURLで get と post の両方に対応してるんだね。
リンク踏んだりURL叩いてページに来たときは get でのアクセスになるから、とりあえず動画閲覧画面でも表示するのでしょう。
でもその画面では動画のアップロードもできるようになってて、post によってアクセスされる場合はアップロードの操作がされたものとして動画を差し換え、改めて閲覧画面を表示するのでしょう。
ページの記述とか何言ってるのかはよくわからないけど、その URL はアクセスされる度に毎回一からページを送り出してるだけだと思うよ。
動画のIDなんかURL自体に含まれてて、閲覧や更新対象を示すキーとして満ち足りてるから、同じURLを使い回すようにしてるんじゃないかな。
ブックマークするときなんかも、リンク踏んで来た場合でもアップロード後でも URL が一緒になるからタイミングを選ばず都合がいいだろうしね。
716デフォルトの名無しさん (ワッチョイ 5fff-Ld1M)
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できないの?
https://html-css-javascript.com/demo/pixiv/
これ参考にやってるんだけどうまく行かない
Pixivの画像ってphpじゃDLできないの?
718デフォルトの名無しさん (ワッチョイ 7999-/fp1)
2020/01/30(木) 15:50:27.29ID:smyD86f50 phpじゃ厳しいなあ
rubyなら簡単にできるんだけどね
rubyなら簡単にできるんだけどね
719デフォルトの名無しさん (ワッチョイ 6a61-2iSl)
2020/01/30(木) 17:42:05.62ID:vZSmPHC30 >>717
それ少なくともおととしのpixivのUIが糞化する前用のやつだから
それ少なくともおととしの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
Rubyわかんないからphpでやりたかった
Pixivの画像のURL自体は変わってなかったから下記のURLの画像が保存できる方法知ってたら教えて下さい
https://i.pximg.net/img-original/img/2020/01/28/01/28/46/79136582_p0.png
721デフォルトの名無しさん (ワッチョイ 2a63-unxX)
2020/01/30(木) 20:01:18.05ID:OBUYa7FA0 718にrubyで書いてもらって、PHPに移植すれば良いんでね?
722デフォルトの名無しさん (ワッチョイ 2a01-I+PI)
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とか使ってシェルスクリプト書いたほうが簡単
リファラーつければいいだけ
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とか使ってシェルスクリプト書いたほうが簡単
723デフォルトの名無しさん (ワッチョイ 2a01-I+PI)
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"
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"
724デフォルトの名無しさん (ワッチョイ 2a01-I+PI)
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 フォントデザインが違うだけ。
727デフォルトの名無しさん (ワッチョイ 2a01-I+PI)
2020/01/30(木) 21:30:24.16ID:N/97jNZ60728デフォルトの名無しさん (ワッチョイ f689-Kz18)
2020/01/30(木) 21:56:00.67ID:H+L/BkWr0 N/97jNZ60 様
ありがとうございます。
ですが、素人に毛が生えた程度の私では難しいようです。(Rubyもスクリプトもできません)
phpで無理そうなら諦めます。
ありがとうございます。
ですが、素人に毛が生えた程度の私では難しいようです。(Rubyもスクリプトもできません)
phpで無理そうなら諦めます。
729デフォルトの名無しさん (ワッチョイ 2a01-I+PI)
2020/01/30(木) 23:11:34.50ID:N/97jNZ60 >>728
PHPでもシェルスクリプトより少し面倒なだけで普通にできるよ
処理手順だけ書いておくからPHPでトライしてみて
https://www.pixiv.net/en/artworks/79136582の一連の画像を全部ダウンロードしたい場合
https://www.pixiv.net/ajax/illust/79136582/pagesにアクセスすれば
各サイズのURLのリストがJSON形式で取得できる
取得したURLリスト(JSON)から目的のURLだけ抜き出して
そのURLを一つずつアクセスして画像をファイルに保存すればOK
>>723の後半3行が上の手順に相当する部分
PHPでもシェルスクリプトより少し面倒なだけで普通にできるよ
処理手順だけ書いておくからPHPでトライしてみて
https://www.pixiv.net/en/artworks/79136582の一連の画像を全部ダウンロードしたい場合
https://www.pixiv.net/ajax/illust/79136582/pagesにアクセスすれば
各サイズのURLのリストがJSON形式で取得できる
取得したURLリスト(JSON)から目的のURLだけ抜き出して
そのURLを一つずつアクセスして画像をファイルに保存すればOK
>>723の後半3行が上の手順に相当する部分
730デフォルトの名無しさん (ワッチョイ 2a63-unxX)
2020/01/30(木) 23:12:03.35ID:OBUYa7FA0731デフォルトの名無しさん (ワッチョイ 66a7-ol1H)
2020/01/31(金) 04:16:30.86ID:Qzj9ULR80 >>729の仕様がわかれば根こそぎダウンロード出来るな
適当なsleep値挟まないと岡崎図書館になりそうでおそろしいw
適当なsleep値挟まないと岡崎図書館になりそうでおそろしいw
732デフォルトの名無しさん (ワッチョイ 5d2d-/fp1)
2020/01/31(金) 04:23:23.85ID:1Ft64C3q0 普通にAPI公開してるんだけど
733デフォルトの名無しさん (ワッチョイ ea2c-KoMo)
2020/01/31(金) 04:49:35.34ID:/fagGTpB0 >>723
は、Linux コマンド、またはシェルスクリプト
一方、Windows 10 にも、curl が入っている。
コマンドプロンプトで、where curl と打つと、
C:\Windows\System32\curl.exe
このcurl とは別に、PowerShell にもcurl がある
Ruby で、`〜` 内に、コマンドを書いて、呼び出すこともできる。
例えば、curl のヘルプの最初の5行を表示する
puts `curl -help`.lines.first( 5 )
同様に、PHP にも、コマンドを呼び出す記法があるはず。
ダウンロードでは、Linux のcurl, wget は、よく使うコマンド
Windows 10 上で, WSL, Ubuntu 18.04 を使っているなら、
Linux側で、Linuxコマンド・シェルスクリプトを書いて、Windows側のフォルダをいじる事もできる
は、Linux コマンド、またはシェルスクリプト
一方、Windows 10 にも、curl が入っている。
コマンドプロンプトで、where curl と打つと、
C:\Windows\System32\curl.exe
このcurl とは別に、PowerShell にもcurl がある
Ruby で、`〜` 内に、コマンドを書いて、呼び出すこともできる。
例えば、curl のヘルプの最初の5行を表示する
puts `curl -help`.lines.first( 5 )
同様に、PHP にも、コマンドを呼び出す記法があるはず。
ダウンロードでは、Linux のcurl, wget は、よく使うコマンド
Windows 10 上で, WSL, Ubuntu 18.04 を使っているなら、
Linux側で、Linuxコマンド・シェルスクリプトを書いて、Windows側のフォルダをいじる事もできる
734733 (ワッチョイ ea2c-KoMo)
2020/01/31(金) 08:14:28.08ID:/fagGTpB0 Ruby なら、ウェブページをBOMなしUTF-8 で、一旦保存してから、JSON.parse すると、
require 'open-uri'
require 'json'
# json_str = URI( "https://www.pixiv.net/ajax/illust/79136582/pages" ).read
json_str = File.read( "79136582_pages.json" ) # 保存した、UTF-8 ファイル
json_obj = JSON.parse( json_str )
json_obj[ "body" ].each do |urls|
p urls[ "urls" ]
end
出力。
こういうのが画像の数だけあるけど、この中で、original だけが欲しいの?
{"thumb_mini"=>"https://i.pximg.net/c/128x128/img-master/img/2020/01/28/01/28/46/79136582_p0_square1200.jpg",
"small"=>"https://i.pximg.net/c/540x540_70/img-master/img/2020/01/28/01/28/46/79136582_p0_master1200.jpg",
"regular"=>"https://i.pximg.net/img-master/img/2020/01/28/01/28/46/79136582_p0_master1200.jpg",
"original"=>"https://i.pximg.net/img-original/img/2020/01/28/01/28/46/79136582_p0.png"}
require 'open-uri'
require 'json'
# json_str = URI( "https://www.pixiv.net/ajax/illust/79136582/pages" ).read
json_str = File.read( "79136582_pages.json" ) # 保存した、UTF-8 ファイル
json_obj = JSON.parse( json_str )
json_obj[ "body" ].each do |urls|
p urls[ "urls" ]
end
出力。
こういうのが画像の数だけあるけど、この中で、original だけが欲しいの?
{"thumb_mini"=>"https://i.pximg.net/c/128x128/img-master/img/2020/01/28/01/28/46/79136582_p0_square1200.jpg",
"small"=>"https://i.pximg.net/c/540x540_70/img-master/img/2020/01/28/01/28/46/79136582_p0_master1200.jpg",
"regular"=>"https://i.pximg.net/img-master/img/2020/01/28/01/28/46/79136582_p0_master1200.jpg",
"original"=>"https://i.pximg.net/img-original/img/2020/01/28/01/28/46/79136582_p0.png"}
735デフォルトの名無しさん (ワッチョイ 66a7-ol1H)
2020/01/31(金) 09:07:20.03ID:Qzj9ULR80 PHPで頼む言われてんのにRuby厨また沸いてんのかw
$api = 'https://www.pixiv.net/ajax/illust/79136582/pages';
$json = json_decode(file_get_contents($api));
$ctx = stream_context_create(['http'=>['header'=>"Referer: {$api}\r\n"]]);
foreach ($json->body as $body) {
$url = $body->urls->original;
$fname = basename($url);
file_put_contents($fname, file_get_contents($url, false, $ctx));
sleep(1);
}
保存先やら上書きやら考慮してないからこのままは使うなよ
$api = 'https://www.pixiv.net/ajax/illust/79136582/pages';
$json = json_decode(file_get_contents($api));
$ctx = stream_context_create(['http'=>['header'=>"Referer: {$api}\r\n"]]);
foreach ($json->body as $body) {
$url = $body->urls->original;
$fname = basename($url);
file_put_contents($fname, file_get_contents($url, false, $ctx));
sleep(1);
}
保存先やら上書きやら考慮してないからこのままは使うなよ
736デフォルトの名無しさん (ワッチョイ f689-Kz18)
2020/01/31(金) 10:18:31.72ID:2wi/3AbP0737デフォルトの名無しさん (ワッチョイ 2a63-unxX)
2020/01/31(金) 10:29:10.97ID:k4NtdgGW0 頑張れよ!
738デフォルトの名無しさん (ワッチョイ f689-Kz18)
2020/01/31(金) 17:24:53.23ID:2wi/3AbP0 Pixivの質問者です。
画像をタイトル名で保存したかったので、下記のようにしました。
$url = "https://www.pixiv.net/artworks/79152593";
$html = file_get_contents($url);
preg_match("/この作品 「(.*)」 は 「/", $html, $titlearr);
echo $title = $titlearr[1];
タイトル以外にも投稿日や閲覧数などが取得できたのですが、カテゴリが上手く取得できません。
なにか良い方法はないでしょうか?
もしくは「https://www.pixiv.net/ajax/illust/79152593/pages」のような画像の情報集のようなものがあるのでしょうか?
画像をタイトル名で保存したかったので、下記のようにしました。
$url = "https://www.pixiv.net/artworks/79152593";
$html = file_get_contents($url);
preg_match("/この作品 「(.*)」 は 「/", $html, $titlearr);
echo $title = $titlearr[1];
タイトル以外にも投稿日や閲覧数などが取得できたのですが、カテゴリが上手く取得できません。
なにか良い方法はないでしょうか?
もしくは「https://www.pixiv.net/ajax/illust/79152593/pages」のような画像の情報集のようなものがあるのでしょうか?
739デフォルトの名無しさん (ワッチョイ 66a7-ol1H)
2020/01/31(金) 19:10:54.05ID:Qzj9ULR80 DOMDocumentで$htmlをロードして
getElementById('meta-preload-data')->getAttribute('content')取って
json_decodeすればあとはapiと同じ様につかえるんじゃね?
文字コードまわりの処理がちょっと面倒だと思うが
getElementById('meta-preload-data')->getAttribute('content')取って
json_decodeすればあとはapiと同じ様につかえるんじゃね?
文字コードまわりの処理がちょっと面倒だと思うが
740デフォルトの名無しさん (ワッチョイ 6a61-2iSl)
2020/01/31(金) 19:41:52.91ID:sTuegRNa0 作品情報のAPIはこれ
https://www.pixiv.net/ajax/illust/79152593
https://www.pixiv.net/ajax/illust/79152593
741デフォルトの名無しさん (ワッチョイ f689-Kz18)
2020/01/31(金) 20:23:09.76ID:2wi/3AbP0 ありがとうございます。
JSONならなんとかなりそうです。
「/pages」を取るだけだったんですね…
JSONならなんとかなりそうです。
「/pages」を取るだけだったんですね…
742733 (ワッチョイ ea2c-KoMo)
2020/01/31(金) 23:34:14.10ID:/fagGTpB0 >>732
に、API を公開してるって、誰かが書いてる
大々的に横断検索のようなスクレイピングしてると、営業妨害で逮捕される!
ちゃんと会社と契約して、API を使ってやるように!
会社のrobots.txt で、スクレイピングを禁止している場合は、有罪にされる!
クローラーの開発者は、robots.txtに従うべき!
従わないと訴えてくる。特に、5ch みたいなサイトは
クローラーのテストも、自分のPC 内に、Rubyのサーバーを立てて、
そこにウェブサイトのコピーを作って、それにアクセスしてテストする
本当のサイトに対して、テストしたりしない!
何回もテストしていると、営業妨害になるから!
クローラー開発者の大原則!
1. 会社と契約して、API を使う
2. robots.txtに従う
3. 自分のPC内に、サーバーを立ててテストする
それと書き込むときは、名前欄に、717 と入れてください!
誰が書き込んでいるか、分からないので
に、API を公開してるって、誰かが書いてる
大々的に横断検索のようなスクレイピングしてると、営業妨害で逮捕される!
ちゃんと会社と契約して、API を使ってやるように!
会社のrobots.txt で、スクレイピングを禁止している場合は、有罪にされる!
クローラーの開発者は、robots.txtに従うべき!
従わないと訴えてくる。特に、5ch みたいなサイトは
クローラーのテストも、自分のPC 内に、Rubyのサーバーを立てて、
そこにウェブサイトのコピーを作って、それにアクセスしてテストする
本当のサイトに対して、テストしたりしない!
何回もテストしていると、営業妨害になるから!
クローラー開発者の大原則!
1. 会社と契約して、API を使う
2. robots.txtに従う
3. 自分のPC内に、サーバーを立ててテストする
それと書き込むときは、名前欄に、717 と入れてください!
誰が書き込んでいるか、分からないので
743デフォルトの名無しさん (ワッチョイ 2a63-unxX)
2020/01/31(金) 23:59:16.23ID:k4NtdgGW0 一般のブラウザと同程度の頻度でアクセスしている分には
サイト側で区別するのは困難だろうし、
訴えられる事も無いんじゃないかな、知らんけど
サイト側で区別するのは困難だろうし、
訴えられる事も無いんじゃないかな、知らんけど
744デフォルトの名無しさん (ワッチョイ 2a01-I+PI)
2020/02/01(土) 00:45:19.00ID:EnxAFhi/0 >>742
>大々的に横断検索のようなスクレイピングしてると、営業妨害で逮捕される!
>会社のrobots.txt で、スクレイピングを禁止している場合は、有罪にされる!
>何回もテストしていると、営業妨害になるから!
すべてデマ
一般論としてデマ書くくらいは別にいいけど
それを元に人を犯罪者扱いするとそれこそ罪になるから気をつけてね
>大々的に横断検索のようなスクレイピングしてると、営業妨害で逮捕される!
>会社のrobots.txt で、スクレイピングを禁止している場合は、有罪にされる!
>何回もテストしていると、営業妨害になるから!
すべてデマ
一般論としてデマ書くくらいは別にいいけど
それを元に人を犯罪者扱いするとそれこそ罪になるから気をつけてね
745デフォルトの名無しさん (ワッチョイ b501-/fp1)
2020/02/01(土) 00:47:42.04ID:1yCARK9i0 だからAPI公開されてるんだってば
746デフォルトの名無しさん (ワッチョイ 66f2-kxDg)
2020/02/01(土) 00:50:08.53ID:MgOexLzI0 専用ブラウザだろうが一般ブラウザだろうが、使う人間が同じなら同程度のアクセスにしかならんと思う
あと、API使わないWEB通信で専用か一般かを判別するのは無理じゃね?
UAも偽装できるし、そもそも廃止方向だし
あと、API使わないWEB通信で専用か一般かを判別するのは無理じゃね?
UAも偽装できるし、そもそも廃止方向だし
747733 (ワッチョイ ea2c-KoMo)
2020/02/01(土) 01:00:56.04ID:4wtj58110 いたずら電話でも、回数が多いと逮捕される!
一杯逮捕されてるし、有罪にもなってる!
会社は、一般的な用法でアクセスできるようにしてるだけで、
常識内の使い方じゃないと、営業妨害になる
クローラー開発者が、robots.txt に従うのは常識だから、従わないと営業妨害になる。
クローラー開発者はそもそも一般人じゃないし、一般的な使い方じゃない
株取引と同じで、プロの取引だから、守るべきハードルが高い。
これほど専門的な開発者は、素人の一般人が作っていましたという弁明ができない。
専門家として扱われるから
一杯逮捕されてるし、有罪にもなってる!
会社は、一般的な用法でアクセスできるようにしてるだけで、
常識内の使い方じゃないと、営業妨害になる
クローラー開発者が、robots.txt に従うのは常識だから、従わないと営業妨害になる。
クローラー開発者はそもそも一般人じゃないし、一般的な使い方じゃない
株取引と同じで、プロの取引だから、守るべきハードルが高い。
これほど専門的な開発者は、素人の一般人が作っていましたという弁明ができない。
専門家として扱われるから
748デフォルトの名無しさん (ワッチョイ 66f2-kxDg)
2020/02/01(土) 01:09:26.21ID:MgOexLzI0 >>747
誰にレスしてるのか分からないけど、俺にレスしてるんなら改めて書いとく
俺は良い悪いの話をしていない
API非使用の話
同じ人間がスレ見るような使い方はアクセス頻度も負荷も変わらないだろう
判別するのは技術的に無理じゃねえか
以上
弁明とかそんな次元の話をしているのではないので、そこんとこよろしく
誰にレスしてるのか分からないけど、俺にレスしてるんなら改めて書いとく
俺は良い悪いの話をしていない
API非使用の話
同じ人間がスレ見るような使い方はアクセス頻度も負荷も変わらないだろう
判別するのは技術的に無理じゃねえか
以上
弁明とかそんな次元の話をしているのではないので、そこんとこよろしく
749デフォルトの名無しさん (ワッチョイ 2a63-unxX)
2020/02/01(土) 01:22:55.39ID:yTeildyw0 robots.txtの記述に従わないと行けない法的根拠はないんだが
あくまでも、マナーやエチケットのレベル
あくまでも、マナーやエチケットのレベル
750733 (ワッチョイ ea2c-KoMo)
2020/02/01(土) 02:39:22.43ID:4wtj58110 法律では、常識というのが判断基準になる
マナー・エチケットなどは関係ない。
契約していない者同士では、有形力の行使が判断基準
API の契約をした場合は、契約者同士だから、刑事事件にならないけど、
契約をしていない場合は、有形力の行使で判断する
いたずら電話とか、万引き・痴漢・家宅侵入などは、
契約していない者同士での有形力の行使
一般的じゃない使い方は、非常識になる。
プログラミングなど、プロの技術を用いた場合は、一般人と違う扱いになる
一般人が手でクリックした場合と、違う扱いになる
マナー・エチケットも、プロ・素人では、遵守レベルが異なる。
一般人の遵守レベルと、プロの遵守レベルは違う
株取引と同じ。
株はプロの遵守レベルだから、1桁間違って入力しても、勘違いとして撤回できないだろ。
普通の民法なら、錯誤で撤回できるけど
株は一般人の商取引じゃなく、プロの商取引だから、遵守レベルが厳しい
マナー・エチケットなどは関係ない。
契約していない者同士では、有形力の行使が判断基準
API の契約をした場合は、契約者同士だから、刑事事件にならないけど、
契約をしていない場合は、有形力の行使で判断する
いたずら電話とか、万引き・痴漢・家宅侵入などは、
契約していない者同士での有形力の行使
一般的じゃない使い方は、非常識になる。
プログラミングなど、プロの技術を用いた場合は、一般人と違う扱いになる
一般人が手でクリックした場合と、違う扱いになる
マナー・エチケットも、プロ・素人では、遵守レベルが異なる。
一般人の遵守レベルと、プロの遵守レベルは違う
株取引と同じ。
株はプロの遵守レベルだから、1桁間違って入力しても、勘違いとして撤回できないだろ。
普通の民法なら、錯誤で撤回できるけど
株は一般人の商取引じゃなく、プロの商取引だから、遵守レベルが厳しい
751デフォルトの名無しさん (アウアウカー Sa55-x+mg)
2020/02/01(土) 03:15:22.90ID:r8UutYKJa botガイル
■ このスレッドは過去ログ倉庫に格納されています
