PHP-Code is_readable

Status
Für weitere Antworten geschlossen.

atarifreak

Benutzer
Mitglied seit
01. Apr 2009
Beiträge
262
Punkte für Reaktionen
0
Punkte
22
Hallo liebes Forum,

ich sitzte gerade daran letoDMS auf der DS einzurichten. Das funktioniert auch recht gut, nur möchte ich den Import aus einer lokalen Datei ermöglichen. Auf meinem Testrechner mit Ubuntu geht das auch. Auf der Diskstation nicht.
leider bin ich nicht der Experte in PHP, so dass ich momentan total am Verzweifeln bin.

So sieht es aus:
Auf der DS gibt es unter /volume1/web/letodms/letoDMS/utils das Shellscript letoDMS-adddoc und die dort aufgerufene adddoc.php
Zusätzlich sind alle benötigten include-Dateien an den gewünschten Orten.
Dort habe ich nun eine einfache datei.txt angelegt, die von dem PHP-Skript geöffnet werden soll. Genau da komm ich aber nicht weiter.
Um zu kapieren, was wann wo eingestellt wird, habe ich dem Originalskript (zu finden hier ) einige echo ... hinzugefügt. Das sieht ja auch alles super aus, nur kommt die funktion is_readable immer zum Ergebnis, dass das nicht so ist :-(

Mein Skript im Anhang(ne, geht nicht hochladen...). Es reicht aber auch das original Skript zum Vergleich. Dort ist es Zeile 139 ff

Der entsprechende Teil meines Skriptes sieht jetzt so aus:
PHP:
echo "\n";
echo $filename;
echo "\n";
if (is_readable($filename)) {
	echo "\n is_readable erfolgreich. Filename = ";
	echo $filename;
	echo "\n";
	if(filesize($filename)) {
		$finfo = new finfo(FILEINFO_MIME);
		echo "\n Dateigroesse: ";
		echo $filesize;
		if(!$filetype) {
			echo "\n Filetype: ";
			echo $filetype;
			$filetype = $finfo->file($filename);
		}
	} else {
		echo "File has zero size\n";
		exit(1);
		
	}
} else {
	echo "Datei ist nicht lesbar \n";
	echo "Und nochmal filename = ";
	echo $filename;
	exit(1);
}
Aufgerufen wird das php-skript über ein shell Skript (letodms-adddoc) mit folgendem Inhalt:

Rich (BBCode):
1 	#!/bin/sh
2 	/usr/bin/php -f /volume1/web/letodms/letoDMS/utils/adddoc.php -- $*

auf der Konsole (ja ich bin root :)
Rich (BBCode):
/volume1/web/letodms/letoDMS/utils # sh letodms-adddoc -F 1 -f ./datei.txt 
Cache Loeschen 
Folderid= 1

 Ubergabe der Option filename ./datei.txt

./datei.txt
Datei ist nicht lesbar 
/volume1/web/letodms/letoDMS/utils #

Sie man sieht, werden die Zeilen:
PHP:
echo "Und nochmal filename = ";
    echo $filename;
garnicht ausgegeben... Warum???

Ein zum Testen der Funktion erstelltes Skript test.php
PHP:
<?php
$filename = 'datei.tx';
if (is_readable($filename)) {
	echo "Die Datei ist lesbar \n";
	echo "Filename = ";
	echo $filename;
	echo "\n";
} else {
	echo "Die Datei ist nicht lesbar \n";
	echo "Filename = ";
	echo $filename;
	echo "\n";
}
?>
funktioniert wie erwartet.

Das 1. Skript (also das, wo irgendwie ein Fehler drin ist) kommt immer zu dem Ergebnis, dass die Datei nicht lesbar ist. Egal ob ich mit /volume1/web/... oder /var/service/web/... oder eben mit ./ oder ohne die datei.txt angebe.
Wie gesagt auf meinem Ubuntu-Laptop läuft das ganze wie gewünscht durch. Ich muss nur sudo voran stellen.
So ein sehr langer Text und danke fürs durchlesen!
jemand eine Idee? Die Entwickler von letoDMS sind da leider überfordert, da sie keine DS haben.
Achso: ich habe auf der DS111 wieder die stable-Firmware drauf und php --version sagt:
Rich (BBCode):
php --version
PHP 5.3.6 (cli) (built: Nov 26 2011 15:20:01) 
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
also kein ipkg oder so installiert.
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Du hast bei dem Shell-Skript aber schon einen Editor verwendet, der auch die Linux-Zeilenenden benutzt??? Sonst wird das nämlich nichts :)

Itari

Irgendwo fehlt ein 't' beim Dateinamen 'datei.txt'
 

atarifreak

Benutzer
Mitglied seit
01. Apr 2009
Beiträge
262
Punkte für Reaktionen
0
Punkte
22
naja also bei meinem Skript schon. Das addoc.php hat auf der Konsole des DS im vi so ^M am Ende. Alle löschen?
kann es daran liegen?
Moment, das Shellskript muss ich noch mal überprüfen. Danke dafür.
Und warum funktioniert es dann mit diesen Umbrüchen unter ubuntu?

Update: DANKE. in dem letodms-adddoc - Shell-Skript waren auch die blöden Zeilenumbrüche drin... jetzt läuft zumindest das weiter. Darf ich aber noch Fragen warum? Weil die Option wurde ja übernommen und auch in die Variable eingetragen?!?

Update 2 zum fehlenden t: das war nur der Versuh um zur else anweisung zu kommen. Also natürlich mit t die 1. Ausgabe und sonst eben die 2. :)
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Und warum funktioniert es dann mit diesen Umbrüchen unter ubuntu?

dir ist schon klar, dass es verschiedene Shells gibt und sie alle auch parallel auf einem Linux-System eingesetzt werden können (ksh, bash, csh usw.). Eine wird meist als 'Standard'-Shell verlinkt (/bin/sh), aber das kann von System zu System eine andere sein. Manche dieser Shell mögen nur die Linux-Zeilenumbrüche, andere sind da generöser. Auf der DiskStation wird als Standard-Shell die /bin/ash (die ist in der BusyBox enthalten) verwendet und die ist halt ein wenig empfindlich, was falsche Zeilenenden angeht.

Die inhaltliche Seite deiner Skripte hab ich jetzt nicht angeschaut, weil ich kaum den Kommandozeilen-PHP nutze und deswegen da jetzt auch nicht der Experte bin ...

Itari
 

atarifreak

Benutzer
Mitglied seit
01. Apr 2009
Beiträge
262
Punkte für Reaktionen
0
Punkte
22
klar mit den verschiedenen Shells. Dass die ash zu denen gehört ist mir neu. Aber super, so lernt man dazu. Danke nochmal für diese schnelle und irgendwie einfache Lösung :)
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat