Открытие файла .txt с помощью fopen создает дополнительные пустые строки - PullRequest
1 голос
/ 07 апреля 2019

Я пытаюсь сгенерировать строку в vb.net, которую затем хочу отправить на свой сервер, в файл .php, который должен добавить эту строку в файл .txt.В строке несколько строк.Строка достигает php-файла правильно.Однако во время записи в файл .txt php создает дополнительные пустые строки, которые мне не нужны.

Что мне нужно в моем файле .txt:

line1
line2
line3

ЧтоЯ получаю:

line1

line2

line3

Я пытался изменить параметры вызова fopen (добавив b в аргументах для принудительного запуска двоичного режима), но это не помогло.Я также попытался заменить vbNewLine на «\ n» и «\ r \ n» в коде vb.net для разделения строк в строке, но, к сожалению, это не распознается и записывается в файл .txt, например * 1009.*

line1 \r\n line2 \r\n line3

Вот мой код приложения vb.net:

   function sendStringToServer()
      Dim stringToSend as String
      stringToSend = "line1" & vbNewline
      stringToSend &= "line2" & vbNewline
      stringToSend &= "line3"

      Dim wc As New WebClient
      wc.Headers("content-type") = "application/x-www-form-urlencoded"
      Dim response As String = wc.UploadString("http://www.example.com/uploaddata.php", "data=" & data)
      MessageBox.Show(response)

(Обратите внимание, что ответ правильный, без лишних пустых строк.) И есть код upploaddata.php:

<?php
    if (isset($_POST["data"]))
    {
        echo($_POST["data"]);
        $data=$_POST['data'];
        $fp = fopen('data.txt', 'ab');
        fwrite($fp, $data);
        fclose($fp);
    }
    else
    {
        echo "ERROR: No data!";
    }
?>

Что я делаю неправильно?

РЕДАКТИРОВАТЬ: после того, как меня попросили сделать пример Minimal, Complete и Verifiable, я вставляю код и результаты:

в приложении vb.net Sub, который отправляет строку в uploaddata.php:

   function sendStringToServer()
      Dim stringToSend as String
      stringToSend = "line1" & vbNewline & "line2" & vbNewline & "line3"

      Dim wc As New WebClient
      wc.Headers("content-type") = "application/x-www-form-urlencoded"
      Dim response As String = wc.UploadString("http://www.example.com/uploaddata.php", "data=" & data)
      MessageBox.Show(response)

Все содержимое uploaddata.php:

<?php
    if (isset($_POST["data"]))
    {
        var_dump($_POST['data']);
        $data=$_POST['data'];
        file_put_contents('data.txt', $data);
    }
    else
    {
        echo "ERROR: No data!";
    }
?>

Содержимое data.txt после вызоваsendStringToServer () в приложении vb.net:

line1

line2

line3

1 Ответ

0 голосов
/ 07 апреля 2019

Пара предложений, одно из которых, надеюсь, решит вашу проблему. Вместо использования vbNewLine (что является устаревшим BTW) попробуйте , используя vbLf. Убедитесь, что ваши значения усечены начальных и конечных пробелов перед их использованием (я предполагаю, что ваш фактический код будет использовать переменные.) Также ваша строка должна быть правильно URL-кодирована перед отправкой в ​​виде Данные POST.

function sendStringToServer()
  Dim stringToSend as String
  stringToSend = Trim("line1") & vbLf
  stringToSend &= Trim("line2") & vbLf
  stringToSend &= Trim("line3")
  stringToSend = HttpUtility.UrlEncode(stringToSend)

  Dim wc As New WebClient
  wc.Headers("content-type") = "application/x-www-form-urlencoded"
  Dim response As String = wc.UploadString("http://www.example.com/uploaddata.php", "data=" & stringToSend)
  MessageBox.Show(response)

На стороне PHP вы можете упростить свой код с помощью file_put_contents вместо старого fopen, fwrite, fclose trio.

<?php
    if (isset($_POST["data"])) {
        echo($_POST["data"]);
        file_put_contents("data.txt", $_POST["data"], FILE_APPEND);
    } else {
        echo "ERROR: No data!";
    }
...