передача текстовой переменной из текстового файла в html-ячейку формы с использованием php - PullRequest
0 голосов
/ 21 января 2019

Конечная цель действительно проста. Мне нужно выделить строку текста из текстового файла, разобрать ее на несколько переменных и затем отобразить переменные в ячейках таблицы на веб-странице. Я делал это десятки раз, используя MySQL, но никогда не тестовый файл. Проблема в том, что я получил пустую ячейку внутри камеры. Однако, если я запускаю из командной строки, данные отображаются в ячейках, как и должно быть.

При устранении неполадок я свел все до минимума - только одну переменную и одну ячейку. Если я жестко закодирую переменную $ mytest = "15"; Работает нормально. Если я возьму переменную из текстового файла и прочту ее в $ mytest, в ячейке будет пусто, а из командной строки все выглядит хорошо. Я даже дошел до того, что установил переменную в 15 и отправил ее короткой программе на C через exec, а затем установил my $ mytest равным возвращаемому значению и все еще пустым.

<?php
$handle = fopen("/home/vm725d/vmbrr.v2.6.6.vticketQ.log", "r");
$line = fgets($handle);
        // process the line read.
        $fields = explode("|",$line);
        // Get data from fields
        $vticket = explode (":", $fields[0]);
        //$vTicket=$vticket[1];
        $vTicket="15";
        $mytest=exec ('/opt/observium/html/custom/fixstring ' . $vTicket);
        //$mytest=$vTicket;
        print "$mytest";
    fclose($handle);
?>
<html>
<body>
<CENTER><B>V-Ticket Test</b> </CENTER>

<TABLE>
<FORM METHOD="POST" name=modticket action=modticket.php>
<center><TABLE bgcolor="#258e8e" width=800 border=1>
<TR></TR<TR></TR>

<TR>
        <TD bgcolor="#FFFF99">vTicket:</TD>

         <TD width=24><input name="thing1" value="<?php print $mytest;?>"></TD>

</TR>
</table>
<input type=submit name=create_case value="Update">
</FORM>
</body>
</html>

Вот код Fixstring C - запомните, я использую его просто как тест.

#include <stdio.h>
#include <string.h>


int main(int argc, const char *argv[300])
{
        int length = 0;

        length = strlen(argv[1]);
        char NEW[length];
        memset (NEW,0,length );
        strcpy(NEW, argv[1]);

        printf ("%s",NEW);
}

когда я устанавливаю свою переменную $ mytest равной "15" В ячейке на моей веб-странице отображается 15 для vTicket.

Когда я устанавливаю в моей переменной значение в текстовом файле или значение, возвращаемое программой fixstring на C, оно отображается пустым.

Однако вот что я вижу, когда запускаю php из командной строки в этом случае

[root @ obs-stl-01 custom] # php vtest1.php

<html>
<body>
<CENTER><B>V-Ticket Test</b> </CENTER>

<TABLE>
<FORM METHOD="POST" name=modticket action=modticket.php>
<center><TABLE bgcolor="#258e8e" width=800 border=1>
<TR></TR<TR></TR>

<TR>
        <TD bgcolor="#FFFF99">vTicket:</TD>

         <TD width=24><input name="thing1" value="15"></TD>

</TR>
</table>
<input type=submit name=create_case value="Update">
</FORM>
</body>
</html>

Тем не менее на странице отображается пустое поле для ячейки вещь1

На самом деле я могу перехватить этот вывод и записать его в test.html, а затем указать на него свой браузер, и он отобразится правильно.

Я знаю, что мне не хватает чего-то действительно глупого, но я немного змея на этом. Любая помощь будет оценена.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Когда я запускаю ваш PHP с входным файлом в формате, подразумеваемом тем, как вы его анализируете, он работает так, как вы его описали. Вполне возможно, что это просто проблема с разрешениями, как предполагает ответ BradzTech.

Независимо от того, что может помочь при устранении неполадок, это добавление print "$line\n"; и print_r($fields); и print_r($vticket);, чтобы убедиться, что вы читаете и анализируете то, что вы думаете.

Я бы отказался от программы fixstring C для устранения неисправностей; Я думаю, что это просто усложняет тебе вещи. Просто используйте PHP для распечатки переменных, которые вы устанавливаете, и устраните неполадки с первой точки, где этот вывод отличается от ожидаемого.

EDIT : минимальный пример, показывающий, что код работает ...

Похоже, что с вашим PHP-кодом что-то не так. Когда я запускаю приведенный ниже код, который представляет собой ваш код с добавленной мной предложенной отладкой и урезанным HTML-кодом, используя строку ввода из вашего комментария к вашему вопросу, я получаю ожидаемый вами результат:

cat vmbrr.v2.6.6.vticketQ.log

vticket: 15 | From: John Doe | To: Jane Doe | Date: Wed, 17 Oct 2018 16:11:29 +0000 | User: Phil Collins | Program: TruthorDare | Issue: Cannot read text into v ariable | Area: 51 | POC: C. Darwin | Chargeline: R&D | ECD: 02/15/19 | Status: 0%

cat read-text-from-file.php

<?php
$handle = fopen("vmbrr.v2.6.6.vticketQ.log", "r");

$line = fgets($handle);
// process the line read.
$fields = explode("|",$line);
print_r($fields);
print "\n";

// Get data from fields
$vticket = explode (":", $fields[0]);
print_r($vticket);
print "\n";

$vTicket=$vticket[1];
$mytest=$vTicket;
print "$mytest\n";

fclose($handle);
?>

<TD width=24><input name="thing1" value="<?php print $mytest;?>"></TD>

php read-text-from-file.php

Array
(
    [0] => vticket: 15 
    [1] =>  From: John Doe 
    [2] =>  To: Jane Doe 
    [3] =>  Date: Wed, 17 Oct 2018 16:11:29 +0000 
    [4] =>  User: Phil Collins 
    [5] =>  Program: TruthorDare 
    [6] =>  Issue: Cannot read text into v ariable 
    [7] =>  Area: 51 
    [8] =>  POC: C. Darwin 
    [9] =>  Chargeline: R&D 
    [10] =>  ECD: 02/15/19 
    [11] =>  Status: 0%

)

Array
(
    [0] => vticket
    [1] =>  15 
)

 15 

<TD width=24><input name="thing1" value=" 15 "></TD>

Таким образом, я считаю, что это проблема, не связанная с кодом, например, невозможность прочитать входной файл, возможно, из-за разрешений; Есть много других возможностей.

0 голосов
/ 21 января 2019

Добро пожаловать в StackOverflow! Похоже, это может быть проблема с разрешениями для меня. PHP запускается от вашего пользователя при запуске из командной строки, но обычно он запускается другим пользователем на веб-сервере, например www-data. Если у вашего пользователя есть права на выполнение файла, а у пользователя веб-сервера - нет, это может вызвать проблему, с которой вы столкнулись: работает правильно, работает вручную, но не через HTTP.

Чтобы быстро проверить, является ли это вашей проблемой, попробуйте запустить chmod +x /opt/observium/html/custom/fixstring. Теперь он работает в браузере?

Надеюсь, это так. Однако это технически небезопасное решение, поскольку теперь любой пользователь может выполнить файл. Если вы хотите быть более безопасным, вам следует вместо этого запустить chmod o-x /opt/observium/html/custom/fixstring, чтобы отменить это изменение, и запустить chown www-data /opt/observium/html/custom/fixstring, чтобы изменить владельца файла на веб-сервер, предполагая, что www-data - это имя пользователя сервера. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...