file_get_contents在codeigniter中不起作用

时间:2017-11-10 04:24:14

标签: php json codeigniter callback file-get-contents

我的控制器中有一个函数可以从回调网址中获取一些数据。数据将自动在数据库中更新。

我的回调网址是 http://example.com/API/sendSMSCallback

这是 API 控制器

中的 sendSMSCallback 功能
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!';
    }
}

json形式的预期数据如下

{"result":{"status":"success","req_id":"0d0dd0ce8-dadf-49fd-a49e-9845787e0507","msisdn":"91xxxxxxx, "}}

smslog_tbl 表中的任何内容都不会更新, test.txt 为空。新行插入测试表中,但字段为空。请帮我找一个解决方案。提前致谢

更新: 表结构:测试

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

1 个答案:

答案 0 :(得分:0)

首先,HTTP POST数据通常填充在$ _POST中,php://输入通常包含 PUT 数据。

您还需要允许

allow_url_fopen

在你的php.ini配置文件中。有些主机因安全性而不允许使用它

如果您已经这样做,那么检查file_get_contents PHP手动返回值。如果值为FALSE则无法读取文件。如果该值为NULL,则禁用该函数本身。

要了解file_get_contents操作可能出现的问题,您必须启用错误报告并显示错误以实际读取它们。

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