首页 > 解决方案 > PHP 互操作性 - 打印语句未在命令行中显示

问题描述

我遇到了 PHP 没有从 Fortran 返回打印语句的问题。这个想法是 PHP 执行一个命令来编译一个 Fortran 文件然后运行它。

您被要求通过打印语句输入一个数字,问题是没有显示 CMD 但程序按预期工作 - 当我输入“不正确”数字时,它会等待我输入“正确”数字然后完成执行.

如何让命令行打印嵌套在 Fortran 文件中的语句?

PHP 脚本

$<?php
// This is a script to test interoperability between Fortran and PHP
$ExecutionStringOne = "gfortran C:\Users\****\Desktop\Programs\Fortran_Programs\FibSequence.f95 -o C:\Users\****\Desktop\Programs\Fortran_Programs\FibSequenceTest";
$ExecutionStringTwo = "C:\Users\*****\Desktop\Programs\Fortran_Programs\FibSequenceTest.exe";
exec ($ExecutionStringOne);
exec ($ExecutionStringTwo);
?>

Fortran 代码:

! This program will calculate the first 7 numbers in the Fibonacci sequence with user input as well as error checking
    Program FibSequence
        implicit none
        ! Defining our global variables 
        Integer :: acceptValue, n_terms          ! Accept Value: 0, 1 - This tracks whether input is correct (0 False, 1 True) , N_terms: Number of terms
        real    :: timeForSubRoutineStart, timeForSubRoutineEnd, totalTime ! Tracks execution time of subroutine
        write(*,*) "Please input an amount of terms to calculate sequentially to - This number can be between 1 and 7"
        read *, n_terms
        if (n_terms > 0 .AND. n_terms <= 7) then
            acceptValue = 1                      ! This is true therefore run program (This isnt really needed but for consistency)
            Call calculateSequence(n_terms)
        else
            acceptValue = 0                      ! This is false therefore run the read again and keep doing so until the output is correct
            do while ( acceptValue == 0 )
                write(*,*) "Invalid number please enter one within the given range - Range ( 1 - 7 )"
                read *, n_terms
                if (n_terms > 0 .AND. n_terms <= 7) then 
                    acceptValue = 1                     !Yay correct input
                    Call calculateSequence(n_terms)
                else
                    write(*,*) "Invalid number, try again" !Boo invalid input
                end if 
            end do
        end if
    End Program
    
    Subroutine calculateSequence(NumberOfTerms)
        Integer :: pt1 = 0, pt2 = 1
        Integer :: pt3
        Call CPU_TIME(timeForSubRoutineStart)
        i = NumberOfTerms
        
        do while (i > 0)
            pt3 = pt1
            pt1 = pt1 + pt2
            pt2 = pt3
            i = i-1
            write(*,*) "Point A Equals", pt1, "Point B Equals", pt2, "Calculated Next Number", pt3
            write(*,*) "Current Term = ", i
            write(*,*) "This program calculated this many points ", NumberOfTerms
            write(*,*) "End" 
        end do
        Call CPU_TIME(timeForSubRoutineEnd)
        totalTime = timeEnd - timeBegin
        write(*,*) "This program took ", totalTime, " seconds to execute"
    end Subroutine calculateSequence

在此处输入图像描述

编辑 - 添加了关于问题@roygvib Suggested ECHO 的新图像,它现在正在返回一些打印语句

在此处输入图像描述

标签: phpfortranphp-7fortran95

解决方案


在用户的帮助下@roygvib 我能够找到问题的解决方案。

PHP 执行文件和命令的几种不同方法 - 问题集中使用的一种方法是exec()执行程序而不返回任何输出。

另一方面,存在System()将启动给定命令和可执行文件并返回在程序执行的生命周期内存在的任何输出。

TLDR:使用System而不是Exec解决我遇到的问题。

system ($ExecutionStringOne);
system ($ExecutionStringTwo);


推荐阅读