これはどういう意図や利便性があっての仕様なのでしょうか?
cURLを実装したのですが
php
1$info = curl_getinfo(); 2$url = $info['url'];
とすると、$url に末尾スラッシュがつきます。
個人的に末尾スラッシュは毎回なしで統一しているのでここでもrtrimをかけたのですが、そもそもなぜ末尾スラッシュがつく仕様なのでしょうか?
便利なこと、なくて困ることってありますか?
PHP 7.2.4 です
「URL トレイリングスラッシュ」でググってみることをお勧めします。
トレイリングスラッシュと仰いますとSEOの観点からの話かと思いますが、cURLにおける自動付与の有用性についての質問と、どのように関わりますでしょうか?
さっそく以下でググりましたが
「URL トレイリングスラッシュ "cURL"」
しかし以下のリンクくらいしか目につかず、いまいち理解が及びませんでした。
・https://curl.haxx.se/mail/archive-2016-08/0026.html
・https://teratail.com/questions/69909
なんか「仕様」に便利もなにもないと思うんですけど。。
2つ目のteratailのリンクで理解が及ばないとなると、解決は難しいのでは。ひとまず「そういうもの」と飲み込んでおくべき場面って多いですよ。
有用かどうかは自身の要件と照らし合わせて決めるところだと思います。
一般的に何かと作るとなればなるべく便利な仕様に設計すると思うのですけど。
あとteratailのリンクはcURL実行時のurl(curl_execの方)で、戻り値のurl(curl_getinfoの方)ではないと思います。
>便利な仕様に設計すると思うのですけど。
それは個人の思い込みで、実際には作った人にしか意図は分かりません。
あなたにとって便利かどうかは作った人は気にしません。どの言語にも「全ての人にとって便利な仕様になっている機能」ってないですよ。
だから機能と機能を組み合わせて自分で自分のために便利な機能を作ることになります。
(ちなみに、「仕様」とは言語だけに限らず、サーバ、ブラウザ 全てをさします)
あの、私にとっての便利などというお話はしてないですし、全ての人にとって便利な仕様になっている機能なといった話もしてませんが…コメント先をお間違いでしょうか?
機能なといった話
↓
機能などといった話
curl_getinfoを引数なしで呼ぶことはできないかと思いますが、curl_initも含めてコードを書いていただけないでしょうか?
> 私にとっての便利などというお話はしてないですし、全ての人にとって便利な仕様になっている機能なといった話もしてませんが…
「便利な仕様」を考えるときは、それが「誰にとって」便利なのか、という観点が必要です。
>引数
こちらの通りです
https://qiita.com/Hiraku/items/1c67b51040246efb4254
「誰にとって」は便利の思想に定義上必須です。しかしm.ts10806さんのような個か全かではありません。個への対応は不便を助長し、全は困難です。ゆえに「多くの人にとって」という思想に基づいて仕様は設計されます。これは極めて常識であり、「個人の思い込み」などの断ずるのはいかがなものでしょうか。
> こちらの通りです
質問文と違いすぎて対応が分かりづらいです。ひとまず、「期待されるURL」と「実際に返ってきたURL」はどのようなものだったのでしょうか?
期待は末尾スラッシュなしです。なぜならCURLOPT_URLでなしを送ったからです。
しかし戻り値は末尾スラッシュありでした。
そのため「わざわざどうして追加するのか」と生じた疑問になります。
送ったURLは、「http://example.com のように、パスのないルート直下」でしょうか?それとも、「パスのあるもの」でしょうか?
失礼いたしました。「パスのあるもの」になります。
「http://example.com/myapi?q=words&limit=10&offset=0」
のような形でパラメータもございます。
> トレイリングスラッシュと仰いますとSEOの観点からの話かと思いますが
違います。より一般的な末尾のスラッシュの話です。
すでに回答が付いていますが、スラッシュの有無は「ディレクトリ」を指すのか「ファイル」を指すのか、という違いが基本的にはありますす。これは通常CUIでディスク内のファイルシステムを操作するときと同じです。
その上で、URLを解釈するプログラム側で、末尾スラッシュの有無を補完するような実装がされているケースも数多くあります。
質問文で具体的なURLが明示されていないため、まずは上記の認識があるのかどうか、という意味でのコメントでした。