您的位置:首页 > 其它

关于使用curl 调用其他工程方法

2013-11-07 13:08 232 查看
在此记录一下,做跨工程调用方法,

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. 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です。

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を出力する方法





@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




説明

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




パラメータ

filename

データを読み込みたいファイルの名前。
use_include_path


注意:

PHP 5 以降では、定数
FILE_USE_INCLUDE_PATH
を使用して インクルードパス から探すことができます。

context

stream_context_create() で作成したコンテキストリソース。
独自のコンテキストを使用する必要がない場合は、このパラメータに
NULL
を指定します。
offset

元のストリーム上で、読み込みを開始するオフセット位置。
リモートファイルに対するシーク (
offset
指定) はサポートしていません。 オフセットが小さい場合はリモートファイルでのシークがうまくいくこともありますが、 これはバッファリングされたストリーム上で動作しているだけのことです。
maxlen

読み込むデータの最大バイト数。 デフォルトは、ファイル終端に達するまで読み込みます。 このパラメータは、フィルタが処理した後のストリームに適用されることに注意しましょう。

Report
a bug




返り値

読み込んだデータを返します。失敗した場合に
FALSE
を返します。

警告
この関数は論理値
FALSE
を返す可能性がありますが、
FALSE
として評価される値を返す可能性もあります。
詳細については 論理値
セクションを参照してください。この関数の返り値を調べるには ===演算子
使用してください。

Report
a bug




エラー
/ 例外

filename
が見つからない場合、
maxlength
がゼロより小さい場合、あるいはストリーム内での指定した
offset
へのシークが失敗した場合に
E_WARNING
レベルのエラーが発生します。

Report
a bug




例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




変更履歴

バージョン説明
5.1.0
offset
maxlen
パラメータが追加されました。
5.0.0コンテキストサポートが追加されました。
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐