Почему стираются данные в файле на удаленном сервере?

Stepa075

Новичок
Здравствуйте! Есть бесплатный хостинг на 000Webhost, там размещен php-скрипт, который из пришедшего GET-запроса извлекает данные и записывает их в два файла. Первые две-три минуты данные успешно читаются из файлов, но потом файлы оказываются без данных. Вернее в html-файле остаются запятые, которыми эти данные разъединены. Подскажите пожалуйста, почему так происходит и как нужно записывать данные? Кстати, на локальном сервере все хранится отлично.
PHP:
<?php

 if (isset($_GET["params"]) && isset($_GET["params1"]) && isset($_GET["params2_1"]) && isset($_GET["params2_2"])
     && isset($_GET["params2_3"]) && isset($_GET["params2_4"]))
    { echo " Получены новые вводные: данные датчика ESP - ".$_GET["params"].", ".$_GET["params1"].", ".$_GET["params2_1"].
     ", ".$_GET["params2_2"].", ".$_GET["params2_3"].", ".$_GET["params2_4"];}
 else { echo "Переменные не дошли. Проверьте все еще раз."; }
$str = $_GET["params"];
$str1 = $_GET["params1"];
$str2 = $_GET["params2_1"];
$str3 = $_GET["params2_2"];
$str4 = $_GET["params2_3"];
$str5 = $_GET["params2_4"];
$myFile = "doc/hello.html";
$fd = fopen($myFile, 'w') or die("не удалось создать файл");
fwrite($fd, $str. "," . $str1. "," . $str2. "," . $str3. "," . $str4. "," . $str5);
fclose($fd);
$fd1 = fopen("doc/hello.txt", 'w+') or die("не удалось создать файл");
fwrite($fd1, $str. "\r\n" . $str1. "\r\n" . $str2. "\r\n" . $str3. "\r\n" . $str4. "\r\n" . $str5);
fclose($fd1);
?>
 

weregod

unserializer
Попробуйте в отладку. Например, место свободного на сервере нет.
 

WMix

герр M:)ller
Партнер клуба
проверь еще на !empty
PHP:
if (isset($_GET["params"], $_GET["params1"], $_GET["params2_1"], $_GET["params2_2"], $_GET["params2_3"], $_GET["params2_4"]) && !empty($_GET["params"]) && !empty($_GET["params1"]) && ... )
мне кажется там затык
есть еще такая волшебная строка
PHP:
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
напиши вначале, и читай логи webserver
вдруг ты свой скрипт без ?params=foo&params1=bar... запускаешь

PHP:
$myFile = "doc/hello.html";
$fd = fopen($myFile, 'w') or die("не удалось создать файл");
fwrite($fd, $str. "," . $str1. "," . $str2. "," . $str3. "," . $str4. "," . $str5);
больше на csv похоже https://www.php.net/manual/en/function.fputcsv.php
 
Последнее редактирование:

Stepa075

Новичок
проверь еще на !empty
PHP:
if (isset($_GET["params"], $_GET["params1"], $_GET["params2_1"], $_GET["params2_2"], $_GET["params2_3"], $_GET["params2_4"]) && !empty($_GET["params"]) && !empty($_GET["params1"]) && ... )
мне кажется там затык
есть еще такая волшебная строка
PHP:
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
напиши вначале, и читай логи webserver
вдруг ты свой скрипт без ?params=foo&params1=bar... запускаешь

PHP:
$myFile = "doc/hello.html";
$fd = fopen($myFile, 'w') or die("не удалось создать файл");
fwrite($fd, $str. "," . $str1. "," . $str2. "," . $str3. "," . $str4. "," . $str5);
больше на csv похоже https://www.php.net/manual/en/function.fputcsv.php
На !empty нельзя проверять - там могут быть нули в значениях. Логи почитал, ничего интересного. Самое интересное что записывает в файлы. Я сразу считываю-все ок. Через пять минут - в файлах пусто.
 

Stepa075

Новичок
На !empty нельзя проверять - там могут быть нули в значениях. Логи почитал, ничего интересного. Самое интересное что записывает в файлы. Я сразу считываю-все ок. Через пять минут - в файлах пусто.
ВОПРОС ЗАКРЫТ! Поменял хостинг на sprinthost.ru - все работает как часы!
 

Valick

Новичок
Stepa075, нельзя работать с файлами без блокировок, иначе так и будут "пропадать маляры".
PHP:
<?php
function message($message)
{
    return nl2br($message . PHP_EOL);
}

$path = 'test/';
$files = [
    'hello.html' => [
        'delimiter' => ',',
    ],
    'hello.txt' => [
        'delimiter' => PHP_EOL,
    ],
];
// необходимо настроить валидацию
// сейчас это целое число для всех параметров
$args = [
    'params' => FILTER_VALIDATE_INT,
    'params1' => FILTER_VALIDATE_INT,
    'params2_1' => [
        'filter' => FILTER_VALIDATE_INT,
        'flags' => FILTER_REQUIRE_SCALAR,
        'options' => ['min_range' => 0, 'max_range' => 10],
    ],
    'params2_2' => FILTER_VALIDATE_INT,
    'params2_3' => FILTER_VALIDATE_INT,
    'params2_4' => FILTER_VALIDATE_INT,
];

$parameters = filter_input_array(INPUT_GET, $args, false) ?? [];
$parameters = array_filter($parameters, 'strlen');

if (count($args) != count($parameters)) {
    echo message("Переменные не дошли. Проверьте все еще раз.");
} else {
    echo message('Получены новые вводные: данные датчика ESP - ' . implode(', ', $parameters));
    foreach ($files as $fileName => $fileAttr) {
        if (!file_put_contents($path . $fileName, implode($fileAttr['delimiter'], $parameters), LOCK_EX)) {
            echo message('Не удалось создать файл: ' . $fileName);
        } else {
            echo message('Файл: ' . $fileName . ' успешно сохранён');
        }
    }
}
 
Сверху