关于使用curl 调用其他工程方法
2013-11-07 13:08
232 查看
在此记录一下,做跨工程调用方法,
java里面可能就是用导入jar包的形式,
但是php很难找到相关中文资料,
有的话也是千篇一律的copy而来
昨晚特别去拜访了一下同一个团地的大神
受大神指点迷津,又上网找了一下日文和英文资料
终于成功通过
方法1
如果是想用引用的话,就在先的一方的顶部加上include_once(../工程名/Controller名/Method名)
方法2
如果是想要返回结果和传参数的话,用这个其实更简单
就是大名鼎鼎的——》 CURL
首先在元的一方写入方法内容,并以Json的形式返回
该indexTest方法的路径是在Project1/app/Controller/PhoneController
然后在先的一方写入curl相关的参数设定
public function admin_test() {
$url = "http://127.0.0.1/project1/phones/indexTest";//此处需要说明一下,其实这里并非按照完整的路径去调用,而是按照URL访问的路径,
$ch = curl_init(); // 1. 初期化
curl_setopt( $ch,CURLOPT_URL,$url ); // 2. オプションを設定
curl_setopt( $ch,CURLOPT_RETURNTRANSFER,true );
$result = curl_exec( $ch ); // 3. 実行してデータを得る
curl_close($ch); // 4. 終了
$x = $result;$this->log($x,'debug');
$this->set('x',$x);
}
一下是一些相关资料
1.出自http://digape.com/201210/cakephp2-json%E5%BD%A2%E5%BC%8F%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%89%8B%E8%BB%BD%E3%81%AB%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B/
Posted by teriyakisan on 2012/10/19. Leave
a comment.
メインで使うPHPフレームワークをCakePHP1.3系→2系にしてから数ヶ月が立ちました。
PHPUnitや、Pluginなどでも2系の恩恵を感じていますが、今回はより手軽にできるようになっていたjson形式のデータ出力方法をご紹介してみます。
APIなどでよく使うjsonですが、1.3系までだと独自のwrapperメソッドを用意してstatusと結果を一緒に返すような仕組みをつくったりしていました。
2系からはCakeResponseを使った方法など含め、簡単なやり方が増えているみたいですが、中でも以下のやり方が手軽で気に入っています。
例えば、status=”complete”、message=”"みたいな結果をjson形式のデータを、レスポンスとして返却する場合。
コントローラ内のfunctionで以下のようにすればOKです。
これをブラウザ側で叩くと、
となります。
$result変数の中身を、viewに渡して、_serialiseにセットしたresultを指定すると、cake標準のviewによってjson形式の出力結果を返してくれます。
もちろん連想配列でもいけます。
結果は、
となります。
modelのデータ配列をそのまま渡して使うなど、実践的に使える場面もありそうです。
viewClassの指定など、CakePHP2.1で超簡単にJSONを出力する方法を参考にさせてもらいました。
お試しあれ。
2.出自‘http://tipshare.info/view/4f59a21c7f8b9a6117000000
![](http://tipshare.info/img/twitter/bird_16_blue.png)
![](http://api.twitter.com/1/users/profile_image?screen_name=yando&size=mini)
@yandoMar
9th 2012,15:24 閲覧 2624 人 embed
21 人embed
クリックするとフォーマットが変わります
コントローラー内で viewClassをJsonに設定し、JSONに書き出したい変数名を_serializeにセットする。これだけ。 下記の例ではpostsとsome_varの内容がJSONで書き出される。
3.官网关于curl基本用法的教程
http://php.net/manual/ja/curl.examples-basic.php
4.其他貌似getfileContents也能实现此功能
http://php.net/manual/ja/function.file-get-contents.php
(PHP 4 >= 4.3.0,PHP 5)
file_get_contents — ファイルの内容を全て文字列に読み込む
Report
a bug
string file_get_contents ( string
false [,resource
-1 [,int
)
この関数は file() と似ていますが、
ファイルの内容を文字列に読み込むという点が異なります。 失敗した場合、 file_get_contents() は
file_get_contents()はファイルの内容を文字列に読み込む 方法として好ましいものです。もしOSがサポートしていれば パフォーマンス向上のためにメモリマッピング技術が使用されます。
注意:
空白のような特殊な文字を有する URI をオープンする場合には、 urlencode() でその
URI をエンコードする必要があります。
Report
a bug
データを読み込みたいファイルの名前。
注意:
PHP 5 以降では、定数
stream_context_create() で作成したコンテキストリソース。
独自のコンテキストを使用する必要がない場合は、このパラメータに
元のストリーム上で、読み込みを開始するオフセット位置。
リモートファイルに対するシーク (
読み込むデータの最大バイト数。 デフォルトは、ファイル終端に達するまで読み込みます。 このパラメータは、フィルタが処理した後のストリームに適用されることに注意しましょう。
Report
a bug
読み込んだデータを返します。失敗した場合に
警告
この関数は論理値
詳細については 論理値の
セクションを参照してください。この関数の返り値を調べるには ===演算子 を
使用してください。
Report
a bug
Report
a bug
例1 とあるウェブサイトのホームページのソースの取得と出力
例2 include_path の検索
例3 ファイルの一部の読み込み
上の例の出力は、 たとえば以下のようになります。
例4 ストリームコンテキストの使用
Report
a bug
Report
a bug
注意: この関数はバイナリデータに対応しています。
ヒント
fopen
wrappers が有効の場合、この関数のファイル名として URL を使用することができます。ファイル名の指定方法に関する詳細は fopen() を参照ください。 サポートするプロトコル/ラッパーには、さまざまなラッパーの機能やその使用法、
提供される定義済み変数などの情報がまとめられています。
警告
IIS のような、いくつかの標準に 対応してない Web サーバーは、PHP に警告を発生させるような手順でデータを送信します。 このようなサーバーを使用する場合は、 error_reporting を警告を発生しないレベルまで小さくする必要があります。
PHP 4.3.7 以降では、https:// ラッパーでストリームをオープンする際に バグがある IIS サーバーソフトウエアを検出することができ、この警告を抑制することができます。 あなたが ssl:// ソケットを作成するために fsockopen() を使用している場合、
自らこの警告を検出し、抑制する必要があります。
Report
a bug
file() -
ファイル全体を読み込んで配列に格納する
fgets() -
ファイルポインタから 1 行取得する
fread() -
バイナリセーフなファイルの読み込み
readfile() -
ファイルを出力する
file_put_contents() -
文字列をファイルに書き込む
stream_get_contents() -
残りのストリームを文字列に読み込む
stream_context_create() -
ストリームコンテキストを作成する
$http_response_header
java里面可能就是用导入jar包的形式,
但是php很难找到相关中文资料,
有的话也是千篇一律的copy而来
昨晚特别去拜访了一下同一个团地的大神
受大神指点迷津,又上网找了一下日文和英文资料
终于成功通过
方法1
如果是想用引用的话,就在先的一方的顶部加上include_once(../工程名/Controller名/Method名)
方法2
如果是想要返回结果和传参数的话,用这个其实更简单
就是大名鼎鼎的——》 CURL
首先在元的一方写入方法内容,并以Json的形式返回
该indexTest方法的路径是在Project1/app/Controller/PhoneController
public function indexTest() { $this->autoRender = false; $carrierid = 'OK';//$this->request->query['carrierid']; if (isset($carrierid)) { //$carrier = $this->Carrier->findById($carrierid); $carrier =$carrierid; return json_encode($carrier); } }
然后在先的一方写入curl相关的参数设定
public function admin_test() {
$url = "http://127.0.0.1/project1/phones/indexTest";//此处需要说明一下,其实这里并非按照完整的路径去调用,而是按照URL访问的路径,
$ch = curl_init(); // 1. 初期化
curl_setopt( $ch,CURLOPT_URL,$url ); // 2. オプションを設定
curl_setopt( $ch,CURLOPT_RETURNTRANSFER,true );
$result = curl_exec( $ch ); // 3. 実行してデータを得る
curl_close($ch); // 4. 終了
$x = $result;$this->log($x,'debug');
$this->set('x',$x);
}
一下是一些相关资料
1.出自http://digape.com/201210/cakephp2-json%E5%BD%A2%E5%BC%8F%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%89%8B%E8%BB%BD%E3%81%AB%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B/
[CakePHP2] json形式のデータを手軽に出力する
Posted by teriyakisan on 2012/10/19. Leavea comment.
メインで使うPHPフレームワークをCakePHP1.3系→2系にしてから数ヶ月が立ちました。
PHPUnitや、Pluginなどでも2系の恩恵を感じていますが、今回はより手軽にできるようになっていたjson形式のデータ出力方法をご紹介してみます。
APIなどでよく使うjsonですが、1.3系までだと独自のwrapperメソッドを用意してstatusと結果を一緒に返すような仕組みをつくったりしていました。
2系からはCakeResponseを使った方法など含め、簡単なやり方が増えているみたいですが、中でも以下のやり方が手軽で気に入っています。
例えば、status=”complete”、message=”"みたいな結果をjson形式のデータを、レスポンスとして返却する場合。
コントローラ内のfunctionで以下のようにすればOKです。
1 | public function jsonTest() { |
2 | $result = [ 'status' => 'complete' , 'msg' => 'Request completed.' ]; |
3 | $this ->viewClass = 'Json' ; |
4 | $this ->set(compact( 'result' )); |
5 | $this ->set( '_serialize' , 'result' ); |
6 | } |
1 | { "status" : "complete" , "msg" : "Request completed." } |
$result変数の中身を、viewに渡して、_serialiseにセットしたresultを指定すると、cake標準のviewによってjson形式の出力結果を返してくれます。
もちろん連想配列でもいけます。
1 | public function jsonTest() |
2 | { |
3 | $result = [ 'status' => 'complete' , 'fruits' => [ 'apple' , 'orange' , 'banana' ]]; |
4 | $this ->viewClass = 'Json' ; |
5 | $this ->set(compact( 'result' )); |
6 | $this ->set( '_serialize' , 'result' ); |
7 | } |
1 | { "status" : "complete" , "fruits" :[ "apple" , "orange" , "banana" ]} |
modelのデータ配列をそのまま渡して使うなど、実践的に使える場面もありそうです。
viewClassの指定など、CakePHP2.1で超簡単にJSONを出力する方法を参考にさせてもらいました。
お試しあれ。
2.出自‘http://tipshare.info/view/4f59a21c7f8b9a6117000000
CakePHP2.1で超簡単にJSONを出力する方法
![](http://tipshare.info/img/twitter/bird_16_blue.png)
@yandoMar
9th 2012,15:24 閲覧 2624 人 embed
21 人embed
クリックするとフォーマットが変わります
コントローラー内で viewClassをJsonに設定し、JSONに書き出したい変数名を_serializeにセットする。これだけ。 下記の例ではpostsとsome_varの内容がJSONで書き出される。
<?php
//app/Controller/PostsController.php
class PostsController extends AppController {
public function index() {
$this->set('posts',$this->Post->find('all'));
$this->set('some_var','This is my var');
$this->viewClass = 'Json';
$this->set('_serialize',array('posts','some_var'));
}
}
3.官网关于curl基本用法的教程
http://php.net/manual/ja/curl.examples-basic.php
4.其他貌似getfileContents也能实现此功能
http://php.net/manual/ja/function.file-get-contents.php
file_get_contents
(PHP 4 >= 4.3.0,PHP 5)file_get_contents — ファイルの内容を全て文字列に読み込む
Report
a bug
![](http://www.php.net/images/notes-reject.gif)
説明
string file_get_contents ( string $filename[,bool
$use_include_path=
false [,resource
$context[,int
$offset=
-1 [,int
$maxlen]]]]
)
この関数は file() と似ていますが、
offsetで指定した場所から開始し
maxlenバイト分だけ
ファイルの内容を文字列に読み込むという点が異なります。 失敗した場合、 file_get_contents() は
FALSEを返します。
file_get_contents()はファイルの内容を文字列に読み込む 方法として好ましいものです。もしOSがサポートしていれば パフォーマンス向上のためにメモリマッピング技術が使用されます。
注意:
空白のような特殊な文字を有する URI をオープンする場合には、 urlencode() でその
URI をエンコードする必要があります。
Report
a bug
![](http://www.php.net/images/notes-reject.gif)
パラメータ
filename
データを読み込みたいファイルの名前。
use_include_path
注意:
PHP 5 以降では、定数
FILE_USE_INCLUDE_PATHを使用して インクルードパス から探すことができます。
context
stream_context_create() で作成したコンテキストリソース。
独自のコンテキストを使用する必要がない場合は、このパラメータに
NULLを指定します。
offset
元のストリーム上で、読み込みを開始するオフセット位置。
リモートファイルに対するシーク (
offset指定) はサポートしていません。 オフセットが小さい場合はリモートファイルでのシークがうまくいくこともありますが、 これはバッファリングされたストリーム上で動作しているだけのことです。
maxlen
読み込むデータの最大バイト数。 デフォルトは、ファイル終端に達するまで読み込みます。 このパラメータは、フィルタが処理した後のストリームに適用されることに注意しましょう。
Report
a bug
![](http://www.php.net/images/notes-reject.gif)
返り値
読み込んだデータを返します。失敗した場合に FALSEを返します。
警告
この関数は論理値
FALSEを返す可能性がありますが、
FALSEとして評価される値を返す可能性もあります。
詳細については 論理値の
セクションを参照してください。この関数の返り値を調べるには ===演算子 を
使用してください。
Report
a bug
![](http://www.php.net/images/notes-reject.gif)
エラー
/ 例外
filenameが見つからない場合、
maxlengthがゼロより小さい場合、あるいはストリーム内での指定した
offsetへのシークが失敗した場合に
E_WARNINGレベルのエラーが発生します。
Report
a bug
![](http://www.php.net/images/notes-reject.gif)
例
例1 とあるウェブサイトのホームページのソースの取得と出力<?php $homepage = file_get_contents('http://www.example.com/'); echo $homepage; ?>
例2 include_path の検索
<?php
// <= PHP 5
$file = file_get_contents('./people.txt',true);
// > PHP 5
$file = file_get_contents('./people.txt',FILE_USE_INCLUDE_PATH);
?>
例3 ファイルの一部の読み込み
<?php
// 21 文字目から 14 文字ぶん読み込みます
$section = file_get_contents('./people.txt',NULL,NULL,20,14);
var_dump($section);
?>
上の例の出力は、 たとえば以下のようになります。
string(14) "lle Bjori Ro"
例4 ストリームコンテキストの使用
<?php
// ストリームを作成します
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
)
);
$context = stream_context_create($opts);
// 上で設定した HTTP ヘッダを使用してファイルをオープンします
$file = file_get_contents('http://www.example.com/',false,$context);
?>
Report
a bug
![](http://www.php.net/images/notes-reject.gif)
変更履歴
バージョン | 説明 |
---|---|
5.1.0 | offsetと maxlenパラメータが追加されました。 |
5.0.0 | コンテキストサポートが追加されました。 |
a bug
![](http://www.php.net/images/notes-reject.gif)
注意
注意: この関数はバイナリデータに対応しています。ヒント
fopen
wrappers が有効の場合、この関数のファイル名として URL を使用することができます。ファイル名の指定方法に関する詳細は fopen() を参照ください。 サポートするプロトコル/ラッパーには、さまざまなラッパーの機能やその使用法、
提供される定義済み変数などの情報がまとめられています。
警告
IIS のような、いくつかの標準に 対応してない Web サーバーは、PHP に警告を発生させるような手順でデータを送信します。 このようなサーバーを使用する場合は、 error_reporting を警告を発生しないレベルまで小さくする必要があります。
PHP 4.3.7 以降では、https:// ラッパーでストリームをオープンする際に バグがある IIS サーバーソフトウエアを検出することができ、この警告を抑制することができます。 あなたが ssl:// ソケットを作成するために fsockopen() を使用している場合、
自らこの警告を検出し、抑制する必要があります。
Report
a bug
![](http://www.php.net/images/notes-reject.gif)
参考
file() -ファイル全体を読み込んで配列に格納する
fgets() -
ファイルポインタから 1 行取得する
fread() -
バイナリセーフなファイルの読み込み
readfile() -
ファイルを出力する
file_put_contents() -
文字列をファイルに書き込む
stream_get_contents() -
残りのストリームを文字列に読み込む
stream_context_create() -
ストリームコンテキストを作成する
$http_response_header
相关文章推荐
- 使用COM或者OLE的方法调用来控制Excel或者其他Office组件
- 获取iframe中的内容、查找获取指定元素(关于用c++调用WEBBROWSER控件,使用相关接口操作web页面元素的一些方法)
- 关于ESP8266使用ArduinoIDE编程,调用airkiss_lan_recv和airkiss_lan_pack出错的解决方法
- this关键字的作用 使用this调用其他构造方法 使用this表示当前对象
- 关于VC60中创建MFC工程时, 使用了UNICODE选项后编译报错的解决方法
- 关于C#Winform线程调用窗体的使用方法以及窗体的单一显示
- 安卓四大组件之二#2-使用AIDL技术实现动态调用其他app中的Service的方法
- 使用Intent调用其他活动的方法以及运作流程
- 关于Struts2使用Action的动态方法调用
- 关于C#Winform线程调用窗体的使用方法以及窗体的单一显示
- 本工程调用其他工程的api的公共调用方法
- [拦截器]关于拦截方法调用其他内部方法无法被拦截问题的解决
- android library工程中使用switch_case语句,调用资源文件的id出现错误的原因分析及解决方法
- EF Core使用SQL调用返回其他类型的查询 ASP.NET Core 2.0 使用NLog实现日志记录 CSS 3D transforms cSharp:use Activator.CreateInstance with an Interface? SqlHelper DBHelper C# Thread.Abort方法真的让线程停止了吗? 注意!你的Thread.Abort方法真
- C++ 关于断点续传的方法,使用CURL技术
- 关于Struts2 使用! 感叹号 动态调用Action中的方法
- Android关于 手机返回键和代码finish()方法退出activity他们有什么区别;当activity使用共享动画时应该调用哪个方法,结束activity
- [拦截器]关于拦截方法调用其他内部方法无法被拦截问题的解决
- 关于DAL层使用静态方法,并在WEB层直接调用的问题
- 关于使用 Hibernate 调用存储过程方法