Я работаю над проектом в своем колледже, который занимается разработкой веб-сайта 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);
}
}
?>
Приведите пример кода, который у вас есть сейчас, и который не дает желаемого результата. –
Обновите свой вопрос на примере реального кода. –
Похоже, вы должны немного прочитать о разных строковых кодировках в разных операционных системах. Может случиться так, что этот API, который вы используете, возвращает нормальные разрывы unix/интернет-линий, в то время как вы привыкли/ожидаете, что MS-Windows будет похожа на строки. – arkascha