[Allegro] Unicode (von Fwd: Re: .dat files)
Bernhard Eversberg
ev at biblio.tu-bs.de
Fr Apr 13 10:12:09 CEST 2012
Am 13.04.2012 08:55, schrieb Anando Eger:
> ====================================================================
>> a30 kann via avanti Programme auf dem Server starten,
> ====================================================================
>> das lönnte auch ein Indexierskript sein, die Arbeit macht
>> dann aber index(.exe) und qrix(.exe)
>
> Seit wann das? Mit welchem Befehl?
>
Sorry, "via avanti" war ganz falsch ausgedrückt, avanti wird
vielmehr gar nicht gebraucht. Gemeint war "via php".
Es ist eigentlich nicht grundsätzlich schiwerig:
Zur Erläuterung:
In den Skripten av_ini.php und a30_ini.php gibt es die
Funktion sendjob().
Diese übergibt einen Job (oder den Namen einer Jobdatei) an avanti,
avanti startet dann acon und reicht ihm den Job weiter, acon
produziert einen Output über seinen stdout-Kanal und avanti nimmt
den entgegen und reicht weiter an den Nutzer.
Wenn nun statt acon ein anderes Programm, etwa eine .bat-Datei
oder ein Shell-Skript gestartet würde? Dann würde dieses seine
Arbeit tun und avanti in gleicher Weise den stdout-Output
entgegennehmen.
Es darf natürlich nicht, in Kenntnis dieser Zusammenhänge, jeder
von außen einfach jedes Programm auf dem Server starten können. Deshalb
kann man nicht per Jobaufruf durch acon ein Programm starten lassen.
(Mit a99 und FLEX geht das ganz einfach, mit Befehl Dos oder dos.)
Und so wird's gemacht:
Es geht, indem man in ein PHP-Skript nicht av_ini.php oder a30_ini.php
einbindet, sondern ein anderes, in dem statt sendjob() dann mit dem
PHP-Befehl popen(progname,modus) das gewünschte Programm gestartet wird.
"progname" kann dann sein und tun, was immer es soll, also kann
es auch ein Indexierskript sein. (Es kann auch ein Shellscript sein,
das seinerseits acon aufruft und einen Job ausführen läßt.)
avanti wird in keinem Fall bemüht. Wozu wird es dann eigentlich
überhaupt gebraucht, beginnen Sie sich zu fragen? Nun, weil avanti und
acon und die Datenbanken auf einem anderen Rechner liegen können und
der Webserver über Socket mit avanti kommuniziert; im av_ini.php steht
ja seine Adresse. Voraussetzung für popen() ist, daß die Datenbank
auf demselben Rechner liegt wie der Webserver, oder daß man die
Verbindung zum anderen Server dann auf eigene Weise im aufgerufenen
Programm arrangiert.
Damit's klappt, müssen vermutlich geeignete Berechtigungen vorliegen
für den User, der den Webserver gestartet hat.
Weil Außenstehende auf den Server kein eigenes PHP-Skript einschleusen
können, ist das eine sichere Methode. Sonst dürfte PHP so einen Befehl
gar nicht haben.
B.E.
Mehr Informationen über die Mailingliste Allegro