使用php将文本变量从文本文件传递到html表单单元格

使用php将文本变量从文本文件传递到html表单单元格,php,html,c,Php,Html,C,最终目标非常简单。我需要将文本文件中的一行文本变红,将其解析为几个变量,然后将变量显示在网页中表格的单元格中。我已经用mysql做了几十次了,但从来没有用过测试文件。问题是我在牢房里得到了一个空白的愤怒。但是,如果我从命令行运行,数据将在单元格中显示 在我的故障排除中,我把事情降到了最低限度——只有一个变量和一个单元格。如果我硬编码变量$mytest=“15”;它很好用。如果我从文本文件中获取变量并将其读入$mytest,它在单元格中显示为空,但在命令行中看起来很好。我甚至将一个变量设置为15,

最终目标非常简单。我需要将文本文件中的一行文本变红,将其解析为几个变量,然后将变量显示在网页中表格的单元格中。我已经用mysql做了几十次了,但从来没有用过测试文件。问题是我在牢房里得到了一个空白的愤怒。但是,如果我从命令行运行,数据将在单元格中显示

在我的故障排除中,我把事情降到了最低限度——只有一个变量和一个单元格。如果我硬编码变量$mytest=“15”;它很好用。如果我从文本文件中获取变量并将其读入$mytest,它在单元格中显示为空,但在命令行中看起来很好。我甚至将一个变量设置为15,并通过exec将其发送到一个短C程序,然后将$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>

V-Ticket测试

欢迎来到StackOverflow!这听起来可能是我的权限问题。当从命令行运行PHP时,PHP由用户运行,但它通常由不同的用户通过web服务器运行,例如
www-data
。如果您的用户有权执行该文件,但web服务器用户没有,则会导致您看到的问题:works可以正确地手动运行,但不能通过HTTP运行

要快速检查这是否是您的问题,请尝试运行
chmod+x/opt/observium/html/custom/fixstring
。它现在在浏览器中工作吗


希望是这样。然而,这在技术上是一个不安全的解决方案,因为现在任何用户都可以执行该文件。如果您希望更安全,您应该运行
chmod o-x/opt/observium/html/custom/fixstring
来恢复此更改,并运行
chown www-data/opt/observium/html/custom/fixstring
来更改web服务器的文件所有权,假设
www-data
是服务器的用户名。希望这有帮助

当我使用一个输入文件运行PHP时,输入文件的格式与您解析它的方式相同,它的工作方式与您描述的一样。很可能这只是一个权限问题,正如BradzTech的回答所暗示的那样

无论如何,添加
print“$line\n”可能有助于排除故障
打印($fields)
打印($vticket)以确保您正在阅读和分析您认为自己是什么

我会放弃
fixstring
C程序进行故障排除;我想这只是让你的事情复杂化了。只需使用PHP打印您正在设置的变量,并从输出与预期不同的第一点开始进行故障排除

编辑:显示代码工作的最小示例

您的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%
<?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>
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>
cat从file.php读取文本

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%
<?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>
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>

因此,我认为这是一个非代码问题,例如无法读取输入文件,可能是由于权限;还有许多其他的可能性。

您能发布一个示例输入文件吗?i、 例如,一个三行
vmbrr.v2.6.6.vticketQ.log
文件?web服务器错误日志中有什么?下面的示例输入文件-单行。我从脚本中的所有字段开始,但很快将其缩减为一个变量,因为它们都有相同的问题。vticket:15 | From:John Doe | to:Jane Doe | Date:Wed,2018年10月17日16:11:29+0000 |用户:Phil Collins |程序:Truthordar |问题:无法将文本读入可变|区域:51 | POC:C.Darwin | Chargeline:R&D | ECD:02/15/19 |状态:0%谢谢我验证了权限与我拥有的20多个正常工作的php脚本相同。我甚至用完全烫发的方式打开了它,只是为了确定。@slendeprovo:重要的是输入文件的权限;PHP脚本可以读取输入文件吗。。。是-它可以很好地读取输入文件。我已临时打开测试权限。