PHP-Script funktioniert nur teilweise

RobotSox

New Member
Hey@all.

Ich habe folgendes Problem. Ich habe ein PHP Script welches in eine Datenbank was schreiben soll und dann einen ordner sowie eine Datei erstellen soll und die Datei dann mit etwas füllen. Das Problem ist, es sagt immer: "Dateisystemfehler".

Das Verzeichniss hat alle Rechte, es wird auch der Ordner erstellt. Die Datei wird auch angelegt, doch irgendwie sagt er immer Fehler. Die Einträge in der Datenbank sind NICHT vorhanden.

Hier mal das Script:

PHP:
if($port1 != "") {
					$request=@mysql_query("select * from `server` where (`port`) = '$port1'");
					$result=@mysql_fetch_array($request);
					$port_check=$result["port"];
					if($port_check == $port1) {
						print "<p align=\"center\"><b>$port1</b> kann nicht genutzt werden da er bereits verwendet wird</p>";
					} else {
						@system("mkdir /var/shoutcast/$port1");
						@system("cp /var/shoutcast/original/sc_serv /var/shoutcast/$port1/$port1" . '.sc_serv');
						$content="/var/shoutcast/$port1/$port1" . '.sc_serv' . " /var/shoutcast/$port1/sc_serv.conf >> /dev/null &";
						$file=fopen("/var/shoutcast/$port1/$port1" . '.sh', "w");
						$write=fwrite($file, $content);
						fclose($file);
						if($write) {
							system("chmod 777 /var/shoutcast/$port1/$port1" . '.sh');
							$request=@mysql_query("select * from `server`");
							$counter="0";
							while($result=@mysql_fetch_array($request)) {
								$id=$result["id"];
								if($id==$counter) {
									$counter++;
								}
							}
							$insert=@mysql_query("insert into `server` (`id`,`port`,`use`,`title`,`closed`,`username`,`password`,`spassword`,`apassword`,`listener`,`online`) values ('$counter','$port1','0','','0','','','','','','0')");
							if($insert) {
								print "<p align=\"center\">Der Server mit dem Port <b>$port1</b> wurde angelegt</p>";
							} else {
								print "<p align=\"center\">Datenbankfehler. Der Server mit dem Port <b>$port1</b> konnte nicht angelegt werden</p>";
							}
						} else {
							print "<p align=\"center\">Dateisystemfehler. Der Server mit dem Port <b>$port1</b> konnte nicht angelegt werden</p>";
						}
					}
				}

Weis jemand woran das liegen könnte?

Gruß Tim
 
An den @-Zeichen. Also die sind nicht Schuld daran, verhindern aber dass du die Fehlermeldungen siehst.
Nimm einfach die @-Zeichen vor mysql_query(), system() und den ganzen anderen Befehlen wo die vorstehen raus und schau mal, was dann für Fehlermeldungen angezeigt werden.
 
Wenn du unbedingt Fehlerabfangen musst, benutze doch try und catch anstatt die Fehler mit @ zu ignorieren.

Warum du Verzeichnisse nicht mit mkdir erzeugst, Dateirechte mit chmod änderst, Dateien mit copy kopierst ist mir ein Rätsel.
Warum braucht du system?
PHP kann auch was.
 
Folgender Lösungsvorschlag.

Bevor du kopierst:

PHP:
@system("cp /var/shoutcast/original/sc_serv /var/shoutcast/$port1/$port1" . '.sc_serv');
Füg ein
PHP:
if(is_dir("/var/shoutcast/original/sc_serv /var/shoutcast/$port1"))
return false;
Damit umgehst du, das du in ein nicht existierendes Verzeichnis kopierst.
Damit kannst du dir die ersten zwei @ sparen.
Das sollte eigentlich dein Problem lösen.
alternativ kannst du natürlich auch eine Fehlermeldung einbauen und mit einem die den Ablauf des Prozesses stoppen.
 
Back
Top