2013-06-21 6 views
0

저는 CAS 및 maxima을 처음 사용합니다. 다음 작업을 수행 할 수 있는지 여부를 알고 싶습니다.maxima- 어떻게 PHP에서 최대 맥 스크립트를 실행할 수 있습니까?

1) 예를 들어 매개 변수 목록이 있습니다. a, b, c

2)은 PHP, 난 a, b, c 원하는 값으로 무작위 및 요구 사항을 만족된다

do { 
    a=random(20); 
    b=random(20); 
    c=random(20); 
}while (!(a > b) || !(b > c)) 

되도록 a, b, c 관련된 문자열로 저장 일부 맥시 스크립트, 예컨대을 .:있다.

3) PHP에서 a, b, c의 값을 가져옵니다.

목적은 학생들에게 합리적인 매개 변수를 사용하여 무작위 질문을 만드는 것입니다. 그러면 maxima 스크립트를 실행하고 매개 변수 값을 검색하려면 어떻게해야합니까? 그것은 내 목적에 적합한가?

답변

0

나는 당신의 코드가 어떻게 동작하는지 알지 못한다.하지만 PHP 확장자로 맥시마를 저장하면 작동 할 수있다. 목표는 웹에서 제공되는 숙제 문제를 만들 수 맥시마를 사용하는 경우 에코 예를

   echo $A ; 
+0

코드가 맥시마 문법에 익숙하지 않아서 코드는 내가 원하는 것을 보여줍니다 ... PHP 확장으로 맥시마를 추가하면 맥시마 스크립트의 출력을 어떻게 검색합니까? – Boyang

+0

맥시마 스크립트에서 변수 'delaring'을 시도한 다음 변수를 반향하여 그것이 나온 날씨를 확인하십시오. 또는 루프 –

+0

이후 maxima 스크립트 안에 코드를 추가하면 작동합니까? –

0
<?php 

require_once($_SERVER['PM_BASE_CONFIG_PATH']); 

class maxima_core { 
    private $executable_command; 
    protected $dbg_bool; 
    protected $dbg_info; 
    public function __construct($dbg=FALSE){ 
    $this->executable_command=constant('PM_MAXIMA_EXEC_CMD'); 
    $this->dbg_bool=$dbg; 
    $this->dbg_info=""; 
    } 
    protected function exec($query){// to include package that is loaded by init_command 
    $descriptor = array(
     0 => array("pipe", "r"), // stdin is a pipe that the child will read from 
     1 => array("pipe", "w"), // stdout is a pipe that the child will write to 
     2 => array("file", "/tmp/error-log.txt", "a")//constant('PM_SERVER_LOG_DIR')."/maxima/error.log", "a") // stderr is a file to write to 
    ); 
    $cwd=constant('PM_ACTIVITY_PLUGIN_URL')."/engine_solver"; 
    $MAXIMA_DIR = constant('PM_ACTIVITY_PLUGIN_DIR'); 
    $env=array(); 
    $init_command="display2d:false$" . "PM_ACTIVITY_PLUGIN_URL: \"" . $MAXIMA_DIR . "\"$"; 
    //'load("/home/gabriel/github/moodledata/stack/maximalocal.mac");'; 
    $exec_cmd=$this->executable_command." --quiet"; 
    // --userdir='".constant('PM_ACTIVITY_PLUGIN_DIR')."/engine_solver/maxima_userdir'"; 
    // change 
    $result=NULL; 
    $process=proc_open($exec_cmd,$descriptor,$pipes,$cwd,$env); 
    if(is_resource($process)){ 
     if (!fwrite($pipes[0], $init_command)) { 
     echo "<br />Could not write to the CAS process!<br />\n"; 
     } else { 
     fwrite($pipes[0], $query); 
     fwrite($pipes[0], "quit();"); 
     fclose($pipes[0]); 
     $result=stream_get_contents($pipes[1]); 
     fclose($pipes[1]); 
     proc_close($process); 
     } 
    } 
    return $result; 
    } 
    public function dbg_info(){ 
    return $this->dbg_info; 
    } 
} 
?> 
0

를 들어

 <?php 
     require_once("extension/Maxima.php"); 

     ?> 

파일은 PHP의 시작 부분에 코드 줄을 놓습니다 서버, 나는 저것을하는 프로젝트가 있었다고 생각한다. 나는 그들 중 하나가 LON-CAPA라고 생각합니다 - 웹 검색은 그것을 발견해야합니다. Maxima 웹 사이트의 관련 프로젝트 페이지에서 언급 된 다른 프로젝트가있을 수 있습니다. [1]

[1] http://maxima.sf.net/relatedprojects.html

+0

또한 moodle 프레임 워크 아래에있는 STACK3이라는 하나를 알고 있습니다. 정보에 대한 Thx. – Boyang

1

넌 맥시마에 파일 명령 문자열을 전달할 수 있고, 그 명령을 줄 맥시마에 의해지지된다.

당신의 OS가 Linux/Unix/MacOS 경우 : 당신의 OS가 Win 경우

exec('maxima -q -b file'); 

또는

system('maxima -q -b file'); 

: PHP에서

맥시마에서

$maximaDir = 'D:/Program Files/Maxima-5.30.0'; // If your maxima is installed in elsewhere, please modified this location 

exec($maximaDir.'/bin/maxima.bat -q -b "result.txt"'); 

, stringout();을 사용하여 파일에서 결과를 얻은 다음 PHP에서 문자열로 파일을 읽습니다. 원하는대로 문자열을 조작 할 수 있습니다.

관련 문제