Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 27

Thema: automatische code einfügung in jede Datei

  1. #1
    Registrierter Benutzer
    Registriert seit
    09.12.2001
    Beiträge
    171

    automatische code einfügung in jede Datei

    Hi @ all scripter

    Ich habe ein Problem:
    Ich möchte, das ein bestimmter code (ist ein html code) in jede hochgeladene Seite upgeloadet wird!
    Also, ein User läd etwas per ftp hoch und wenige sekunden danach, sollte ein code in diese Datei hinzugefügt werden.
    Wie würde soetwas aussehen? Könntet ihr mir helfen, soetwas zu schreiben?

    MfG
    Stormsam

  2. #2
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    an welche position?

    am ende geht das mit 'cat hinzufueg.txt >> ziel.txt'
    am anfang wird's etwas komplizierter, aber wenn man obiges beispiel mit einer temporären datei erweitert, dann klappt das auch ...
    Bodo
    Systemadmistration UNIX

  3. #3
    Registrierter Benutzer
    Registriert seit
    09.12.2001
    Beiträge
    171
    Hi!

    Position ist eigentlich egal, unten soll mir recht sein
    Allerdings is dein code nicht automatisch, das nenne ich manuell

    Es soll ein code automatisch eingefügt werden, nachdem ein user eine datei hochgeladen hat!

    Wie funktioniert soetwas?

    MfG
    Stomsam

  4. #4
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Man läst solche Geschichten ein CGI-Skript machen

    cat hinzufueg.txt >> ziel.txt

  5. #5
    Registrierter Benutzer
    Registriert seit
    09.12.2001
    Beiträge
    171
    könntet ihr mir helfen so einen cgi script zu schreiben?

  6. #6
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Was hast du den auf deinem Server zur Vefügung? Darfst du Perl-Skripte auführen? Hast du PHP?

  7. #7
    Registrierter Benutzer
    Registriert seit
    09.12.2001
    Beiträge
    171
    cgi, php, mysql, perl

    allerdings gibt es manchmal mit perl ein paar Probleme, den fehler habe ich noch nicht entdeckt.
    Am besten wäre ein php script

  8. #8
    Registrierter Benutzer
    Registriert seit
    09.12.2001
    Beiträge
    171
    Hi@all!
    Ich würde mich freuen, wenn ihr mir weiterhelfen würdet!
    Weil ich überhaupt keine Ahnung habe, wie ich ein CGI Script oder auch PHP Script schreiben soll, der
    autmatisch erkennen soll, das es eine neue Datei auf der Festplatte gibt und der dann auch noch
    meinen html code mit einbaut !
    Irgendwie muss es aber gehen
    Gibt es vielleicht ein Tool, das mir dabei hilft?
    Oder kennt sich hier jemand gut mit solchen Sachen aus und Hilf mir so einen Script auf die Beine zu stellen

    Schreibt bitte zurück!
    MfG
    Stormsam

  9. #9
    Registrierter Benutzer
    Registriert seit
    10.04.2001
    Ort
    Bremen
    Beiträge
    339
    FAM könnte dir weiterhelfen. FAM ist ein Daemon, der einem Programm mitteilen kann, wenn sich eine Datei oder ein Verzeichnis geändert haben.
    Code:
    FAM, the File Alteration Monitor, provides an API which applications can use to be notified 
    when specific files or directories are changed. It comes in two parts: fam, the daemon 
    which listens for requests and delivers notification, and libfam, a library which client 
    applications can use to communicate with fam.
    Ob es PHP bzw. Perl-Bindings für die libfam gibt, weiß ich nicht.

    FAM gibt es hier: http://oss.sgi.com/projects/fam/

    c ya,
    Tobias

  10. #10
    Registrierter Benutzer
    Registriert seit
    09.12.2001
    Beiträge
    171
    HI!
    hmm.. könnte das klappen?
    Ich habe eine *.sh Datei, wo der befehl zum code einfügen drinnen ist.
    Nun müßte Fam nur noch dem Schell Script sagen, wo er das anwenden soll.
    Ich habe mit fam runtergeladen, entpackt und ./configure ; make ; make install ausgeführt.
    Doch wie startet man jetzt das Programm bzw. configruiert es so um, das er dem Shell schript sagt, das er ausgeführt werden soll.

    Bitte schreibt zurück!
    MfG
    Stormsam

  11. #11
    Registrierter Benutzer
    Registriert seit
    10.04.2001
    Ort
    Bremen
    Beiträge
    339
    Ich denke nicht, dass man FAM mit Bash benutzen kann. Ich werde mich jetzt mal für eine 1/2 Stunde hinsetzten und gucken, ob ich so ein Programm mit FAM hinbekomme.

    c ya,
    Tobias

  12. #12
    Registrierter Benutzer
    Registriert seit
    10.04.2001
    Ort
    Bremen
    Beiträge
    339
    So, damit dürfte es gehen.
    [code]
    /*
    * monitor.c -- monitor arbitrary file or directory
    * using fam
    */

    /*
    * Modified by Tobias Kortkamp
    *
    *
    */



    #include <fam.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/stat.h>
    #include <sys/select.h>

    /* event_name() - return printable name of fam event code */

    const char *event_name(int code)
    {
    static const char *famevent[] =
    {
    "",
    "FAMChanged",
    "FAMDeleted",
    "FAMStartExecuting",
    "FAMStopExecuting",
    "FAMCreated",
    "FAMMoved",
    "FAMAcknowledge",
    "FAMExists",
    "FAMEndExist"
    };

    return famevent
    Code:
    ;
    }
    
    void checkEvent(int code, const char *filename)
    {
    	static const char *aCode =
    		"<!-- HTML code hier"
    		" ldkjfglkdjgldkjg"
    		" jgldkgjldk "
    		" -->";
    	if(code == FAMCreated)
    	{
    		FILE *file = fopen(filename, "a");
    		if(file == NULL)
    		{
    			fprintf(stderr, "Couldn't open file: %s", filename);
    			return;
    		}
    		fwrite(aCode, 1, strlen(aCode), file);
    		fclose(file);
    	}
    }
    
    void main(int argc, char *argv[])
    {
    	int i, nmon, rc, fam_fd;
    	FAMConnection fc;
    	FAMRequest *frp;
    	struct stat status;
    	FAMEvent fe;
    	fd_set readfds;
     
    	frp = malloc(argc * sizeof *frp);
    	if (!frp)
    	{
    	        perror("malloc");
    	        exit(1);
    	}
     
    	/* Open fam connection */
     
    	if ((FAMOpen(&fc)) < 0) 
    	{
    		perror("fam");
    		exit(1);
    	}
     
    	/* Request monitoring for each program argument */
    	for(nmon = 0, i = 1; i < argc; i++)
    	{
            	if (stat(argv[i], &status) < 0)
    		{
    			perror(argv[i]);
    			status.st_mode = 0;
    		}
    		if((status.st_mode & S_IFMT) == S_IFDIR)
    			rc = FAMMonitorDirectory(&fc, argv[i], frp + i, NULL);
    		else
    			rc = FAMMonitorFile(&fc, argv[i], frp + i, NULL);
    		if(rc < 0)
    		{
    			perror("FAMMonitor failed");
    			continue;
    		}
    		nmon++;
    	}
    	if(!nmon)
    	{
    		fprintf(stderr, "Nothing monitored.\n");
    		exit(1);
    	}
     
    	/* Initialize select data structure */
     
    	fam_fd = FAMCONNECTION_GETFD(&fc);
    	FD_ZERO(&readfds);
    	FD_SET(fam_fd, &readfds);
     
    	/* Loop forever. */
     
    	while(1)
    	{
            	if(select(fam_fd + 1, &readfds, NULL, NULL, NULL) < 0)
    		{
    			perror("select failed");
    			exit(1);
    		}
    		if(FD_ISSET(fam_fd, &readfds))
    		{
    			if(FAMNextEvent(&fc, &fe) < 0)
    			{
    				perror("FAMNextEvent");
    				exit(1);
    			}
    			checkEvent(fe.code, fe.filename);
    		}
    	}
    }
    Kompilieren mit gcc -o monitor monitor.c -lfam
    Ausführen mit ./monitor <name-des-zu-überwachenden-verzeichnisses>

    c ya,
    Tobias
    Geändert von tkortkamp (17-09-2002 um 17:00 Uhr)

  13. #13
    Registrierter Benutzer
    Registriert seit
    09.12.2001
    Beiträge
    171
    Hi!
    danke, das du dir so viel mühe gemacht hast und dich 30 minuten dafür hingesetzt hast
    Allerdings habe ich n kleines Problem. Wo soll der code hin ?!? Eine Datei Namens "monitor.c" gibt es nicht. Wenn ich selber so eine Datei erstelle und alles so mache, wie du es beschrieben hast, kriege ich eine Fehlermeldung das ich keine rechte habe, nachdem ich ./monitor <name-des-zu-überwachenden-verzeichnisses> eingeben habe!

    Bitte schreibe nur noch kurz, wohin der code gehört
    MfG
    Stormsam

  14. #14
    Registrierter Benutzer
    Registriert seit
    10.04.2001
    Ort
    Bremen
    Beiträge
    339
    Also:

    1. Du kopierst meinen Code in eine Datei, die du monitor.c nennst.
    2. Du änderst:
    Code:
    static const char *aCode =
    		"<!-- HTML code hier"
    		" ldkjfglkdjgldkjg"
    		" jgldkgjldk "
    		" -->";
    in deinen gewünschten HTML code um, wobei zu beachten ist, dass wenn du in deinem Code ein " hast, du es so schreibst: \"
    3. Du kompilierst den Code mit: gcc -o monitor monitor.c -lfam in dem Verzeichnis, wo du monitor.c abgespeichert hast.
    3. Du kopierst die resultierende Datei monitor nach /usr/bin/
    4. Danach startest du das Programm mit z.B: monitor /home/ftp/h
    (wobei /home/ftp/h das Heimatverzeichnis von dem User sein muss, bei dem du den Code einfügen willst)

    Zum kompilieren brauchst du die Devel-Pakete zu libfam

    Btw, ich denke mein Programm wird dir noch Probleme bereiten, weil es an jede Datei, die in dem zu überwachenden Verzeichnis (z.B. /home/ftp/h) liegt, den HTML-Code anhängt.

    Das müsstest du ggf. noch verbessern. (Vorrausgesetzt du kannst C )

    c ya,
    Tobias
    Geändert von tkortkamp (17-09-2002 um 20:09 Uhr)

  15. #15
    Registrierter Benutzer
    Registriert seit
    09.12.2001
    Beiträge
    171
    Hi!
    Wenn ich :

    gcc -o monitor /usr/bin/monitor.c -lfam

    eingebe, kommt dieser Fehler:

    linux:~ # gcc -o monitor /usr/bin/monitor.c -lfam
    /usr/bin/monitor.c: In function `main':
    /usr/bin/monitor.c:62: warning: return type of `main' is not `int'

    Was habe ich falsch gemacht ?!?
    Bitte schreibe wieda zurück
    MfG
    stormsam

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •