質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

2890閲覧

file_get_contentsが使用禁止だったときの代わり

退会済みユーザー

退会済みユーザー

総合スコア0

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2021/05/05 07:11

編集2021/05/05 07:32

前提・実現したいこと

file_get_contensがサーバーのセキュリティ上禁止だったのでcurlという関数で
「取り出したいデータのファイル」にある

<div class="menu">から</div>までをget通信でedit.phpにurlを渡し、内容を取り出したいのですが、mb_subster等を使いとりだしを試みましたが分からなかったので取り出しかたを教えてください。 よろしくお願いします。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

php

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="utf-8"> 5 <title>取り出したいデータのファイル</title> 6</head> 7<style> 8</style> 9<body> 10 11 <form method="get" action="../edit.php"> 12 <button type="submit" name="edit" value="<?php echo (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];?>">編集</button> 13</form> 14<div class="menu"> 15 <h1>メニュー</h1> 16 <p>カレー</p> 17 </div> 18</body> 19</html>

php

1edit.php 2<!DOCTYPE html> 3 4<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> 5<head> 6 <meta charset="utf-8" /> 7 <title>別のファイルを表示したいファイル</title> 8 9</head> 10<style> 11 12</style> 13<body> 14<?php 15echo $_REQUEST['edit']; 16 17$url = $_REQUEST['edit']; 18 $conn = curl_init(); // cURLセッションの初期化 19 curl_setopt($conn, CURLOPT_URL, $url); // 取得するURLを指定 20 curl_setopt($conn, CURLOPT_RETURNTRANSFER, true); // 実行結果を文字列で返す。 21 $res = curl_exec($conn); 22 echo ($res); 23 curl_close($conn); //セッションの終了 24?> 25</body> 26</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/05/05 07:34

すみません。 更新しました。 端的にいうと、ページ全ての内容全ては取り出せますが、一部だけとなると分からなかったため教えてください。
m.ts10806

2021/05/05 07:36

どんなデータがあってどのように取り出したいのか分からないと、なんとも。 いずれも「指定のURLの出力」を受け取るので、受け取る形態によりやることが違います。
退会済みユーザー

退会済みユーザー

2021/05/05 07:48

>どんなデータがあって これを取り出す方法を教えていただければなと思います。 <div class="menu"> <h1>メニュー</h1> <p>カレー</p> </div> >どのように取り出したいのか 普通のテキスト形式(文字列)で取得したいです。
Y.H.

2021/05/05 08:59

> file_get_contensがサーバーのセキュリティ上禁止だったので file_get_contentsが使用できる場合は問題ないんですね? であれば、file_get_contents を使用した場合のコードを質問を編集し記載された方がやりたいことがダイレクトに伝わり回答を得やすいと思います。
m.ts10806

2021/05/05 11:22

>これを取り出す方法を教えていただければなと思います。 ですから、どういう情報の中の?という話をしています。 HTMLの解析をしたいのか、自由に取り出したいのか、本当にそれだけなのか 全体像から出ないと的確なアドバイスにはなりません。 まぁもしスクレイピング目的なら「そもそも勝手に抜くことが許可されてるのか」という話になりますけどね。
退会済みユーザー

退会済みユーザー

2021/05/06 00:36

レンタルサーバーによっては、外部コンテンツの取得そのものができないようカスタマイズが施されている場合がありますので、cURL使うとしてもやっていいかどうかは確認しておいたほうがよろしいかと。
退会済みユーザー

退会済みユーザー

2021/05/06 00:42

m6u様 ありがとうございます。 過去の事例とか検索してみます。
guest

回答3

0

質問文がイマイチつかみ所がないのでエスパー気味に想像で答えますが、以下の方法を模索すればどうでしょう

  • cURLですべてのHTMLを取得した後に、正規表現などで必要な箇所のみ抜き取る(file_get_contentsの手法とそれほど変わらず)

参考)
https://blog.ver001.com/file_get_contents_curl/

  • スクレイピングのライブラリを使用する(PHP Simple HTML DOM Parserなど)

参考)
https://zenn.dev/sa2kiryo/articles/87471a5935f40d559cba

たぶんやろうとしてることはスクレイピングの一種だと思うので、その手の既存のライブラリを活用した方が楽じゃないですかね?

投稿2021/05/05 10:42

AbeTakashi

総合スコア4539

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/05/05 12:08

なるほど、ライブラリもあるのですね。 ありがとうございます。 しかし、やりたいことはスクレイピングではなかったようです。すみません。 もう一度、curlについて勉強し直してきます。
guest

0

ベストアンサー

file_get_contents()をcurl_init()からcurl_close()までの5行と置換えるだけでは?

php

1<?php 2// ・・・略・・・ 3 4// $html = file_get_contents('ページのURL'); 5//↓以下5行に置換え 6 $conn = curl_init(); // cURLセッションの初期化 7 curl_setopt($conn, CURLOPT_URL, $url); // 取得するURLを指定 8 curl_setopt($conn, CURLOPT_RETURNTRANSFER, true); // 実行結果を文字列で返す。 9 $html = curl_exec($conn); 10 curl_close($conn); //セッションの終了 11 12 $start_leng = mb_strpos($html,'<div id="news">') ; 13 $end_leng = mb_strpos($html,'</div><!-- #news -->') - $start_leng ; 14 echo mb_substr($html, $start_leng , $end_leng );

投稿2021/05/05 10:30

編集2021/05/05 12:28
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/05/05 12:06 編集

ありがとうございます。 理解できなかったので、とりあえずもう一度curlについて調べようと思います。
guest

0

php

1$html = file_get_contents('ページのURL'); 2$start_leng = mb_strpos($html,'<div id="news">') ; 3$end_leng = mb_strpos($html,'</div><!-- #news -->') - $start_leng ; 4echo mb_substr($html, $start_leng , $end_leng );

投稿2021/05/05 10:01

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2021/05/05 10:23

ここは回答を記載する所です。 質問を編集し記載しましょう。
退会済みユーザー

退会済みユーザー

2021/05/08 06:28

削除できません。 これはこのままにして 質問文に記載します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問