X

【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
726デフォルトの名無しさん (ワッチョイ b501-0Ybi)
垢版 |
2020/01/30(木) 21:01:33.81ID:Z7o7STkD0
フォントデザインが違うだけ。
2020/01/30(木) 21:30:24.16ID:N/97jNZ60
>>725
円マークとして表示されてる文字の文字コードが
バックスラッシュと同じ0x5Cならいいんだけど
>>723の円マークは0xA5なので別の文字

バックスラッシュと円マークは同じ場合もあれば
違う場合もあるってこと
728デフォルトの名無しさん (ワッチョイ f689-Kz18)
垢版 |
2020/01/30(木) 21:56:00.67ID:H+L/BkWr0
N/97jNZ60 様
ありがとうございます。
ですが、素人に毛が生えた程度の私では難しいようです。(Rubyもスクリプトもできません)
phpで無理そうなら諦めます。
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行が上の手順に相当する部分
2020/01/30(木) 23:12:03.35ID:OBUYa7FA0
>>728
書いて頂いたスクリプトはPHPではないですがRubyでもないですよ
このスレで解説してもらえるかは分かりませんが
じっくり噛んで飲みこんでいけば消化可能です

がんばれ!
2020/01/31(金) 04:16:30.86ID:Qzj9ULR80
>>729の仕様がわかれば根こそぎダウンロード出来るな
適当なsleep値挟まないと岡崎図書館になりそうでおそろしいw
2020/01/31(金) 04:23:23.85ID:1Ft64C3q0
普通にAPI公開してるんだけど
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側のフォルダをいじる事もできる
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";}
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);
}

保存先やら上書きやら考慮してないからこのままは使うなよ
736デフォルトの名無しさん (ワッチョイ f689-Kz18)
垢版 |
2020/01/31(金) 10:18:31.72ID:2wi/3AbP0
昨日Pixivの件で質問した者です。
皆様のおかげでなんとかできました。
ありがとうございます。
ただ、>>735 さんのようにきれいに書けてないので修正しながら使っていきたいです。
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」のような画像の情報集のようなものがあるのでしょうか?
2020/01/31(金) 19:10:54.05ID:Qzj9ULR80
DOMDocumentで$htmlをロードして
getElementById('meta-preload-data')->getAttribute('content')取って
json_decodeすればあとはapiと同じ様につかえるんじゃね?
文字コードまわりの処理がちょっと面倒だと思うが
2020/01/31(金) 19:41:52.91ID:sTuegRNa0
作品情報のAPIはこれ
https://www.pixiv.net/ajax/illust/79152593
741デフォルトの名無しさん (ワッチョイ f689-Kz18)
垢版 |
2020/01/31(金) 20:23:09.76ID:2wi/3AbP0
ありがとうございます。
JSONならなんとかなりそうです。
「/pages」を取るだけだったんですね…
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 と入れてください!
誰が書き込んでいるか、分からないので
2020/01/31(金) 23:59:16.23ID:k4NtdgGW0
一般のブラウザと同程度の頻度でアクセスしている分には
サイト側で区別するのは困難だろうし、
訴えられる事も無いんじゃないかな、知らんけど
2020/02/01(土) 00:45:19.00ID:EnxAFhi/0
>>742
>大々的に横断検索のようなスクレイピングしてると、営業妨害で逮捕される!
>会社のrobots.txt で、スクレイピングを禁止している場合は、有罪にされる!
>何回もテストしていると、営業妨害になるから!

すべてデマ
一般論としてデマ書くくらいは別にいいけど
それを元に人を犯罪者扱いするとそれこそ罪になるから気をつけてね
745デフォルトの名無しさん (ワッチョイ b501-/fp1)
垢版 |
2020/02/01(土) 00:47:42.04ID:1yCARK9i0
だからAPI公開されてるんだってば
2020/02/01(土) 00:50:08.53ID:MgOexLzI0
専用ブラウザだろうが一般ブラウザだろうが、使う人間が同じなら同程度のアクセスにしかならんと思う
あと、API使わないWEB通信で専用か一般かを判別するのは無理じゃね?
UAも偽装できるし、そもそも廃止方向だし
2020/02/01(土) 01:00:56.04ID:4wtj58110
いたずら電話でも、回数が多いと逮捕される!
一杯逮捕されてるし、有罪にもなってる!

会社は、一般的な用法でアクセスできるようにしてるだけで、
常識内の使い方じゃないと、営業妨害になる

クローラー開発者が、robots.txt に従うのは常識だから、従わないと営業妨害になる。
クローラー開発者はそもそも一般人じゃないし、一般的な使い方じゃない

株取引と同じで、プロの取引だから、守るべきハードルが高い。
これほど専門的な開発者は、素人の一般人が作っていましたという弁明ができない。
専門家として扱われるから
2020/02/01(土) 01:09:26.21ID:MgOexLzI0
>>747
誰にレスしてるのか分からないけど、俺にレスしてるんなら改めて書いとく

俺は良い悪いの話をしていない
API非使用の話
同じ人間がスレ見るような使い方はアクセス頻度も負荷も変わらないだろう
判別するのは技術的に無理じゃねえか

以上
弁明とかそんな次元の話をしているのではないので、そこんとこよろしく
2020/02/01(土) 01:22:55.39ID:yTeildyw0
robots.txtの記述に従わないと行けない法的根拠はないんだが
あくまでも、マナーやエチケットのレベル
2020/02/01(土) 02:39:22.43ID:4wtj58110
法律では、常識というのが判断基準になる

マナー・エチケットなどは関係ない。
契約していない者同士では、有形力の行使が判断基準

API の契約をした場合は、契約者同士だから、刑事事件にならないけど、
契約をしていない場合は、有形力の行使で判断する

いたずら電話とか、万引き・痴漢・家宅侵入などは、
契約していない者同士での有形力の行使

一般的じゃない使い方は、非常識になる。
プログラミングなど、プロの技術を用いた場合は、一般人と違う扱いになる

一般人が手でクリックした場合と、違う扱いになる

マナー・エチケットも、プロ・素人では、遵守レベルが異なる。
一般人の遵守レベルと、プロの遵守レベルは違う

株取引と同じ。
株はプロの遵守レベルだから、1桁間違って入力しても、勘違いとして撤回できないだろ。
普通の民法なら、錯誤で撤回できるけど

株は一般人の商取引じゃなく、プロの商取引だから、遵守レベルが厳しい
2020/02/01(土) 03:15:22.90ID:r8UutYKJa
botガイル
2020/02/01(土) 05:09:00.85ID:IZAG69wa0
それ有名なrubyキチだから相手にするだけ時間の無駄やで
2020/02/01(土) 11:30:39.83ID:ldPcUcvt0
pixivとか大きいところならインフラで帯域制御してるだろうから、IP詐称やら多数の接続元やらで大規模にやらない限り、
スクリプトでのDLは気付かないだろうし看過されるだろうけどね
逆に目立てば注意とか何も言われず制限とかされる

まあ、インターネットがある意味良識で成り立ってるところもあるから、あまり変なことはしない方がいいよ
自分のことばかり考えるなってね
754デフォルトの名無しさん (ワッチョイ b501-+mJQ)
垢版 |
2020/02/02(日) 11:44:23.24ID:OTJ5GLO00
サイト内検索を設置したいのですがわかりません 
どのように作ればよいのでしょうか?
2020/02/02(日) 11:54:17.96ID:lNG3EL+m0
サイト内の何を検索したいのかを言わないと
2020/02/02(日) 12:50:13.69ID:ceem9FS20
サイト内検索は、Google を使えば?
「site:URL 検索したい文字列」だろ

このコントロールを、はめ込めば良いのでは?
757デフォルトの名無しさん (ワッチョイ a602-ZjM+)
垢版 |
2020/02/03(月) 04:24:06.78ID:w78j2Hgc0
サイト内のキーワードを検索したいんです
絞り込み検索など
2020/02/03(月) 04:30:12.91ID:YoBHNt100
多くのサイトが、Google のコントロールを使っているから、

Googleが配布しているのでは?
759デフォルトの名無しさん (ワッチョイ 3d7c-a4zy)
垢版 |
2020/02/03(月) 21:07:08.59ID:zKdzrXwz0
平面上に座標の判明している点が数百あるとして、全ての点どうしの距離を
計算時間はかかって構わないのでハングしないように計算したいのですが
PHPではどうやったらいいのでしょうか

普通のPHPプログラムと同じように
点の座標情報をリクエストとして受け取って
全ての計算が終わったらブラウザにレスポンスしたいです
2020/02/03(月) 21:21:55.23ID:7cu/pWw8r
普通に2重for文で愚直に計算すればいいんじゃねーの
数百程度なら一瞬でしょ
2020/02/04(火) 09:19:02.42ID:6/2RTZHA0
Ruby なら、標準のwebrick サーバーで、
VSCode の拡張機能、REST Client で、JSON 文字列をPOST すると、同じ配列が返ってくる。
CGI にも出来る

POST http://localhost:8888/ HTTP/1.1
content-type: application/json

[[0,0],[10,20],[10,10]]

以下は、Ruby

require 'webrick'
require 'json'

srv = WEBrick::HTTPServer.new( {
:DocumentRoot => './',
:BindAddress => '127.0.0.1', :Port => 8888 } )

srv.mount_proc( '/' ) do |req, res|
res[ "content-type" ] = "text/plain"

ary = JSON.parse( req.body ) # JSON 文字列から、Ruby のオブジェクトに変換する
# ここで、ary を処理する
result = JSON.generate( ary ) # Ruby のオブジェクトから、JSON 文字列に変換する

res.body = result
end

Signal.trap( :INT ){ srv.shutdown } # Ctrl+C で終了
srv.start
2020/02/04(火) 10:26:16.95ID:a9RPAFSb0
>>759
長い計算で問題になるのはタイムアウトと使用人数
色々考慮しないといけないのでケースバイケースになるが
そういう計算はJavaScriptでやったほうがいいと思う
非力な環境考慮やスマホの節電狙ってるならとめはしないが

基本はある程度計算した時点で(タイムアウトする前に)一度レスポンス返して
計算再開するようリクエスト再送して計算終わるまでそれを繰り返すとか
サーバ側でタイムアウトを無効にしてマルチスレッドで計算しながら
Transfer-Encoding: chunked(flush関数)とかでなんかブラウザに送り続けるとかそんなところ
あと設定したことないので確認はしてないがxhr使えばブラウザ側のタイムアウトは無効に出来るはず
大人数で使う&計算が数時間に渡る場合サーバ側タイムアウトを無効にするような計算はしないほうがいい
2020/02/04(火) 10:59:31.95ID:6/2RTZHA0
確かに、計算のタイムアウトなどを考えたら、

AWS Lambda などを使った方がよい
764759 (ワッチョイ 3d7c-a4zy)
垢版 |
2020/02/04(火) 14:13:53.25ID:D53RXKif0
>>760
450点あたりで
計算は10万回超えちゃいそうな気がするんですが…

>>762
あざます、そんで説明下手ですみません
アクセス数とか、ユーザビリティ的なことはそれほど考えなくていいんです

説明が難しいんですが、MovableTypeみたいな動き方と言いますか
このプログラムを一度実行することで静的なファイルを生成して
ウェブのユーザにはそのファイルを見てもらうことになるので

なのでとりあえず、10万なら10万回
時間かけていいんで、PHPがハングしないように計算を終えて
その結果が出たら、ブラウザに返したいな、と

昨夜自分で考えて
PHPは1点ずつの計算結果をテキストファイルとして生成して
ブラウザはそのファイルが出来ているか定期的にポーリングする
みたいなことを考えたんですが…
2020/02/04(火) 14:21:15.46ID:gHL4c7Fjr
じゃあ高速フーリエ変換でもすれば
2020/02/04(火) 15:04:39.24ID:lLuVC2X20
それがサーバー上にあって、割と自由にいじれるなら
バッチ処理で結果を出して表示にしたら良いんじゃないかな
767759 (ワッチョイ 3d7c-a4zy)
垢版 |
2020/02/04(火) 16:28:58.13ID:D53RXKif0
>>766
点の情報は、ブラウザからJSONかCSVかXLSXかでポストさせるので
実行時点で数が不明ですので、クロンを書くのも難しいかなと

たぶんポストされた座標データ群を基に

foreach($datas as $data){
foreach($datas as $data){
// ここで距離を計算
// 計算済みのものは除外
}
}

みたいになるわけですが、$datasの数が多いと止まってしまうので
非同期でいいので止まらない方法はないものかなと
2020/02/04(火) 17:30:21.86ID:26FK/H9g0
数百の点同士だから最大1000 x 1000でも100万でしょ
floatだとしても100msもかからないと思うんだけどそれでハングするの?

クライアント側で計算させても一瞬だから
ラウンドトリップさせるのをやめて計算結果だけ非同期で受け取るようにしたほうが
ユーザーにとっても運用してる側にとってもいいと思う
769759 (ワッチョイ 3d7c-a4zy)
垢版 |
2020/02/04(火) 17:37:32.11ID:D53RXKif0
>>768
あざます
大丈夫ですかね?100万回
とりあえずストレートにやってみようかなあ…
2020/02/04(火) 23:05:49.06ID:6/2RTZHA0
JSON が普通。
非同期処理なら、Ajax を使う方法もある

C/C++ で計算だけして、ファイルに書き込んでから、
ウェブサーバーで、そのファイルを見れば?

計算速度が遅くてもよいなら、どの言語でも良いし
2020/02/04(火) 23:14:48.03ID:lLuVC2X20
実際の処理時間次第って気がする
10分程度なら、そのまま終わるのを画面監視して待っていれば良い
数時間以上掛かるなら、結果をメールで送ってもらうなり
夜間バッチで動かしておくのも良いかも
2020/02/05(水) 00:24:15.42ID:NEouxGwD0
クライアント/サーバー間の通信は、JSON で良いけど、
元のデータは、CSV の方が、データベースとの連携でも簡単かも

そして、CSVを計算して、ファイルに書き込む

JSON
[[0,0],[10,20],[10,10]]

CSV
x,y
0,0
10,20
10,10
773デフォルトの名無しさん (ワッチョイ 7f89-IOUD)
垢版 |
2020/02/05(水) 11:25:21.84ID:2PM+quj20
$url = "https://page.auctions.yahoo.co.jp/jp/auction/u332334293";; //エロ個別ページ
//$url = "https://page.auctions.yahoo.co.jp/jp/auction/n399439358";; //ノーマル個別ページ
$filestr = file_get_contents($url);
echo $filestr = mb_convert_encoding($filestr,'utf8','auto');

こんな感じでヤフオクのページにアクセスしたいんだけど、
通常のページなら問題ないけどアダルトカテゴリの場合ログインしてくださいとなる
この場合ログインなしで対処することはできますか?
2020/02/05(水) 11:42:40.50ID:6W4fVUG70
そういやヤフーの文字画像認証って難易度高過ぎだよね。
この間パスワード連続間違いやらかして文字画像認証になったんだけど、まともに読めなかったw
2020/02/05(水) 23:01:50.84ID:NEouxGwD0
漏れは、Ruby で、Selenium WebDriver, Nokogiri などで、
Chrome, Edge などのブラウザーを自動操作して、スクレイピングするけど

ここに書いておいた

【VBScript】WSHについて話し合うスレ【JScript】
https://mevius.5ch.net/test/read.cgi/tech/1578522041/24-27
2020/02/06(木) 00:07:34.22ID:UYgbv9bH0
fopenでファイルに書き込んでいたのですが
突然文字化けするようになったのですが
ファイルも送信もUTF-8なのですが
$str = mb_convert_encoding($str, "UTF-8");
のようにする必要性も感じないのですが
これはサーバー側の問題なのでしょうか
2020/02/06(木) 04:47:55.73ID:/hIhK6yv0
相手のサーバーか、または自分のプログラムのファイルを保存した際に、

文字コードが異なるとか、BOM 有りUTF-8 になってるとか?
2020/02/06(木) 12:12:05.29ID:NnjjFI0X0
>>773
どういう目的で取得するのかしらんけど
googleのキャッシュならそこそこ取れてるようだから
そこに欲しい情報があれば検討したら?
https://webcache.googleusercontent.com/search?q=cache:https://page.auctions.yahoo.co.jp/jp/auction/u332334293
まあ普通にログインしてやればいいと思うけど
ヤフーにcaptcha認証なんてあったっけ?記憶にないな

しかしなんだねこのいかがわしい人形はw
779デフォルトの名無しさん (ワッチョイ 7f89-IOUD)
垢版 |
2020/02/06(木) 17:18:10.95ID:mIIVuTqX0
>>778
検索かけて出てきた商品情報から希望要項に合うものピックアップし、
その中にある画像をまとめて表示させるて一気に見たいと思って作ってた
そしたら呼び出せない項目があって内容見てたらアダルトカテゴリに該当するものだった

キャッシュ必要だと使うのは難しいな
780デフォルトの名無しさん (ワッチョイ 9701-YmmE)
垢版 |
2020/02/06(木) 21:08:13.30ID:qcCZ1na20
返り値が空と表示されるのですがどうすれば治るのでしょうか?
781デフォルトの名無しさん (ワッチョイ 9701-L9ne)
垢版 |
2020/02/06(木) 22:00:14.76ID:qcCZ1na20
空だと表示される原因としてmariadbの設定を適当にしてしまった
phpadminを使用している時のユーザー名パスワードとmariadbを作成した時のパスワード又はユーザー名が全く別のものだと考えられるのですが原因はやっぱりこれでしょうか?
782デフォルトの名無しさん (ワッチョイ 9701-L9ne)
垢版 |
2020/02/06(木) 22:02:13.41ID:qcCZ1na20
コマンドプロンプトで消せと書いてあるんですがデータのみインストールでzipからインストールしなかった場合消せるのでしょうか?
2020/02/07(金) 09:05:50.45ID:qw7QPilU0
0.1を10回足しても1.0にならないのはおかしい
2020/02/07(金) 09:42:40.68ID:IMRBAKuu0
>>780
君は一体なんの話をしてるのかね

>>781
多くの言語は0.99999とかになるのだがw
2020/02/07(金) 09:43:31.21ID:IMRBAKuu0
↑の下は>>783
2020/02/08(土) 09:15:29.74ID:dJyCpuORr
mysqli関数使ってるんだが、PDOについて質問です。

別のDBMSに乗り換えるときに便利、みたいな記事をよく見ますが、DBMSごとにSQL文の制約が少しずつ違いますよね?

この差はPDO自体は吸収できませんよね?コードで分岐するしかないんですよね?

すると、MySQLしか使わない限りは、PDOを使うメリットって何でしょうか?
2020/02/08(土) 10:26:28.77ID:zZtEQOJV0
>>786
DBMS依存の書き方が多いなら無理して使う必要もないんじゃね。
専用のやつの方がパフォーマンスもいいんだろうし。
2020/02/08(土) 14:08:52.88ID:iOIJiyGE0
>すると、MySQLしか使わない限りは、PDOを使うメリットって何でしょうか?
自分で使うもので将来的な移行もありえないならメリットは特にない
pdoのほうがよりモダンなコードで書けるぐらいか
パフォーマンスは公式にも書いてるけどどのAPI使ってもほぼ同じで誤差程度
2020/02/08(土) 14:31:04.68ID:Jjt1u8eP0
>>787
>>788
レスありがとう。
そっか、じゃあインジェクション対策もしてあるからこのままで行きます。
2020/02/12(水) 15:56:54.08ID:Q5WPE+fg0
ID:qcCZ1na20
はとりあえず日本語から勉強し直せ
アホー知恵袋より酷いぞ

つかプログラミング向いてないから手遅れになる前に諦めた方がいいんじゃね?
2020/02/12(水) 17:49:58.19ID:qFSwmyrvM
アップロードしたファイル名をDBに書き込んでファイルはtmpディレクトリに保存しておくときって
ファイルの名前はハッシュ値に変えるべきかそのままのファイル名で処理するかどっちがいいの?
2020/02/13(木) 15:55:19.51ID:ngv8BCkj0
いつ消えるかわからないtmpに保存しとくって解せぬ
ファイル名をハッシュ値に変える意味はわからないけどそこは好きにすればいいのでは
2020/02/15(土) 18:10:33.43ID:ndNA2Bw/0
下記記述のようにグローバルな場所で $arr を出力することはできたのですが、
関数の中で出力するとエラーになってしまいます。
PHPだと親に位置する変数って参照できないのでしょうか?


$arr = [
'a' => 1,
'b' => 2
];
var_dump($arr);

function test() {
var_dump($arr);
};
test();
2020/02/15(土) 18:16:15.52ID:Y132p/bJ0
>>793
function test() {
global $arr;
2020/02/15(土) 18:30:10.65ID:ndNA2Bw/0
>>794
どうも。
教えていただいた記述ではエラーが出てしまい、下記にしたらいけました。
仕組みググってきます!

var_dump($GLOBALS['arr']);
796デフォルトの名無しさん (ワッチョイ 8689-RqZf)
垢版 |
2020/02/15(土) 22:52:13.91ID:wgObr5UE0
質問です。
色の近さを測る方法ってあるでしょうか?
例えば、
A.#4169e1 B.#ff7f50 C.#dc143c
があった場合、Cにより近い色はAとBどちら?
といった感じで使いたいです。
2020/02/15(土) 23:32:30.86ID:f7hi9XcW0
色コードといえば、RGBとかHSVとかCYMKとか習うと思うけど、これらは数学的にいうと、(ベクトル空間みたいな)色空間上の位置を持った点を意味する。
色の近さは色空間での2点間の距離の長さ。というわけで、色空間と距離の定義しだい。
2020/02/16(日) 00:01:58.16ID:iNVxJNOu0
https://ja.wikipedia.org/wiki/色差

DeltaE00をRGBから計算する
面倒くさいのでライブラリ的なの探す
799デフォルトの名無しさん (ワッチョイ 8689-RqZf)
垢版 |
2020/02/16(日) 00:14:57.82ID:KR6y1seH0
思った以上に難しそうだな…
16進数だからC-AとC-Bを行い絶対数の小さい方が似てる色くらいに思ってたぜ
2020/02/16(日) 00:30:14.36ID:yQcmKOn30
まずはRGBコードをHSVに変換してみましょう。
2020/02/16(日) 00:32:40.25ID:+ZLQtp1jd
https://github.com/katahiromz/color_value
C言語だけどこれで良ければ
2020/02/16(日) 03:32:24.89ID:Tw+Vg2AB0
色の近さの判断基準が分からんとな。
とにかくRGBをHSVなりに変換したとして、
色相(H)が近ければ濃さ(S)や明るさ(V)はどうでもいいのか?
どうでもよくないならそれぞれのパラメータの重みを決める必要があるな。
2020/02/16(日) 07:16:26.92ID:5EL9p8ON0
SASS のmixin に、そういう機能は無いのか?
2020/02/16(日) 08:37:59.92ID:B0xDVat5r
単純に3次元ベクトルの距離差だけでよいじゃん
RGBなんだし
2020/02/16(日) 10:40:08.82ID:e/9Szh9J0
人の目に感じる色の近さは、RGBの数値だけでは判定できないな
色合いと彩度で比較する方が感覚に近い
2020/02/21(金) 10:38:09.06ID:uhz6TO4QM
csvをアップロードして中身読み込んで確認画面を出して問題なければDBに登録する仕組み作ってるんですけど
ページ間のデータ渡しって2Mくらいのそれなりに大きいデータでもセッションで大丈夫ですか?
2020/02/21(金) 11:04:55.83ID:KI0NB2iSM
セションの中身はディスクに書いてるんだろうから、2MBくらいなら保存自体の問題は無いんじゃね。
でも不要になったらセッションからさっさと削除しないと、毎回そのデータがメモリにロードされることになる。
セッションとは別に一時ファイルに書き出してそのファイル名をセッションで保持するのがスマートな気がするけど、一時ファイルの掃除の方法を別途考えないといけないのが面倒だな。
2020/02/21(金) 11:36:12.22ID:uhz6TO4QM
>>807
ありがとうございます!
ファイルに保持させる方法も考えてみます
2020/02/21(金) 12:41:45.52ID:KI0NB2iSM
>>808
一時ファイルの掃除のためにこの辺を読んでおくといいと思う。
https://www.php.net/manual/ja/session.customhandler.php

destroy とか gc で一時ファイルを掃除する必要があるはず。
810デフォルトの名無しさん (ワッチョイ 8f89-sS5o)
垢版 |
2020/02/23(日) 17:03:54.18ID:LPteoL8J0
preg_match_allを使ってリンク先が画像のURL取得したいんだけど正規表現がわかりません。

これを↓
<a href="http://img.hoge/001.jpg"; target="_blank">
こうしたい↓
http://img.hoge/001.jpg
作ってみたのがこれ↓
preg_match_all('/href="(.*?)(jpg|jpeg|png)?"/', $html, $imgurllist);

わかる方いらっしゃいました教えて下さい。
2020/02/23(日) 17:21:12.17ID:UC/kHLCn0
"の前に\が必要かも?
href=\"(.*?\.png|.*?\.jpeg|.*?\.jpeg)\"
なんてどうでしょう
2020/02/23(日) 17:21:56.35ID:UC/kHLCn0
最後はjpgの間違い
2020/02/23(日) 18:39:43.25ID:p2aTkQco0
なんでもかんでも正規表現でやらんほうがいいよ
ちゃんとしたの書くの難しいし何より自分がわからないのは良くない
多少時間はかかるかもしれないが
getElementsByTagName('a')->getAttribute('href')でa hrefのリストとってきて
1個ずつpathinfo['extension']を見ていく感じ
pathinfo['extenstion']の?以降を除外してstrtolowerで拡張子小文字にした上で
in_arrayあたりで比較すればいいんでは?
2020/02/23(日) 19:13:36.62ID:xNzf67+4a
正規表現なら一行で書けるのにごちゃごちゃ関数かます方が意味分からない
2020/02/23(日) 19:21:02.12ID:S7JwB5qb0
あの呪文のような記述を受け付けない人もいるみたいだ
俺は好きなんだけどな
2020/02/23(日) 19:29:10.11ID:EUelPM9rM
>>814
一行で書いてみ
もちろん810がやろうとしてるザルなのはだめな
2020/02/23(日) 19:52:51.22ID:xNzf67+4a
新手の教えて君か?
その手には乗らねーよ
2020/02/23(日) 20:18:07.28ID:EUelPM9rM
ま、こんなもんだろ
口先だけで自信ないから書けない
正規表現なんて書けた気でいるやつが大半でバグの温床
本当にちゃんと書けるやつだけ使えな
2020/02/23(日) 20:46:46.39ID:xNzf67+4a
頭がバグってるやつに言われてもね
2020/02/23(日) 21:13:29.11ID:0sUq9sLC0
>>818
自分が有能と勘違いしてるプログラマにありがちだな
教えて→こんなこともわからないの?底辺!→はよ教えて→考える力が身につかないよ!自分でやれ!→はよ教えて→無言で逃走
2020/02/23(日) 21:37:24.28ID:rIVuphj20
先輩が書いたコードを見ると $_SERVER などの取得する値に対して
urldecode やら isset やらで本当にその値か正しいものかどうか、セットされてるかどうか
毎度調べてるようなのですが、正しくない場合の事例が書いてあるサイトってありますか?

また、この手のエスケープや存在確認やらがまとめてあるサイトもあれば教えていただけますでしょうか。
自分では追っかけきれず、毎度先輩に迷惑掛けてしまっている状態で申し訳ないっす…
2020/02/23(日) 22:27:34.54ID:jUm6GNGX0
横からワロス

>>817
なんでわざわざ二レス三行も書いて、一行で書けるものを書かないのか
2020/02/24(月) 11:46:26.32ID:/D+Ss1rU0
>>821
$_SERVERで取れるのは環境変数
環境変数って言うぐらいだから、その値が必ずある保証なんてないし、めちゃくちゃな値をセットする事もできる

例えば
$_SERVER['HTTP_USER_AGENT']
とかな。自分でめちゃくちゃな値をセットして自分で実験してみたらいい

isset()なんか使わんけどねw
あるか無いか分からない時は getenv() 使えばいい

urldecode()にいたっては検証用の関数ですらない
URLエンコードされたデータをデコードしてるだけ

なんていうかHTTPの基礎から理解できてない
とりあえずGoogle Chromeのデベロッパツールでも眺めてHTTPの流れから理解した方がいいんじゃね?
2020/02/24(月) 11:58:40.79ID:/D+Ss1rU0
>>818
ペチパーはクソ正規表現をネットに載せるな!って昔からよく馬鹿にされるからなぁ…

まずは>>813のようにHTMLをパースする別の手段を検討すべき
その上であえて正規表現を選ぶってのなら別にいいけどさ
2020/02/24(月) 12:00:32.05ID:/D+Ss1rU0
>>810
くそ適当に書くけど

$html = '<a href="http://img.hoge/001.jpg"; target="_blank">';

preg_match_all('/href\s*=\s*([\'"])(.+?\.(?:jpe?g|png))\\1/i', $html, $match, PREG_SET_ORDER);
print_r($match);

・大文字小文字の考慮
・スペース文字の考慮
・シングルクォートで挟むのかダブルクォートで挟むのかの考慮

正規表現を使うならせめてこれぐらいはしようよw
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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