Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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
Javascript 将长文本从脚本浏览器(phantomjs)发布到php脚本不会超过2kb/2400个字符_Javascript_Php_Json_Phantomjs - Fatal编程技术网

Javascript 将长文本从脚本浏览器(phantomjs)发布到php脚本不会超过2kb/2400个字符

Javascript 将长文本从脚本浏览器(phantomjs)发布到php脚本不会超过2kb/2400个字符,javascript,php,json,phantomjs,Javascript,Php,Json,Phantomjs,我正在使用phantomjs进行一些数据清理(基本上是一个浏览器,您可以在其中编写代码并从命令行运行它) 我正在收集关于足球比赛(球队/国家/联盟等)的信息,每个都作为一个对象,将它们全部放在一个数组中,将数组编码为jason格式,并将结果发布到php脚本中 结果可能是一个非常长的文本基于每天的游戏量,当这种情况发生时,我不会得到php脚本的全文 在php脚本中,我将发布的数据存储在一个文本文件中,以查看发生了什么,每次都是大约2.3kbmax和2397~字符 而我在终端上看到的原始发布文本大约

我正在使用phantomjs进行一些数据清理(基本上是一个浏览器,您可以在其中编写代码并从命令行运行它)

我正在收集关于足球比赛(球队/国家/联盟等)的信息,每个都作为一个对象,将它们全部放在一个数组中,将数组编码为jason格式,并将结果发布到php脚本中

结果可能是一个非常长的文本基于每天的游戏量,当这种情况发生时,我不会得到php脚本的全文

在php脚本中,我将发布的数据存储在一个文本文件中,以查看发生了什么,每次都是大约
2.3kb
max和
2397~
字符

而我在终端上看到的原始发布文本大约是
40kb
40000
字符

因此,一定有什么东西限制了我的php.ini信息中的字符,这已经足够了:

post_max_size -> 20M
max_input_vars -> 100000
memory_limit -> 256M
下面是我的代码的简化版本:

var res = page.evaluate(function(sport) {
        var matches = new Array();
        $('div#table-matches').find('.table-main').find('tr').each(function(index, element) {
            var obj = {
                teams :   $(this).find('td').text() ,
                link  :    $(this).find('td').find('a:last').attr('href') ,
            };
         matches.push( obj );
    });
    return matches ;
});

var postBody = 'sport='+sport+'&data='+JSON.stringify(res);

console.log(postBody);
page.open('http://xxxxx/result/save', 'POST', postBody, function(status) {
    phantom.exit();
});
以下是我在php脚本中得到的内容:

[{"country":"Japan","league":"Emperors Cup","link":"/soccer/japan/emperors-cup/kobe-urawa-65k5LIMh/","match_date":"2015/12/26 04:00","teams":"Kobe - Urawa"},
{"country":"England","league":"Ryman League","link":"/soccer/england/ryman-league/wingate-finchley-metropolitan-police-rwuqgSz9/","match_date":"2015/12/26 12:00","teams":"Wingate 

JSON代码在中间被截断,所以它不是有效的JSON/P>


还有什么我该做的吗

通常,当问题中提供了您的代码所使用的HTML时,查找答案要简单得多(链接到该站点也一样好)

幸运的是,您在json文件的一部分中留下了一些线索,即指向以下网站的一个页面的链接:/soccer/england/ryman league/wingate-finchley-metropolitan-police-rwuqgSz9/

如果我们通过Google找到它并查看其源代码,那么很明显php脚本中的数据在团队标题“Wingate&Finchley-Metropolitan”处被截断,该标题包含一个符号,它充当通过URI请求发送的变量和值的分隔符,
数据
变量
拆分为多个其他变量

因此,要修改脚本,只需正确编码
数据
字符串:

var postBody='sport='+sport+'&data='+encodeURIComponent(JSON.stringify(res))


找到此问题原因的另一种方法是检查服务器端的$\u服务器和$\u POST数组,将其转储到一个文件中,并查看整个
数据是否确实存在,因为您已经完成了检查PHP配置是否应该存在的出色工作


如果问题没有得到解决(例如,如果PhantomJS在POST equest中有一个奇怪的错误),解决方法是创建一个包含数据的临时文件,并将该文件的路径发送给php(假设解析是在同一台服务器上完成的):


实际上,在发布这个问题之后,我做了您建议的最后一个选项,将数据转储到一个文本文件中,并在php中从文本文件中将其红色化,效果非常好。。。但是你可能对定界符的看法是对的,我从来没有想过这一点,并自动假设这是一个限制问题我会检查
url encode
,看看会发生什么,但我认为我坚持使用文本文件作为媒介,以避免将来出现此类问题,thanxyes,如果在同一台服务器上刮取和处理数据,只需保存到一个文件就更简单了。
var fs = require('fs');
var filename = '/tmp/scraped_' + (new Date()).getTime() + ".json";
fs.write(filename, JSON.stringify(res), 'w');
page.open('http://xxxxx/result/save', {"filename" : filename}, function(status) {
    phantom.exit();
});