我试图在页面中检测到提交事件后,从JavaScript传递到php文件的JSON数组中创建.csv文件。
我到了可以看到数组从JSON回来的数据......它将它传递给php文件,然后让php文件解析对象并将其输出到.csv文件中
我已经包含了我用来制作它的HTML,JavaScript和PHP ......我能指出正确的方向吗?
我得到的错误因以下因素而异:
当我尝试手动注入我的阵列时:
http://localhost/~admin/dev/parse.php?submittedResults=[[%22uploads/featured/doublewm-3683.jpg%22,%22featured%22]]
[Sat Jan 04 22:12:29 2014] [error] [client ::1] PHP Warning: file_get_contents($path): failed to open stream: No such file or directory in /Users/Admin/Sites/dev/parse.php on line 62
[Sat Jan 04 22:12:29 2014] [error] [client ::1] PHP Warning: fopen(clients/downloads/csv/[["uploads/featured/doublewm-3683.jpg","featured"]].csv): failed to open stream: No such file or directory in /Users/Admin/Sites/dev/parse.php on line 65
[Sat Jan 04 22:12:29 2014] [error] [client ::1] PHP Warning: Invalid argument supplied for foreach() in /Users/Admin/Sites/dev/parse.php on line 66
[Sat Jan 04 22:12:29 2014] [error] [client ::1] PHP Warning: fclose() expects parameter 1 to be resource, boolean given in /Users/Admin/Sites/dev/parse.php on line 69
当我尝试让JavaScript进行数组传递时:
[Sat Jan 04 22:15:36 2014] [error] [client ::1] PHP Notice: Array to string conversion in /Users/Admin/Sites/dev/parse.php on line 57, referer: http://localhost/~Admin/dev/index.htm
[Sat Jan 04 22:15:36 2014] [error] [client ::1] PHP Warning: file_get_contents($path): failed to open stream: No such file or directory in /Users/Admin/Sites/dev/parse.php on line 62, referer: http://localhost/~Admin/dev/index.htm
[Sat Jan 04 22:15:36 2014] [error] [client ::1] PHP Warning: fopen(clients/downloads/csv/Array.csv): failed to open stream: No such file or directory in /Users/Admin/Sites/dev/parse.php on line 65, referer: http://localhost/~Admin/dev/index.htm
[Sat Jan 04 22:15:36 2014] [error] [client ::1] PHP Warning: Invalid argument supplied for foreach() in /Users/Admin/Sites/dev/parse.php on line 66, referer: http://localhost/~Admin/dev/index.htm
[Sat Jan 04 22:15:36 2014] [error] [client ::1] PHP Warning: fclose() expects parameter 1 to be resource, boolean given in /Users/Admin/Sites/dev/parse.php on line 69, referer: http://localhost/~Admin/dev/index.htm
HTML:
<form onsubmit"">
<div class="imageTile">
<a class="fancybox" rel="rel" href="uploads/featured/doublewm-4097.jpg"><img src="uploads/featured/doublewm-4097.jpg" style="max-width: 120px; max-height: 110px;"></a><br>
<input class="data" type="hidden" name="imageFilename" value="uploads/featured/doublewm-4097.jpg">
<input class="data" type="hidden" name="imageGalleryID" value="featured">
<label for="uploads/featured/doublewm-4097.jpg">Keep<input class="checkbox" type="checkbox"></label>
</div>
<div class="imageTile">
<a class="fancybox" rel="rel" href="uploads/featured/moon-5469.jpg"><img src="uploads/featured/moon-5469.jpg" style="max-width: 120px; max-height: 110px;"></a><br>
<input class="data" type="hidden" name="imageFilename" value="uploads/featured/moon-5469.jpg">
<input class="data" type="hidden" name="imageGalleryID" value="featured">
<label for="uploads/featured/moon-5469.jpg">Keep<input class="checkbox" type="checkbox"></label>
</div>
<div id="submit_buttons">
<button type="reset">Reset</button>
<input class="submit" type="submit" onclick="return false" value="Submit">
</div>
</form>
JAVASCRIPT:
$('.submit').click(function(event) {
event.preventDefault();
var imageTile = this.parentElement.parentElement.getElementsByClassName('imageTile');
var l = imageTile.length;
var data = [];
for (var i = 0; i < l; i++) {
if (imageTile[i].getElementsByClassName('checkbox')[0].checked) {
var dat = imageTile[i].getElementsByClassName('data');
console.log(dat);
var ll = dat.length;
var datArr = [];
for (var j = 0; j < ll; j++) {
datArr.push(dat[j].attributes['value'].value);
}
data.push(datArr);
}
}
// Now 'data' is the array
// dataString is a JSON representation of the array to send to the server
var dataString = JSON.stringify(data);
// Test
console.log(data);
console.log(dataString);
$.ajax({
url: 'parse.php?submittedResults' + dataString,
type: 'GET',
dataType: "json",
async: false
}).done(function(data) {
})
});
PHP:
if (isset($_GET['submittedResults'])) {
if (empty($_GET['submittedResults'])) {
die('Give me something to work with!!');
}
$resultSet = (string) $_GET['submittedResults'];
$path = $resultSet;
if (strpos($path, '../') !== false || strpos($path, "..\\") !== false || strpos($path, '/..') !== false || strpos($path, '\..') !== false) {
http_response_code(403);
} else {
$getFile = file_get_contents('$path');
$json_obj = json_decode($getFile);
echo "$json_obj";
$fp = fopen("clients/downloads/csv/$path.csv", 'w');
foreach ($json_obj as $row) {
fputcsv($fp, $row);
}
fclose($fp);
}
}
JSON:
[["uploads/featured/doublewm-4097.jpg","featured"],["uploads/featured/moon-5469.jpg","featured"]]
所以我注意到我错过了'='符号...我重写了ajax调用以匹配你的建议,行为是一样的。我还包括下面要求的回声,结果如下:
请求的回音:
var_dump($_GET['submittedResults'])
string(101) "[["uploads/featured/doublewm-3683.jpg","featured"],["uploads/featured/doublewm-3935.jpg","featured"]]"
当前日志:
[Sat Jan 04 22:27:43 2014] [error] [client ::1] PHP Warning: file_get_contents($path): failed to open stream: No such file or directory in /Users/Admin/Sites/dev/parse.php on line 63, referer: http://localhost/~Admin/dev/index.htm
[Sat Jan 04 22:27:43 2014] [error] [client ::1] PHP Warning: fopen(clients/downloads/csv/[["uploads/featured/doublewm-3683.jpg","featured"],["uploads/featured/doublewm-3935.jpg","featured"]].csv): failed to open stream: No such file or directory in /Users/Admin/Sites/dev/parse.php on line 66, referer: http://localhost/~Admin/dev/index.htm
[Sat Jan 04 22:27:43 2014] [error] [client ::1] PHP Warning: Invalid argument supplied for foreach() in /Users/Admin/Sites/dev/parse.php on line 67, referer: http://localhost/~Admin/dev/index.htm
[Sat Jan 04 22:27:43 2014] [error] [client ::1] PHP Warning: fclose() expects parameter 1 to be resource, boolean given in /Users/Admin/Sites/dev/parse.php on line 70, referer: http://localhost/~Admin/dev/index.htm
当前的JavaScript:
$.ajax({
url: 'parse.php',
data: { submittedResults: JSON.stringify(data) },
type: 'GET',
dataType: "json",
async: false
}).
答案 0 :(得分:0)
PHP警告:file_get_contents($ path):无法打开流:没有这样的 第62行/Users/Admin/Sites/dev/parse.php中的文件或目录
$resultSet = (string) $_GET['submittedResults'];
$path = $resultSet;
这会导致问题,因为$ path等于json数据。 哪个错了,路径应该是文件名。试试这样:
//$resultSet =(string) $_GET['submittedResults'];
$resultSet = '[["uploads/featured/doublewm-4097.jpg","featured"],
["uploads/featured/moon-5469.jpg","featured"]]';
$path = "myfile.csv"; //or clients/downloads/csv/myfile.csv
if (strpos($path, '../') !== false || strpos($path, "..\\") !== false
|| strpos($path, '/..') !== false || strpos($path, '\..') !== false) {
http_response_code(403);
} else {
$json_obj = json_decode($resultSet);
echo "$json_obj";
$fp = fopen($path, 'w');
foreach ($json_obj as $row) {
fputcsv($fp, $row);
}
fclose($fp);
}
myfile.csv:
uploads/featured/doublewm-4097.jpg,featured
uploads/featured/moon-5469.jpg,featured
编辑: 提供唯一的文件名
$json_obj = json_decode($resultSet);
$path = $json_obj[0][1].".csv";
输出
featured.csv