2015-07-05 3 views
-6

Я работаю над проектом в своем колледже, который занимается разработкой веб-сайта autograder, такого как hackerrank для моего колледжа. Теперь, для компиляции кодов, я использую API, предоставляемый сферическими двигателями. API возвращает вывод в виде строки, которая затем сохраняет его в файл. Затем я использую ранее определенный выходной файл для сравнения этого файла и соответственно проверяю, является ли код правильным или неправильным. Теперь проблема заключается, например. если выход, как показано ниже:Работа с файлами с использованием PHP

Hello World

Hello World

Hello World

строка записывается в файл, как Hello World WorldHello WorldHwllo. Я использую PHP для записи текста в файл.

Есть ли способ записать строку как файл? Любой другой альтернативный метод также будет оценен.

Thank you.

EDIT

для, например, если код:

#include<iotsream> 
using namespace std; 
int main() 
{ 
int i; 
for(i=0;i<3;i++) 
{ 
cout<<"Hello World\n"; 
} 
return 0; 
} 

Выход этого кода должен быть

Hello World

Hello World

Hello World

И когда я показываю строку, которая хранится в массиве PHP $ data ['output'], она отображается нормально, но когда я пишу эту строку в файл, она сохраняется в одной строке. Я хочу сохранить строку так, как она есть в разных строках.

В связи с этим этот файл, если он не равен выходному файлу шаблона, который содержит строку Hello World в разных строках.

EDIT Это код PHP для файла, который будет брать исходный код и вводить его и отправлять его компилятору и получать его соответственно.

<?php 
error_reporting(0); 
include_once '../connection-script.php'; 
session_start(); 


$user = 'xxxxx'; 
$pass = 'xxxxx'; 
$code = ''; 
$input = ''; 
$run = true; 
$private = false; 

$subStatus = array(
    0 => 'Success', 
    1 => 'Compiled', 
    3 => 'Running', 
    11 => 'Compilation Error', 
    12 => 'Runtime Error', 
    13 => 'Timelimit exceeded', 
    15 => 'Success', 
    17 => 'memory limit exceeded', 
    19 => 'illegal system call', 
    20 => 'internal error' 
); 

$error = array(
    'status' => 'error', 
    'output' => 'Something went wrong :(' 
); 

//echo json_encode(array('hi', 1)); exit; 
//print_r($_POST); exit; 

if (isset($_POST['process']) && $_POST['process'] == 1) { 
    $lang = isset($_POST['lang']) ? intval($_POST['lang']) : 1; 
    $input = trim($_POST['input']); 
    $code = trim($_POST['source']); 
    $answerfile=$_POST['answerfile']; 
    $outputfile=$_POST['outputfile']; 

    $client = new SoapClient("http://ideone.com/api/1/service.wsdl"); 

    //create new submission 
    $result = $client->createSubmission($user, $pass, $code, $lang, $input, $run, $private); 

    //if submission is OK, get the status 
    if ($result['error'] == 'OK') { 
     $status = $client->getSubmissionStatus($user, $pass, $result['link']); 
     if ($status['error'] == 'OK') { 

      //check if the status is 0, otherwise getSubmissionStatus again 
      while ($status['status'] != 0) { 
       sleep(3); //sleep 3 seconds 
       $status = $client->getSubmissionStatus($user, $pass, $result['link']); 
      } 

      //finally get the submission results 
      $details = $client->getSubmissionDetails($user, $pass, $result['link'], true, true, true, true, true); 
      if ($details['error'] == 'OK') { 
       //print_r($details); 
       if ($details['status'] < 0) { 
        $status = 'waiting for compilation'; 
       } else { 
        $status = $subStatus[$details['status']]; 
       } 

       $data = array(
        'status' => 'success', 
        'meta' => "Status: $status | Memory: {$details['memory']} | Returned value: {$details['status']} | Time: {$details['time']}s", 
        'output' => htmlspecialchars($details['output']), 
        'raw' => $details 
       ); 


       if($details['cmpinfo']) { 
        $data['cmpinfo'] = $details['cmpinfo']; 
       } 

       $myfile=fopen("output.txt","w"); 
       fwrite($myfile, $data['output']); 
       fclose($myfile); 

       $qid=$_POST['questionid']; 
       $did=$_POST['domainid']; 

       if(sha1_file("output.txt") == sha1_file($outputfile)) 
       { 

       $file=fopen($answerfile,"w"); 
       fwrite($file,$code); 
       fclose($file); 

       $mail=$_SESSION['email']; 
       $query="SELECT * from student where semail='$mail'"; 
       $result1=mysql_query($query); 
       $row1=mysql_fetch_array($result1); 
       $sid=$row1['studentid']; 


       $sql="SELECT * from practiceques where did='$did' and quesid='$qid'"; 
       $result=mysql_query($sql); 
       $row=mysql_fetch_array($result); 
       $marks=$row['marks']; 

       $curdate=date("Y-m-d H:i:s"); 

       $answer=mysql_query("INSERT INTO points VALUES ('$sid','$qid','$curdate',1,'$marks','$did')"); 

       echo json_encode($data); 

       } 
       else 
       { 
        $mail=$_SESSION['email']; 
        $query="SELECT * from student where semail='$mail'"; 
        $result1=mysql_query($query); 
        $row1=mysql_fetch_array($result1); 
        $sid=$row1['studentid']; 



        $sql="SELECT * from practiceques where did='$did' and quesid='$qid'"; 
        $result=mysql_query($sql); 
        $row=mysql_fetch_array($result); 
        $marks=$row['marks']; 

        $curdate=date("Y-m-d H:i:s"); 

        $answer=mysql_query("INSERT INTO points VALUES ('$sid','$qid','$curdate',0,0,'$did')"); 
        echo json_encode($data); 
       } 
      } 
      else { 
       //we got some error :(
       //print_r($details); 
       echo json_encode($error); 
      } 
     } 
     else { 
      //we got some error :(
      //print_r($status); 
      echo json_encode($error); 
     } 
    } else { 
     //we got some error :(
     //print_r($result); 
     echo json_encode($error); 
    } 
} 
?> 
+1

Приведите пример кода, который у вас есть сейчас, и который не дает желаемого результата. –

+0

Обновите свой вопрос на примере реального кода. –

+1

Похоже, вы должны немного прочитать о разных строковых кодировках в разных операционных системах. Может случиться так, что этот API, который вы используете, возвращает нормальные разрывы unix/интернет-линий, в то время как вы привыкли/ожидаете, что MS-Windows будет похожа на строки. – arkascha

ответ

0

Вы не можете писать с C в документе php. В любом случае, это PHP-код для записи в файл.

<?php 
$fp = fopen('file.name', 'a+'); 
fwrite($fp, 'Hello World'.PHP_EOL); 
fclose($fp); 
?> 
+0

Сэр, я не думал, что вы поняли мою проблему. Я делаю проект, чтобы сделать такой сайт, как hackerrank для моего колледжа. Я использую онлайн-API компилятора, предоставляемый шаровыми машинами для компиляции кода, введенного пользователем. Онлайновый компилятор принимает предпочтение языка, исходный код и ввод с использованием формы HTML, а затем возвращает исходный код, время работы и т. Д. Он возвращает его вывод в виде строки, – user3832137

Смежные вопросы