2
0

コードゴルフ大会のためのコードチェックが500エラーになって困った

Posted at

はじめに

こんにちは、エンジニアのkeitaMaxです。

前回、コードゴルフ大会のために、コードの正当性を判定する処理を作成しました。しかし、コードがエラーになると500エラーが発生し、任意のレスポンスを返すことができず困ってしまいました。これを備忘録として記事にまとめます。

前回の記事

前回のコード

function codeExecutionOutput($code){
    ob_start();
    eval($code);
    $output = ob_get_clean();
    return $output;
}

こんな感じで同じファイル内に関数として置いて、関数を呼び出すというような実装をしていました。

だめだったこと

単純にtry catchで囲えばいいかなと思って、関数を呼び出しているところを以下のように囲んでみました。

try {
    self::codeExecutionOutput($code);
} catch (Exception $e) {}

これだけではcatchに入っていくれないで500エラーになってしまいました。

結論

コードチェック用の別のコンテナを立てて、そちらのAPIを叩くことで対応しました。

もしevalでエラーになってしまっても、フロント側に返すレスポンスはAPIサーバ側で操作できます。

ついでに別コンテナになったことでセキュリティ面も向上した?のでよかったかなと思います。

おわりに

この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。

最後まで読んでいただきありがとうございました!

2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0