Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在后台(LinuxWget)写入来自web服务的数据库JSON响应_Php_Jquery_Json_Ajax_Wget - Fatal编程技术网

Php 在后台(LinuxWget)写入来自web服务的数据库JSON响应

Php 在后台(LinuxWget)写入来自web服务的数据库JSON响应,php,jquery,json,ajax,wget,Php,Jquery,Json,Ajax,Wget,我有个大问题。我在jQuery中编写了这个脚本,它通过设置JSON从webservice获取数据,webservice通过响应也以JSON的形式向我发回数据。 代码如下所示: function Product(date_from,date_to,API_KEY) { var self = this; self.productURI = 'https://api.xxxxxxxxxxxxxxxxxxx/DailySales?FromDate='+date_from+' 00:01 :00&

我有个大问题。我在jQuery中编写了这个脚本,它通过设置JSON从webservice获取数据,webservice通过响应也以JSON的形式向我发回数据。 代码如下所示:

function Product(date_from,date_to,API_KEY) {
var self = this;
self.productURI = 'https://api.xxxxxxxxxxxxxxxxxxx/DailySales?FromDate='+date_from+' 00:01  :00&ToDate='+date_to+' 00:01:00';
self.products = new Array();
self.productsDiv = "#products";

self.getAllProducts = function () {
   var req = self.pobierz_dane_ajax(self.productURI, "GET");
    req.done(function (data) {
        self.products = data;
        var dataString = JSON.stringify(data);

        $.ajax({
            type: 'POST',
            url: 'write_transactions.php',
            data: { 
                save_transaction: dataString,
                date_from: date_from
            }
        });
    });
}

self.pobierz_dane_ajax = function (uri, method, data) {
    var request = {
        url: uri,
        type: method,
        contentType: "application/json",
        accepts: "application/json",
        dataType: 'json',
        data: JSON.stringify(data),
        crossDomain: true,
        beforeSend: function (xhr) {
            xhr.setRequestHeader("Authorization", "Basic " + API_KEY);
        }
    };
    return $.ajax(request);
}
<script type="text/javascript">
var product = new Product('<?php echo $date_from; ?>','<?php echo $date_to; ?>','<?PHP echo $DE_API; ?>');
product.getAllProducts();
}

我这样调用我的函数:

function Product(date_from,date_to,API_KEY) {
var self = this;
self.productURI = 'https://api.xxxxxxxxxxxxxxxxxxx/DailySales?FromDate='+date_from+' 00:01  :00&ToDate='+date_to+' 00:01:00';
self.products = new Array();
self.productsDiv = "#products";

self.getAllProducts = function () {
   var req = self.pobierz_dane_ajax(self.productURI, "GET");
    req.done(function (data) {
        self.products = data;
        var dataString = JSON.stringify(data);

        $.ajax({
            type: 'POST',
            url: 'write_transactions.php',
            data: { 
                save_transaction: dataString,
                date_from: date_from
            }
        });
    });
}

self.pobierz_dane_ajax = function (uri, method, data) {
    var request = {
        url: uri,
        type: method,
        contentType: "application/json",
        accepts: "application/json",
        dataType: 'json',
        data: JSON.stringify(data),
        crossDomain: true,
        beforeSend: function (xhr) {
            xhr.setRequestHeader("Authorization", "Basic " + API_KEY);
        }
    };
    return $.ajax(request);
}
<script type="text/javascript">
var product = new Product('<?php echo $date_from; ?>','<?php echo $date_to; ?>','<?PHP echo $DE_API; ?>');
product.getAllProducts();

var产品=新产品(“”,“”,“”);
product.getAllProducts();

在PHP脚本中,我用PHP解析JSON并将其写入数据库

当我通过网页(Chrome、Firefox)调用整个过程时,一切都正常。当我在Linux中的crontab中通过以下方式调用它时,问题开始出现:

wget-O-“https…………” 但它就是不起作用。
我需要在后台启动此脚本,因此我需要更好的解决方案….

如果我正确理解了您的问题,请立即与您联系

  • 通过浏览器调用网页
  • 该网页使用JS(ajax)从外部api获取数据
  • 解析响应并将其发送到附加的PHP脚本(将数据保存到数据库)
现在,您使用wget从cron调用该网页,但它不起作用

原因是,wget只获取页面并显示HTML响应,而不运行JS脚本

您可以使用wget来代替wget。它基本上充当无头浏览器,例如可以从cron调用

另一种可能的解决方案是重写一些代码,并直接在php脚本中执行所有操作

  • PHP脚本从API获取数据
  • 相同的脚本将数据保存到数据库
  • cronjob经常使用wget调用php脚本
编辑-建议php api调用的解决方案

<?php
    $options = array(
        'http' => array(
            'method' => 'GET',
            'header' => array(
                'Authorization: Basic ' . $API_KEY,
                'Content-type: application/json'
            )
         )
    );
    $context = stream_context_create($options);
    $response = file_get_contents($API_URL, false, $context);

    //work with response / save to db      

是啊!这太容易了:D

我正在为其他人发布我的解决方案:D

$remote_url = 'https://api.xxxxxxxxxxxxxx';

// Create a stream
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header' => "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 )
);

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents($remote_url, false, $context);

print($file);

感谢您的回答:)我考虑过完全用PHP重写它,但我不知道如何通过PHP传递GET和header,所以这部分:var request={url:uri,type:method,contentType:“application/json”,接受:“application/json”,数据类型:'json',data:json.stringify(data),crossDomain:true,beforeSend:function(xhr){xhr.setRequestHeader(“Authorization”,“Basic”+API_KEY);};返回$.ajax(请求);在我的回答中查看我的编辑-使用file_get_contents(或者curl作为替代),应该很容易获取api数据