2017-11-10 21 views
0

私のコントローラに、コールバックURLからデータを取得する関数があります。そして、データは自動的にデータベースに更新されます。codeigniterでfile_get_contentsが機能しない

私のコールバックURLはhttp://example.com/API/sendSMSCallback

あると

{"result":{"status":"success","req_id":"0d0dd0ce8-dadf-49fd-a49e-9845787e0507","msisdn":"91xxxxxxx, "}} 
を次のようにこれはJSON形式で

public function sendSMSCallback() { 
    $json = file_get_contents('php://input'); 
    $data = array('value' => $json, 'date' => date('Y-m-d h:i:s')); 
    $this->db->insert('test', $data); // for testing 

    $json = urldecode($json);   
    $obj = json_decode($json,TRUE); 
    $reqID = $obj['req_id']; 
    $status = $obj['status']; 
    $mobile = $obj['msisdn']; 

    $this->db->where('UniqueID', $reqID); 
    $this->db->where('MobileNo', $mobile); 
    $this->db->set('ResponseStatus', $status); 
    $this->db->update('smslog_tbl'); 

    // for testing 
    $this->load->helper('file'); 

    if (! write_file(base_url().'test.txt', $json)){ 
     echo 'Unable to write the file'; 
    } 
    else{ 
     echo 'File written!'; 
    } 
} 

予想データ私のsendSMSCallback機能APIのコントローラであります

は何も更新されませんsmslog_tblテーブルとtest.txtは空です。 テストテーブルに新しい行が挿入されますが、フィールドは空です。解決策を見つけるのを手伝ってください。事前に感謝

UPDATE: テーブル構造:すべてのHTTP POSTデータのテスト

`id` int(11) NOT NULL, 
`value` text COLLATE latin1_general_ci NOT NULL, 
`date` datetime NOT NULL 
+0

テストテーブル構造のpls –

+0

は '$のJSON =のfile_get_contents( 'PHP://入力')の後、私の質問 – geeth

+0

に更新;' 'のvar_dump($のJSON)をやろう;'とすべてのデータが来て見ます実際にそうでないか? –

答えて

0

まず、通常、$ _POST、PHPに移入さ://入力は通常PUTデータが含まれています。

また、あなたはあなたのphp.ini設定ファイルの

allow_url_fopen 

を許可する必要があります。いくつかのホストはセキュリティのためにそれを許可しません

すでにこれを行っていれば、file_get_contentsをチェックしてくださいPHP Manual戻り値。値がFALSEの場合、ファイルを読み取ることができませんでした。値がNULLの場合、関数自体は使用不可になります。

file_get_contents操作で何が問題になるかを知るには、エラー報告とエラーの表示を有効にして実際にそれらを読み取る必要があります。

# Enable Error Reporting and Display: 
error_reporting(~0); 
ini_set('display_errors', 1); 
+0

allow_url_fopenがオンです。私はこのURLを、ローカルサーバにある私のphpファイルでテストしました。時にはそれは動作している、しばらくそれはしません – geeth

+0

あなたはputまたはpostでデータを送信してもよろしいですか? –

+0

私はデータを送信していません。これはコールバック関数です。データは他のサーバーからのもので、ポストパラメータだと言いました。だから私はちょうど '$ this-> db-> insert( 'test'、$ data);の後のコードにコメントした; – geeth

関連する問題