私はいくつかの古いサーバ(ubuntu 9 - > ubuntu 14)をアップグレードすることを任されています。私はCGIスクリプトにこれをコンパイルして、私たちの古いサーバ上でウェブからそれを実行した場合、私が見る、今システム( 'cat')の出力をApache Webページに表示する方法は?
#include "stdio.h"
#include <strings.h>
#include "stdlib.h"
main(argc, argv)
int argc;
int argv;
{
printf("content-type: text/plain\n\n");
printf("Normal Output...\n");
system("cat /path/to/file");
printf("Done...\n");
}
:私たちの古いサーバーでは、我々は、出力ファイルの内容には、このフォーマットを使用する一部のCスクリプトを持っています/ path/to /ファイルの内容。しかし、より新しいApacheサーバーでは、cat出力を表示しません。私はそれがコマンドラインで実行されていることを示していることを知っています。私はcat出力をリダイレクトするために "> log"を使うことができるので、コマンドは実際にWebから実行されます。誰も私がこれらのシステムのcat出力をApacheで動作させるために何ができるかを知っていますか?
EDIT: 私は非常に似たような方法でそれを行うことができ、私が探しているものを得ることができるので、それはC固有の問題であり、Apacheではないと思います。
#!/usr/bin/perl
use strict;
use warnings;
print "Content-type: text/plain\n\n";
print "Normal Output...\n";
system("cat /path/to/file");
print "Done...\n";
EDIT 2:私は、ファイルを読み取る別の方法を利用せず、予想通り、元のコードが動作するように取得する方法を考え出し
ここで私は期待して何んperlスクリプトです。私はテキストファイルの内容を読む方法を探していませんでしたが、このスクリプトを作成するためには何をしなければならないか、そしてそれを好きな人は動作します。 fflushを追加すると、上記のコードが期待どおりに動作することがわかりました。申し訳ありませんが、私の質問があいまいだった場合、別の時間に他の人が処理する問題のための迅速な解決策を探していました。 system() man pageから
#include "stdio.h"
#include <strings.h>
#include "stdlib.h"
main(argc, argv)
int argc;
int argv;
{
printf("content-type: text/plain\n\n");
fflush(stdout);
printf("Normal Output...\n");
system("cat /path/to/file");
printf("Done...\n");
}
なぜ、 'system'の代わりに' fopen'などを使用しないのですか? –
@EdHeal、私はこれらのスクリプトを書いているのではなく、よりよい方法を見つける意味があります。私はすでに他のサーバーでこの構文を使用しているかなりの数のスクリプトを用意しており、数十のスクリプトを探して書き直したくないと言っています。 – archlyfe
Apache設定ファイルには、実行可能なファイルタイプのリスト(.php .cgiなど)があります。設定ファイルを編集するか、cgiスクリプトのファイル拡張子を変更してください。 –