PHP脚本不创建和编写JSON文件

时间:2016-06-21 12:28:43

标签: c# php json

我有一个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(应该保存的文件夹)

我现在不知道该怎么办所以我来这里发布我的问题。有人可以帮帮我,告诉我这里我做错了什么吗?

3 个答案:

答案 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));
    }