我有一个PHP脚本,它从我的C#代码中获取它的发布数据。我的C#代码将POST数据发送到我的PHP脚本,包括base64字符串和文件名。使用这两个数据,它应该在文件夹JSON中使用文件名创建一个JSON文件,然后它应该将解码后的base64字符串写入它刚创建的文件。在此之后,它应该将JSON数据保存到数据库。但是有一个问题,它没有创建JSON文件,它将空白数据保存到我的数据库。以下是我到目前为止的情况:
PHP:
<?php
$link = new mysqli($host, $user, $pass, $db);
if($link ->connect_errno)
{
echo 'Database connection wrong<br/>';
}
else
{
if(isset($_POST['filename']) && isset($_POST['b64string']))
{
$jsonstring = base64_decode($_POST['b64string']);
$filename = $_POST['filename'] . '.json';
$create = fopen(__DIR__. "/json/" . $filename, "W+");
fwrite($create, $jsonstring);
$json = fread($create, filesize(__DIR__. "/json/" . $filename));
fclose($create);
$obj = json_decode($json);
$query_opslaan = "INSERT INTO SalesKicker (BedrijfsNaam, ContPers, TelNr, Email, Land, Plaats, POC) VALUES ('". $obj->bedrijfsNaam ."' , '". $obj->ContPers ."', '". $obj->TelNum ."', '". $obj->email ."', '". $obj->Land ."', '". $obj->Plaats ."', '". $obj->PostCode ."')";
mysqli_query($link, $query_opslaan) or die(mysqli_error($query_opslaan));
}
else
{
echo 'ERROR: no data!';
}
}
?>
它来自以下C#脚本的数据:
if (reqCat == "bvg")
{
json = "{\"bedrijfsNaam\":\"" + bedrijfsNaam + "\"," +
"\"ContPers\":\"" + ContPers + "\"," +
"\"TelNum\":\"" + TelNum + "\"," +
"\"email\":\"" + email + "\"," +
"\"Land\":\"" + Land + "\"," +
"\"Plaats\":\"" + Plaats + "\"," +
"\"PostCode\":\"" + PostCode + "\"}";
var b64bytes = System.Text.Encoding.UTF8.GetBytes(json);
b64encode = System.Convert.ToBase64String(b64bytes);
using (WebClient client = new WebClient())
{
byte[] sendB64 = client.UploadData("http://" + ConfigurationManager.AppSettings["scripturi"].ToString() + "SalesKicker.php", "POST",
System.Text.Encoding.ASCII.GetBytes("b64string=" + b64encode + "&filename=" + dt.bedrijfsNaam));
}
}
这是我的文件夹结构:
public_html(这是所有PHP内容所在的位置) - &gt; json(应该保存的文件夹)
我现在不知道该怎么办所以我来这里发布我的问题。有人可以帮帮我,告诉我这里我做错了什么吗?
答案 0 :(得分:1)
知道了! 您在POST正文中发送'filename'参数,但在GET数组中检查它。所以你甚至没有进入你的if(){}语句。 你需要改变
if(isset($_GET['filename']) && isset($_POST['b64string']))
到
if(isset($_POST['filename']) && isset($_POST['b64string']))
要么改变C#
byte[] sendB64 = client.UploadData("http://" + ConfigurationManager.AppSettings["scripturi"].ToString() + "SalesKicker.php", "POST",
System.Text.Encoding.ASCII.GetBytes("b64string=" + b64encode + "&filename=" + dt.bedrijfsNaam));
到
byte[] sendB64 = client.UploadData("http://" + ConfigurationManager.AppSettings["scripturi"].ToString() + "SalesKicker.php?filename=" + dt.bedrijfsNaam, "POST",
System.Text.Encoding.ASCII.GetBytes("b64string=" + b64encode));
答案 1 :(得分:0)
起初我不确定,但在这里测试解决方案之后:
错误:
$create = fopen(__DIR__. "/json/" . $filename, "W+");
正确的:
$create = fopen(__DIR__. "/json/" . $filename, "w+");
这有点愚蠢,但模式中的大写字母无效。希望这能解决问题:)
答案 2 :(得分:0)
C#程序员忘记缓存的那一刻。我有点笨拙但是在搜索了如何在PHP中清除缓存的方法之后我找到了它。看哪,传说中的 clearstatcache()方法。我最终使用的PHP代码如下所示:
if(isset($_POST['filename']) && isset($_POST['b64string']))
{
clearstatcache();//the solution to my problem
$jsonstring = base64_decode($_POST['b64string']);
$filename = $_POST['filename'] . '.json';
$create = fopen(__DIR__. "/json/" . $filename, "w+");
fwrite($create, $jsonstring);
$json = fread($create, filesize(__DIR__. "/json/" . $filename));
fclose($create);
$obj = json_decode($json);
$query_opslaan = "INSERT INTO SalesKicker (BedrijfsNaam, ContPers, TelNr, Email, Land, Plaats, POC) VALUES ('". $obj->bedrijfsNaam ."' , '". $obj->ContPers ."', '". $obj->TelNum ."', '". $obj->email ."', '". $obj->Land ."', '". $obj->Plaats ."', '". $obj->PostCode ."')";
mysqli_query($link, $query_opslaan) or die(mysqli_error($query_opslaan));
}