PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP "system"-> .bat Datei anwerfen



ikemi
25.10.2006, 22:21
Hallo,

ich versuche über eine PHP Seite, eine .bat Datei auf einem Server anzuwerfen. Nach Tagelangen "googlen" habe ich es auch geschafft, aber leider ist die Lösung sehr, sehr unschön...
(Von PHP habe ich leider nicht viel Plan...)

Zuerst wollte ich das unter Samba und Linux realisieren (Thread gab es unter SAMBA) ist aber aus IT Richtlinien in unserem Unternehmen, leider nicht möglich.

Ich möchte eine Seite erstellen, über die ich Druckjobs absenden kann. Ich habe immer wieder spezielle Drucker zu konfigurieren und benötige dadurch immer wieder Testdrucke. In der nähe der Drucker stehen lediglich Clients die keine Remote Verbindungen, Commandlines etc. zu z.b Terminalservern o.ä zulassen. Das heißt, das wenn ich so einen Testdruck benötige, muss ich zu mir ins Büro gehen, einen Job absenden und wieder zu dem Drucker. Das kann leicht in einen Marathon enden, denn die Drucker stehen teilweise hunderte Meter weit weg...

Übrigens: Bei den Testdrucken handelt es sich um speziell konvertierte .txt Files- also die Möglichkeit "Windows Testseite" ausdrucken, ist nicht ;-)

Ich möchte nun über einen Button "Druckername" diese File anwerfen, was ich nicht auf die reihe bringe, denn wenn ich den PHP Code in die Website selbst schreibe, wirft er beim Seitenladen, das .bat an, was bei ca. 30 Druckern recht Dumm ist.


<td><form action="carina.php" method="post" name="carina" target="_blank" id="carina">
<input type="submit" name="Submit" value="Abschicken">
</form></td>

Jetzt mache ich es über den oben genannten Link, der eine weiterer Website (carina.php) aufruft:


<?php
system ("C:\\pickerl\\carina\\carina.bat");
?>

In der .bat steht:

copy c:\pickerl\carina\carina.txt \\printserver\carina

Ist es möglich:

die Webseite so zu gestalten, das ich keine weitere Seite aufmachen muss, sondern es reicht, das ich den Button "Druckername" klicke?

Vielleicht auch noch ein Feedback bekomme alá "Druckjob wurde an Drucker gesendet" einbauen kann?

lg, Ikemi

theton
26.10.2006, 00:00
Irgendwie habe ich das Gefühl, dass du die Rubrik hier etwas missverstanden hast.


Unixboard.de > Programmieren unter Linux/Unix > Ruby, php, Perl, Python ...

Aber wir wollen mal nicht so sein: Theoretisch ist das Möglich, indem du deine bat-Datei so schreibst, dass sie einen richtigen Return-Wert zurückgibt (falls das bei Windows geht, bei Shell-Scripten im Linux/Unix wäre es halt ein 'exit <Nummer>' und du dann '$ret = exec("/ich/habs/nicht/so/mit/windows/pfaden")' nutzt. Dann kannst du nach diesem exec() aufgrund der Rückgabe des Skripts herausfinden, ob alles korrekt gelaufen ist. Dazu müsstest du natürlich die bat-Datei so schreiben, dass sie die Fehler von 'copy' abfängt und entsprechende Rückgaben liefert. Weiss allerdings nicht, inwiefern Win-Batchdateien dazu in der Lage sind, aber M$ hat da bestimmt irgendwo 'ne Referenz für.

ikemi
26.10.2006, 00:08
[...]


Unixboard.de > Programmieren unter Linux/Unix [...]

Ups, ja! Diese "Kleinigkeit" habe ich übersehen.

THX!

madhatter
29.10.2006, 19:39
Aber wir wollen mal nicht so sein: Theoretisch ist das Möglich, indem du deine bat-Datei so schreibst, dass sie einen richtigen Return-Wert zurückgibt

So, wie ich das verstanden hatte, will er keinen Feedback von der
Batch-Datei sondern vom PHP Skript.
Also wenn ich alles richtig verstanden hab:
Du musst, wenn du den Code auf der gleichen Seite auf der
auch dein Button ist hast, überprüfen ob die Seite durch den
Button aufgerufen wurde oder nicht.
Das kannst du z.B. so tun


if ($_POST['Submit'])
{
system ("C:\\pickerl\\carina\\carina.bat");
// Und so geht das Feedback:
echo "Druckjob wurde an Drucker gesendet";
}

ikemi
03.11.2006, 02:53
So, wie ich das verstanden hatte, will er keinen Feedback von der
Batch-Datei sondern vom PHP Skript.

Ja, genau! Vielen Dank für deine Antwort. Ich wollte nur den OT Thread nicht weiter in die länge ziehen ;-)

theton
03.11.2006, 02:59
Der Weg über system() hat halt den Nachteil, dass du nicht heraus bekommst, ob der Druckjob wirklich korrekt gesendet wurde. Also wird deine Seite auch wenn der Druckjob nicht gesendet wurde, "Druckjob wurde an Drucker gesendet" ausgeben. Halte ich persönlich für eine ziemlich unsinnige Lösung.

ikemi
03.11.2006, 03:49
Der Weg über system() hat halt den Nachteil, dass du nicht heraus bekommst, ob der Druckjob wirklich korrekt gesendet wurde.
Bei uns in der Produktion steht in 90% der fälle einer dieser Drucker neben einem Client, von dem ich aus das Script starten kann und sehe dann ob es funktioniert. Sicherlich ist es keine genaue Lösung, aber eine kleine Arbeitserleichterung für mich.

Hatte gerade so einen Einsatz...

Als Ausgabe bekomme ich ohne zutun:

C:\Programme\xampp\htdocs>copy c:\pickerl\carina\carina.txt \\z2ksv068\carina 1 Datei(en)

Obs dann wirklich zum Drucker kommt nachzuvollziehen, wäre ein Programmiertechnischer Overkill, denn bei uns läuft gerade bei diesen Druckern so viel Mist im Hintergrund von diversen Printjobs, Konvertierungen, Datenbankabfragen etc. das wenn mal gar nichts rauskommt, man schon eine weile mit der Verfolgung eines Jobs verbringen kann.

lg, Ikemi