Probleme bei Speichern von Inhalten

Javamoto

Mitglied
Ich habe eine Quizz und möchte dann die Quizzergebnisse online speichern.

http://www.cslfotoart.de/000/experiment.htm

Alles up-loadet, leider kommt am Ende immer die Fehlermeldung: "can't open file"

Ergebniss von jeder von der Quizze wird in einer Datei gespeichert, hier Bsp. von den ersten Quizz.

Irgendwie komme ich nicht dahinter wo der Fehler liegt. Ist es der code oder irgendwas in der save.php stimmt nicht??


Habe bereits allen *.txt Dateien und den Verzeichniss wo sie sind (data) schreib- und lese- Rechte gegeben.

Da ich mich mit php nicht soo gut auskennen hat mir jemand dabei geholfen die save.php Datei zu schreiben.
HTML:
<?php

$filename = $_GET['filename'];
$text = $_GET['content'];
$dateiname = "data/".$filename.".txt";
$fh = fopen($dateiname, 'a') or die("can't open file");
fwrite($fh, base64_decode($text));
fwrite($fh, "\n\n\n");
fclose($fh);
?>


Hier die Auschnitte von Code wo die URL und das Speichern gemacht wurde:

Java:
private String beginn, ende;
private static String URL_SERVER ="http://www.cslfotoart.de/000/experiment.htm";
URL_SERVER = getParameter("url");
...............

String content = DatenSpeichern.saveAsTextFile(beginn, ende, dateiName,
                                      result,
                                      anzahl_richtige_antworten,
                                      anzahl_beantwortete_fragen, anzahl_gelesene_fragen, prozent, heading, exp);
        
         URL url = null;
    try {    	        
          url = new URL(URL_SERVER+"save.php?filename=kontrollgruppe="+content);    
          
          AppletContext Context = getAppletContext();
          Context.showDocument(url, "_blank");
    } catch (Exception e) {
       }

...........................................................
SimpleDateFormat sdf = new SimpleDateFormat("dd...HH.mm.ss");
        beginn ="";
        beginn = sdf.format(new Date());
        ende ="";
        heading ="";
...........................................................

dateiName = "" +  name + beginn + "_kontrollgruppe";

// name ist der name mit dem sich der anwender zu begin sich registriert

String content = DatenSpeichern.saveAsTextFile(beginn, ende, dateiName,
                                      result,
                                      anzahl_richtige_antworten,
                                      anzahl_beantwortete_fragen, anzahl_gelesene_fragen, prozent, heading, exp);
        
         URL url = null;
    try {    	        
          url = new URL(URL_SERVER+"save.php?filename=kontrollgruppe="+content);    
          
          AppletContext Context = getAppletContext();
          Context.showDocument(url, "_blank");
    } catch (Exception e) {
 
Zuletzt bearbeitet:
Danke für den Tip.

woher die Fehlermeldung kommt ist klar, aber das wieso ist mir immer noch unklar ...

In den Browser wird die URL angezeigt:

"http://www.cslfotoart.de/000/save.php?filename=kontrollgruppe=c2RzZHMwOS4uLjEzLjA1LjA0X2tvbnRyb2xsZ3J1cHBlClZhcmlhbnRlOiAzCiBGcmFnZSAwIHd1cmRlIGZhbHNjaCBiZWFudHdvcnRldAogRnJhZ2UgMSB3dXJkZSByaWNodGlnIGJlYW50d29ydGV0CiBGcmFnZSAyIHd1cmRlIGZhbHNjaCBiZWFudHdvcnRldApCZWdpbm46IChUYWcuLi5zdHVuZGUubWludXRlLnNla3VuZGUpMDkuLi4xMy4wNS4wNApFbmRlOiAoVGFnLi4uc3R1bmRlLm1pbnV0ZS5zZWt1bmRlKTA5Li4uMTMuMDUuMTMKQW56YWhsIGRlciByaWNodGlnIGJlYW50d29ydGV0ZW4gRnJhZ2VuOiAxCkFuemFobCBkZXIgYmVhbnR3b3J0ZXRlbiBGcmFnZW46IDMKQW56YWhsIGRlciBnZWxlc2VuZW4gRnJhZ2VuOiA0ClJpY2h0aWcgYmVhbnR3b3J0ZXQ6IDMzLjMzJQoK"

und die "can't open file" Fehlermeldung.
 
Zuletzt bearbeitet:
1.) Existiert das Unterverzeichnis data?
2.) Wer ist der owner von dem Verzeichnis data?
3.) Hat der User mit dem der Webserver ausgeführt wird Schreibrechte auf dem data Verzeichnis?

Sollte 3.) nein lauten, entweder chown auf das data Verzeichnis machen bzw. ein chmod, damit der Webserver in das Verzeichnis auch reinschreiben darf. Wie auch immer, es muss zumindest sichergestellt sein, dass der Webserver in das Verzeichnis auch schreiben darf 🙂

Edit:

Sehe gerade Dein Update... in der URL fehlt auch noch ein &content

"http://www.cslfotoart.de/000/save.php?filename=kontrollgruppe&content=c2RzZHMw...

Vermutlich ist dem Filesystem einfach der Dateiname zu lang, da der den gesamten String dafür verwendet, so dass er die Datei nicht anlegen kann.
 
Zuletzt bearbeitet:
Ja der Verzeichniss data ist vorhanden, als Unterverzeichniss von den Hauptverzeichniss (000) wo alle Daten gespeichert sind.

Folgende Rechte (siehe Bild wurden gegeben).


data_15.gif
 
Siehe auch mein Edit (ist vielleicht untergegangen)

Sehe gerade Dein Update... in der URL fehlt auch noch ein &content

"http://www.cslfotoart.de/000/save.php?filename=kontrollgruppe&content=c2RzZHMw...

Vermutlich ist dem Filesystem einfach der Dateiname zu lang, da der den gesamten String dafür verwendet, so dass er die Datei nicht anlegen kann.
 
@preachie

Du meinst dass beim speichern mein Host-Anbieter damit Probleme hat, oder ist es allgemein so dass ab einer bestimmten Anzahl von Zeichen das System nicht mitkommt?
 
Er meint damit, dass die URL falsch zusammengesetzt ist. Es fehlt der Parameter content, dadurch kommt der Dateiname falsch an ==> Fehlermeldung
 
Nein, es ist kein "Problem" Deines Hosters, es ist eine generelle Limitierung der Filesysteme.
Verwendet Dein Hoster bspw. ext3 als Filesystem, ist die maximal Dateinamenlänge auf 255 limitiert.
Das ist allerdings eh alles kein Problem, da der eigentliche Fehler in Deiner URL liegt und der Dateiname gar nicht erst so lang werden sollte.

Deiner PHP Datei entnehme ich, dass Du in der URL 2 Parameter übergeben willst (zumindest fragst Du 2 ab), filename und content.
Übergeben tust Du aber nur einen Parameter filename, da wie geschrieben das "&content" in der URL fehlt.
Daher wird sowohl der übergebene Dateiname "kontrollgruppe" als auch der Inhalt von content als $filename interpretiert.

Ich hoffe, ich konnte es einigermaßen verständlich erklären 😉
 
Habe auch den PHP-Skript getestet das Problem scheint der "content" Parameter zu sein.

Fehlermeldung inkl. debuggen von PHP Datei:

Code:
<?php
error_reporting( -1 );
ini_set('display_errors', TRUE);
$filename = $_GET['filename'];
$text = $_GET['content'];
$dateiname = "data/".$filename.".txt";
$fh = fopen($dateiname, 'a') or die("can't open file");
fwrite($fh, base64_decode($text));
fwrite($fh, "\n\n\n");
fclose($fh);
?>

Notice: Undefined index: content in /web/1/000/042/529/156432/htdocs/000/save.php on line 5

Warning: fopen(data/Richtig_Falsch_Ranking=c2QxNS4uLjAyLjIxLjIwX1JpY2h0aWdfRmFsc2NoX1JhbmtpbmcKIEZyYWdlIDAgd3VyZGUgcmljaHRpZyBiZWFudHdvcnRldApCZWdpbm46IChUYWcuLi5zdHVuZGUubWludXRlLnNla3VuZGUpMTUuLi4wMi4yMS4yMApFbmRlOiAoVGFnLi4uc3R1bmRlLm1pbnV0ZS5zZWt1bmRlKTE1Li4uMDIuMjEuMjgKQW56YWhsIGRlciByaWNodGlnIGJlYW50d29ydGV0ZW4gRnJhZ2VuOiAxCkFuemFobCBkZXIgYmVhbnR3b3J0ZXRlbiBGcmFnZW46IDEKQW56YWhsIGRlciBnZWxlc2VuZW4gRnJhZ2VuOiAyClJpY2h0aWcgYmVhbnR3b3J0ZXQ6IDEwMC4wJQoK.txt) [function.fopen]: failed to open stream: File name too long in /web/1/000/042/529/156432/htdocs/000/save.php on line 7
can't open file


Ist das Problem bei dem DatenSpeichern Klasse?

Java:
import java.io.*;

public class DatenSpeichern
{
    public static String saveAsTextFile (String beginn, String ende, 
    		String dateiName, int[] antworten, Integer richtige, 
    		Integer beantwortete, Integer gelesene, double prozent, 
    		String heading, int variante) 
    {
        String result = "";
        result = dateiName;
    	result+= "\nVariante: " + variante;
        for(int i=0;i<Fragebogen.FRAGEN_INSGESAMT;i++){
                if(antworten[i] == 1){
                    result+= "\n Frage "+i+" wurde richtig beantwortet";
                }
                else if (antworten[i] == 0){
                	 result+= "\n Frage "+i+" wurde falsch beantwortet";
                }
                else{} // antworten[i] = 2, do nothing
                
        }
            result+= "\nBeginn: (Tag...stunde.minute.sekunde)" + beginn;
            result+= "\nEnde: (Tag...stunde.minute.sekunde)" + ende;
            result+="\nAnzahl der richtig beantworteten Fragen: " + richtige.toString();
            result+= "\nAnzahl der beantworteten Fragen: " + beantwortete.toString();
            result+= "\nAnzahl der gelesenen Fragen: " + gelesene.toString();
            result+= "\nRichtig beantwortet: " + prozent + "%";
            result+= "\n" + heading + "\n";
            
            System.out.println(result);
            String s = Base64.encodeBytes(result.getBytes()); 
            return s;       
     }
  }
 
Problem ist vermutlich, dass du zwischen den Parameter ein
Code:
&
in der URL vergessen hast.
Lass dir von PHP mal alle $_GET Werte ausgeben, dann siehst du es vllt besser.
P.S. hm, meine Methode namens saveAsTextFile, die irgendwas in Base64 kodiertes zurück gibt. Vllt lässt sich da ein besserer Name finden.
 
habe mit ein wenig Hilfe das Problem gelöst 😀

in den Zeilen 13 und 39 musste noch &inhalt dazu (habe content in inhalt umbenannt, damit bei der Suche in meinem Code nicht die ganzen contentPane ... usw angezeigt werden)

Code:
alt + falsch:

url = new URL(URL_SERVER+"save.php?filename=kontrollgruppe="+inhalt);  

neu + richtig:

url = new URL(URL_SERVER+"save.php?filename=kontrollgruppe&inhalt="+inhalt);

außerdem die Variable "dateiName" Zeile 28 in "gespeicherteDatei2 geändert, da mehreren Variablen (in verschiedene Klassen) dem selben Namen (dateiName) zugewiesen wurde.
Jetzt geht alles, VIELEN DANK FÜR DIE HILFE !!!!!!!!!!!!!!!!!!!!!!!!!
 

Zurück
Oben