2016-05-08 5 views
0

Ich schreibe ein CGI-Skript in SHELL, die Informationen aus dem QUERY_STRING liest und dann erstellt eine .student-Datei mit dieser Information (ID, Name usw.). Wenn ich versuche, diese Datei zu erstellen und/oder anzuhängen, kann ich sie nicht erstellen oder in mein Datenbankverzeichnis verschieben. Es funktioniert einwandfrei, um die Datei im cgi-bin-Verzeichnis zu erstellen, in dem ich arbeite, aber wenn ich versuche, es zu mv, funktioniert es nicht.CGI-Skript nicht in der Lage zu erstellen und eine Datei an bestimmte Verzeichnis anfügen

Sowohl das cgi-bin-Verzeichnis und die Datenbank-Verzeichnis über Berechtigungen von 0777.

Hier ist der Code, den ich arbeiten will:

echo "Student_ID=${Student_ID}" >> ~/public_html/database/${Student_ID}.student 

Was ich hier fehlt?

+0

Was ist die Berechtigung für diese bestimmte Datei? – Jahid

+0

Ich habe versucht, diese Datei 0777 zu geben, wenn ich sie lokal erstelle, und dann mv benutze, um zu versuchen, sie in das Datenbankverzeichnis zu verschieben. Kein Glück aber. –

+1

Was SO und Version? SELinux aktiviert? –

Antwort

0

Stellen Sie sicher, dass das Verzeichnis vorhanden ist und der Benutzer über ausreichende Berechtigungen verfügt. Überprüfen Sie den Prozessausgangsstatus ($? Variable). Protokollieren Sie die Fehler an einem zuverlässig beschreibbaren Ort.

dir="$HOME/public_html/database/" 
db_file="${dir}/${Student_ID}.student" 
error_log=/tmp/cgi-error.log 

# If $dir doesn't exist 
if [ ! -e "$dir" ]; then 
    # Create $dir path 
    mkdir -p $dir 
    if [ $? -gt 0 ]; then 
    echo "Failed to mkdir $dir" >>"$error_log" 
    exit 1 
    fi 

    chmod +wx $(dirname $dir) $dir 
    if [ $? -gt 0 ]; then 
    echo "Failed to set permissions for $dir" >>"$error_log" 
    exit 1 
    fi 
fi 

if [ ! -w "$db_file" ]; then 
    echo "$db_file is not writable!" >>"$error_log" 
    exit 1 
fi 

echo "Student_ID=${Student_ID}" 2>>"$error_log" >> "${db_file}" 
if [ $? -gt 0 ]; then 
    echo "Failed to log $Student_ID to $db_file" >>"$error_log" 
    exit 1 
fi 

Vermeiden Sie auch 0777 Berechtigungen. Zumindest brauchen Sie keine w Berechtigungen für "andere", es sei denn, es handelt sich um ein /tmp-ähnliches Verzeichnis, in dem sticky bit eingestellt ist: 1777.

Verwandte Themen