Visualizzazione risultati 1 fino 8 di 8

Discussione: Impossibile creare file e cartelle in PHP

  1. #1
    classiperlo non è connesso Neofita
    Data registrazione
    19-09-2014
    Messaggi
    9

    Predefinito Impossibile creare file e cartelle in PHP

    Salve a tutti! Sto impazzendo con un problema che non riesco a risolvere. Vorrei creare una cartella in PHP usando mkdir:

    Codice:
    //Check if the directory already exists.
    if(!is_dir("utenti")){
    //Directory does not exist, so lets create it.
    mkdir("utenti", 0755);
    Poi vorrei scrivere dentro quella cartella creando due file:

    Codice:
    $punt = fopen("utenti/$utente.dat","w");
    fwrite($punt,$pass); 
    fclose($punt);
    $punt = fopen("utenti/$utente.txt","w");
    fclose($punt);
    Il problema è che su Altervista non viene creata nessuna cartella e nessun file e non ricevo alcun messaggio di errore. Ho provato anche a creare a mano la cartella utenti su Altervista, ma ugualmente non viene creato nessun file.

    Sul mio PC, con un server PHP locale, funziona tutto perfettamente. Cosa sto sbagliando?
    Grazie!
    Giancarlo

  2. #2
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Codice PHP:
    <?php
    //Check if the directory already exists.
    $utente = 'Pippo';
    $pass = 'ciao';
    if(isset(
    $utente, $pass) && $utente == $utente && $pass == $pass) {
    $a = __DIR__."/utenti/";
    if(!
    is_dir($a)){
    //Directory does not exist, so lets create it.
    $b = mkdir($a, 0755);
    }
    $punt = fopen("{$a}{$utente}.dat","w");
    fwrite($punt,$pass);
    fclose($punt);
    $punt = fopen("{$a}{$utente}.txt","w");
    fwrite($punt,$pass);
    fclose($punt);
    }
    Attento che nel caso di richieste simultaneamente potrebbe capitare qualche imprevisto.. Se il tuo sistema operativo supporta i lock di php, usali http://php.net/manual/en/function.flock.php

  3. #3
    classiperlo non è connesso Neofita
    Data registrazione
    19-09-2014
    Messaggi
    9

    Predefinito

    Non credo si tratti di un problema di condivisione, perché si tratta di una pagina prova, creata su un sito su cui ho ben pochi accessi. In ogni caso ora sono riuscito a creare la cartella con mkdir, ma non riesco a scriverci dentro. L'istruzione fopen non salva nessun file! Cosa posso provare a fare? Grazie!

  4. #4
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    A me su altervista funziona... Non credo "è diverso" dal non può mai accadere... Se può accadere vuole dire che devi porre rimedio... Altrimenti se tu ti chiami Giovanni io ti chiamo Giorgio (tanto inizia sempre per Gio)..
    Nota* fai un var_dump($punt,$b);
    Ultima modifica di darbula : 24-09-2017 alle ore 17.28.38

  5. #5
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Tu NON VUOI veramente salvare la password di un utente in chiaro in un file txt e in un file dat liberamente accessibili dall'interno world wide web, usando come nome del file una variabile che per di più è il nome dell'utente (che magari contiene caratteri inadatti ad essere usati come nome di un file).

    QUINDI si tratta semplicemente di un esercizio o esperimento. Vero???

    Ciò detto, può succedere che la funzione fopen fallisca. Nel caso, non solo restituisce false, ma solleva anche un errore di livello E_WARNING che indica cosa è andato storto.
    Dovresti quindi abilitare la visualizzazione degli errori:
    Codice PHP:
    <?php
    error_reporting
    (E_ALL);
    ...
    $fp = fopen("utenti/$utente.dat", "w");
    fwrite($fp, "Non salverò le password in chiaro!\n");
    fclose($fp);

    $fp = fopen("utenti/$utente.txt" ,"w");
    fclose($fp);
    In questo modo, se ci sono problemi, te ne verrà mostrata la causa.

  6. #6
    classiperlo non è connesso Neofita
    Data registrazione
    19-09-2014
    Messaggi
    9

    Predefinito

    Si, ovviamente è solo un esperimento didattico, prima di introdurre i Database. Ho fatto come hai suggerito, ho abilitato la segnalazione degli errori e ho ottenuto questi messaggi:

    Warning: fopen() [function.fopen]: SAFE MODE Restriction in effect. The script whose uid is 2684287 is not allowed to access /membri/classiperlo/Materiale/5ast/Didattica/Password Protected Board/utenti owned by uid 48 in /membri/classiperlo/Materiale/5ast/Didattica/Password Protected Board/registra2.php on line 28

    Warning: fopen(./utenti/semsaudade.dat) [function.fopen]: failed to open stream: No such file or directory in /membri/classiperlo/Materiale/5ast/Didattica/Password Protected Board/registra2.php on line 28

    Warning: fwrite(): supplied argument is not a valid stream resource in /membri/classiperlo/Materiale/5ast/Didattica/Password Protected Board/registra2.php on line 29

    Warning: fclose(): supplied argument is not a valid stream resource in /membri/classiperlo/Materiale/5ast/Didattica/Password Protected Board/registra2.php on line 30

    Warning: fopen() [function.fopen]: SAFE MODE Restriction in effect. The script whose uid is 2684287 is not allowed to access /membri/classiperlo/Materiale/5ast/Didattica/Password Protected Board/utenti owned by uid 48 in /membri/classiperlo/Materiale/5ast/Didattica/Password Protected Board/registra2.php on line 31

    Warning: fopen(./utenti/semsaudade.txt) [function.fopen]: failed to open stream: No such file or directory in /membri/classiperlo/Materiale/5ast/Didattica/Password Protected Board/registra2.php on line 31

    Warning: fclose(): supplied argument is not a valid stream resource in /membri/classiperlo/Materiale/5ast/Didattica/Password Protected Board/registra2.php on line 32


    Evidentemente ci sono in atto delle restrizioni di accesso sui file. La domanda è: come posso modificarle?
    Grazie!
    Ultima modifica di classiperlo : 25-09-2017 alle ore 15.04.35

  7. #7
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Chiaro!
    Controlla la versione di PHP che stai usando, se possibile impostala all'ultima disponibile dal pannello di controllo. il SAFE MODE è stato rimosso da PHP 5.4.0: safe Mode.

    Se non è possibile o non dovesse funzionare: per caso stai caricando gli script usando un client FTP? Perché dai messaggi d'errore il problema sembra essere che gli script abbiano uno uid diverso da quello del proprietario della cartella utenti. A volte succede che i file caricati in questo modo abbiano problemi di questo tipo, nel caso basta trovare un altro modo per caricarli (anche solo cambiare client). Controlla quindi le informazioni sul proprietario dello script.

  8. #8
    classiperlo non è connesso Neofita
    Data registrazione
    19-09-2014
    Messaggi
    9

    Predefinito

    Grazie mille! Ho cancellato tutti i file e le cartelle dal server e ho caricato tutto di nuovo usando il pannello di controllo di Altervista. Ora funziona tutto perfettamente. Temo ci fosse un problema per il nome della cartella usato per contenere gli script. Il mio nome conteneva degli spazi blank e credo che Altervista non li accetti. Forse potrebbe essere questa la ragione del malfunzionamento, non so.
    In ogni caso adesso è tutto a posto. Grazie per la gentilezza e l'aiuto!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •