Bazı eski sunucuları yükseltmekle görevlendirildim (ubuntu 9 -> ubuntu 14). Eski sunucuda, biz çıktı dosyası içeriği için bu biçimi kullanan bazı C komut dosyaları var:Apache web sayfasında gösterilmek üzere sistemden ('cat') çıktı nasıl alınır?
#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");
}
Şimdi, bir cgi komut dosyası içine bu derlemek ve bizim eski sunucuda web çalıştırmak eğer, görüyorum/yol/to/dosya içeriği. Ancak daha yeni bir apache sunucusunda, bana kedi çıktısını göstermiyor. Komut satırında çalıştığını ve komutun aslında web'den çalıştığını biliyorum çünkü kedi çıktısını yeniden yönlendirmek için "> log" kullanabiliyorum. Bu sistem kedi çıktılarının apache ile çalışmasını sağlamak için neler yapabileceğimi bilen var mı?
DÜZENLEME: Öyle görünüyor ki, perl ile çok benzer bir şekilde yapabilirim ve aradığım şeyi alırım, bu yüzden C'ye özgü bir sorun olduğunu ve apache olmadığını düşünürdüm.
#!/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";
DÜZENLEME 2: Ben dosyası okunurken alternatif bir yöntem kullanan olmadan beklendiği gibi orijinal kod işe gitmek için bir yolunu
İşte beklediğiniz yapar bir perl senaryo. Metin dosyalarının içeriğini nasıl okuyacağımı değil, bu betiği yapmak için ne yapmam gerektiğini ve bunun gibi başkalarını da işe yaramadı. Fflush ekleyerek yukarıdaki kodun beklendiği gibi çalıştığını anladım. Sorgum muğlaksa üzgünüm, başka bir zamanda başkaları tarafından ele alınacak bir sorun için hızlı bir çözüm bulmaya çalışıyordum. system() man page itibaren
#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");
}
Neden sadece "system" yerine "fopen" etc kullanılmıyor? –
@EdHeal, daha iyi bir yol bulmak için bu senaryoları veya anlamı yazan kişi değilim. Diyelim ki, bu sözdizimini başka bir sunucuda kullanmakta olan epeyce betik var, ve biz de pek çok düzinelerce dosyayı bulmak ve yeniden yazmak istemiyoruz. – archlyfe
Apache konfigürasyon dosyası, çalıştırılabilir dosya türlerinin listesini içerir: .php .cgi vb. Ya yapılandırma dosyanızı düzenleyin veya cgi komut dosyalarınızdaki dosya uzantısını değiştirin. –