使用php

时间:2019-01-21 16:21:48

标签: php html c

最终目标非常简单。我需要将文本文件中的一行文本变成红色,将其解析为几个变量,然后在网页中的表格中的单元格中显示这些变量。我已经使用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>

这里是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”时,网页上的单元格将显示vTicket为15。

当我将变量设置为文本文件中的值或Fixstring C程序的返回值时,它显示为空白。

但是,这是我在此实例中从命令行运行php时看到的内容

[root @ obs-stl-01自定义]#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>

但是该页面显示的是Thing1单元格的空白字段

我实际上可以捕获此输出并将其写入test.html,然后将浏览器指向该输出,并且显示正确。

我知道我想念的东西真的很蠢,但是我对这东西有些蛇。任何帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:0)

欢迎使用StackOverflow!听起来这可能是我的权限问题。从命令行运行时,PHP是从您的用户运行的,但通常由Web服务器(例如www-data)的另一个用户运行。如果您的用户具有执行文件的权限,但Web服务器用户没有执行该文件的权限,则可能会导致出现以下问题:可以正常正常运行,但不能通过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是服务器的用户名。希望这会有所帮助!

答案 1 :(得分:0)

当我使用输入文件运行PHP时,该文件的格式由您解析的方式隐含,它可以按照您的描述工作。正如BradzTech的答案所暗示的,这很可能仅仅是权限问题。

无论如何,可能会帮助解决问题的方法是添加yarnprint "$line\n";print_r($fields);,以确保您正在阅读并解析自己的想法。

我会放弃print_r($vticket); C程序进行故障排除;我认为这只是让您感到复杂。只需使用PHP即可打印出您要设置的变量,然后从输出结果与预期的第一点开始进行故障排除。

编辑:显示代码有效的最小示例...

您的PHP代码似乎没有任何问题。当我运行以下代码时,使用您对问题的评论中的输入行,为您的代码添加了建议的调试功能并修剪了HTML,得到了您所期望的结果:

fixstring

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

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