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

Ссылка скопирована
1 ответ

Добрый день. Возникла проблема. Разрабатываем сейчас телеграмм бота на 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); // при тестирование бота, он считывает этот файл.

$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);             }         );     }); })

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.

Дополнительно:

Как вариант, напиши bash скрипт, который запускает node js и формирует файл, и уже этот скрипт запускай через shell_exec. А вообще в интернете много примеров как на php парсят гугл таблицы.

  • irishmann, Спасибо за подсказку. Будем пробовать)
  • 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);   });

    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;

    $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); });

    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;

    $data = $argv[1]; echo $data;

    Ответы:

    Пути полные укажи

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Максим Павлов Ответ

    Для передачи переменной из JavaScript (в данном случае в node.js) в PHP можно воспользоваться следующими способами:

    1. Использование AJAX запроса:
    Вы можете отправить AJAX запрос с помощью JavaScript из вашего node.js приложения на серверную часть, где PHP обработает этот запрос и получит переданную переменную. Например, в node.js:

    ```js
    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'your_php_script.php', true);
    xhr.setRequestHeader('Content-Type', 'application/json');
    xhr.send(JSON.stringify({ variable: 'value' }));
    ```

    В вашем PHP скрипте (your_php_script.php) вы можете получить переданную переменную следующим образом:

    ```php
    $data = json_decode(file_get_contents('php://input'), true);
    $variable = $data['variable'];
    ```

    2. Использование формы:
    Вы также можете создать форму в вашем HTML/JavaScript коде и отправить данные на серверную часть, где PHP сможет получить переменную. Например, в node.js:

    ```js

    document.getElementById('myForm').submit();

    ```

    В вашем PHP скрипте (your_php_script.php) вы можете получить переданную переменную следующим образом:

    ```php
    $variable = $_POST['variable'];
    ```

    Оба способа позволяют передать переменную из JavaScript (node.js) в PHP. Выберите тот, который лучше подходит для вашего конкретного случая.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно