Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从另一个文件检索后执行数学运算_Php_File - Fatal编程技术网

Php 从另一个文件检索后执行数学运算

Php 从另一个文件检索后执行数学运算,php,file,Php,File,我有一个文本文件(math.txt),里面可以写任何类型的算术运算。我必须使用PHP读取文件并确定输出。我使用下面提到的代码来读取文件的内容 $file = 'math.txt'; // 2+3 is written in math.txt $open = fopen($file, 'r'); $read = fgets($open); $close = fclose($open); 使用上面的代码,我得到了内容。但是,回显内容是显示原始内容(即2+3),而不是显示输出(即5)。我不明白

我有一个文本文件(math.txt),里面可以写任何类型的算术运算。我必须使用PHP读取文件并确定输出。我使用下面提到的代码来读取文件的内容

$file = 'math.txt';  // 2+3 is written in math.txt

$open = fopen($file, 'r');

$read = fgets($open);
$close = fclose($open);
使用上面的代码,我得到了内容。但是,回显内容是显示原始内容(即2+3),而不是显示输出(即5)。我不明白在这种情况下我该怎么办

在此方面的任何帮助都将不胜感激。提前谢谢

但回显内容是显示原始内容(即2+3) 而不是显示输出(即5)

这完全是意料之中的行为。从文件中读取字符串。PHP如何知道您希望它计算表达式

您必须实现一个简单的解析器(或在Internet上搜索),用于分析表达式并填充结果

在以下方面提供了非常好的功能:

但是请注意,如果输入包含语法错误,这仍然会停止脚本执行


这里有一个更好的库,它使用real解析器:

根据操作符读取文件解析

        like     file=2*5;
             $open = fopen($file, 'r');

              $read = fgets($open);


                $key = preg_split("/[*+-\/]+/", $read);

                 $operator= substr($a, strpos($a,$key[1])-1,1);


                 if($operator=='+')
                 {
                 echo $key[0]+ $key[1];
                 }
                 else  if($operator=='-')
                 {
                 echo $key[0]- $key[1];
                 }
                 else  if($operator=='*')
                 {
                 echo $key[0]* $key[1];
                 }
                 else  if($operator=='/')
                 {
                 echo $key[0]/$key[1];
                 }

我觉得这样说有点不好,但也许eval会解决问题?@jureslak It可以解决这样的问题,但是——正如您所指出的——程序员会对此感到不好;)它引入了安全漏洞。这是家庭作业吗?我知道这一点,但我也提到我对下一步一无所知。查看此网站,未发现相关帖子。所以,我想问这个问题。如果您向我们展示您的完整代码,我们可以更好地帮助您找到解决方案。即:
$total=$var1+$var2;echo$总计如果算术表达式是(2+3)*3,上面的代码是否支持它?@Debashis否编写的此解决方案不处理括号。其他需要注意的事项包括空格,甚至可能会自动将字符串转换为数字数据类型(特别是当此类字符串包含括号和空格时)。最佳实践是明确告诉php要做什么。
        like     file=2*5;
             $open = fopen($file, 'r');

              $read = fgets($open);


                $key = preg_split("/[*+-\/]+/", $read);

                 $operator= substr($a, strpos($a,$key[1])-1,1);


                 if($operator=='+')
                 {
                 echo $key[0]+ $key[1];
                 }
                 else  if($operator=='-')
                 {
                 echo $key[0]- $key[1];
                 }
                 else  if($operator=='*')
                 {
                 echo $key[0]* $key[1];
                 }
                 else  if($operator=='/')
                 {
                 echo $key[0]/$key[1];
                 }