@Lion97icvc

Как получить переменную из JavaScript (node.js) в PHP?

Добрый день. Возникла проблема. Разрабатываем сейчас телеграмм бота на PHP, возникла необходимость выгружать данные из Google-таблицы в бота. Для этой выгрузки прекрасно подошел node.js, но теперь встала проблема в том, что нужно полученный массив данных обратно передать в PHP, была предпринята попытка загружать полученные данные в текстовый файл и потом в PHP от туда забирать данные. Но при тестировании бота возникает проблема, почему JS-скрипт не срабатывает (срабатывает только если напрямую запускать php-файл в терминале сервера). Да и вообще хранить данные в txt как-то не правильно. Поэтому хотелось бы передать из js в PHP массив, но к сожалению понятия не имею как можно это сделать. Для запуска скрипта js используем функцию shell_exec. Вот куски кода:
$file = "JSON/sheets.txt";
$table = 'copyright';
$result = shell_exec("node sheets.js $file $table");//выполнение файла получения из google-таблиц нужных данных. 
$result = file_get_contents($file); // при тестирование бота, он считывает этот файл.

auth.authorize((err) => {
        if (err) {
            console.error("Ошибка авторизации:", err);
            return;
        }
    /*Создание подключения */
        const sheets = google.sheets({ version: "v4", auth: auth });
        /*Получение данных из таблицы */
        sheets.spreadsheets.values.batchGet(
            {
                spreadsheetId: spreadsheetId,
                majorDimension: "COLUMNS",
                ranges: range,
                auth: auth,
            },
            (err, response) => {
                //Обработка данных из таблицы
                if (err) {
                    console.log("Ошибка:" + err);
                    return;
                }
                const valueRanges = response.data.valueRanges;
  let messageText = 'Ваши заявки:';
                valueRanges[0].values[0].map((_, index) => {
                    let tempText = '';
                    let date = 'Дата:';
                    let name = '#Имя:';
                    let text = '#Обращение:';
                    tempText = tempText + date + valueRanges[0].values[0][index];
                    tempText = tempText + name + valueRanges[1].values[0][index];
                    tempText = tempText + text + valueRanges[2].values[0][index] + "\n";
                    messageText += tempText; 
                });
                const pathToFile = argv[2]; //переменная из php
                fs.writeFileSync(pathToFile, messageText);
            }
        );
    });
})

Необходимо PHP передать переменную messageText.
  • Вопрос задан
  • 537 просмотров
Решения вопроса 1
batowski
@batowski
1) Вы можете сделать http запрос POST или GET к url по которому находится ваш php скрипт.
2) Если node.js и php находятся на одном сервере вы можете вызвать нужный php скрипт.
3) Вы можете использовать веб сокеты, настроив соединение между node.js и php.
4) Вы можете использовать общую директорию или базу данных в которую будете записывать данные, и оттуда забирать их с помощью php.

Я бы посоветовал 1 или 2 вариант.

Пример 1 варианта:
const axios = require('axios');

axios.post('http://example.com/your-php-script.php', { data: 'your data' })
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });


Получение данных в php:
$data = $_POST['data'];
echo $data;


Пример 2 варианта:
const { exec } = require('child_process');

const data = 'your data';
const command = `php /path/to/your-php-script.php "${data}"`;

exec(command, (error, stdout, stderr) => {
  if (error) {
    console.error(`Error executing PHP script: ${error}`);
    return;
  }

  console.log(stdout);
});


Получение данных в php:
$data = $argv[1];
echo $data;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Noizefan
@Noizefan
Пути полные укажи
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 03:54
1500 руб./за проект
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект