• Moderatore

    Problema con la funzione fopen()

    In poche parole;
    devo creare un file .htaccess nel momento che installo un cms e quindi utilizzo fopen().
    Posto uno stralcio di codice:

    
    $path = dirname( dirname( __FILE__ ) );
    	// apro o creo il file .htaccess
    	$file = fopen( $path . '/.htaccess', 'w' ) or die("Error: non posso aprire/creare il file");
    	
    	//Inserisco il contenuto
    	$content_string = "RewriteEngine On\n";
    	$content_string .= "RewriteBase /\n";
    	$content_string .= "RewriteRule ^sitemap.xml ./sitemap.php [L,QSA]\n";
    	$content_string .= "RewriteRule ^index\.php$ - \n";
    	$content_string .= "RewriteCond %{REQUEST_FILENAME} !-f\n";
    	$content_string .= "RewriteCond %{REQUEST_FILENAME} !-d\n";
    	if( ROOT == '' ) {
    		$content_string .= "RewriteRule . /index.php \n";
    	} else {
    		$content_string .= "RewriteRule . /" . ROOT . "/index.php \n";
    	}
    	fwrite($file, $content_string);
    	//
    	fclose($file);
    
    

    Ovviamente fopen() non funziona e mi restituisce l'errore.
    Qualcuno sà perchè?


  • User Attivo

    Ciao!
    Ho l'impressione che l'errore sia nel percorso memorizzato da $path.

    Inoltre non ho ben capito se lo script fosse nella stessa cartella del file .htaccess oppure in un'altra con la conseguente apertura di diversi scenari.

    Il primo consiglio che mi permetto di darti è quello di visualizzare il percorso di $path e vedere se è coerente con quello del file che vuoi modificare.

    Facci sapere.


  • Moderatore

    Se non afferri dove risiede il file .htaccess da creare/scrivere, ti consiglio vivamente di dare una letta al manuale di php cercando le funzioni FILE e dirname.
    FILE Restituisce il percorso completo e il nome del file. In questo caso:
    /var/www/vhosts/nome_sito/httpdocs/cartella/file.php

    dirname restituisce il nome della directory dal percorso indicato. Quindi scrivere:
    dirname( dirname( FILE ) ) = /var/www/vhosts/nome_sito/httpdocs/
    che sarebbe come scrivere il path in questo modo:
    $path = '../';

    Comunque, lo script funziona a pennello era un problema del modulo php del mio server impostato su mod_php e non come applicazione fastCGI, per tanto chiedeva obbligatoriamente i permessi 757.

    Risolto! :fumato:


  • User Attivo

    Probabilmente dimentichi che il file .htaccess può essere messo anche all'interno di una cartella annidata per esempio per evitare il download diretto dei file.


  • Moderatore

    Io evito di darti ulteriori spiegazioni, visto che ho già capito che hai grosse lacune a livello di programmazione.

    Hai letto il file htaccess che genero?
    Hai una vaga idea a cosa serve?

    Probabilmente dimentichi che il file .htaccess può essere messo anche all'interno di una cartella annidata per esempio per evitare il download diretto dei file.

    E che ci dovrei fare con un file htaccess di quel tipo se sta dentro una cartella non raggiungibile dal normale percorso di un sito?


  • User Attivo

    Mi preme ricordare qualcosa che forse è scontato ma è importante: quando qualcuno chiede un aiuto sui forum si limita a postare il frammento di codice che genera il problema oltre a dare tutte le informazioni utili per farsi capire evitando di riportare 90 file o più del suo progetto. Trovando quelle poche righe pensavo ci avessi risparmiato molto altro.
    Lasciare sottinteso o usare ambiguità non può che sollevare confusione per chi prova ad aiutare, e se ci fai caso nel post #2 chiedevo se lo script invocante la fopen() era nella stessa cartella del file .htaccess perché non era un'informazione presente nel precedente post.
    Conseguentemente il tuo codice potrebbe essere una piccolissima parte di un'applicazione ben più consistente per la gestione di più .htaccess modificati in diverse cartelle del sito in base alle specifiche esigenze.

    Ho da darti un paio di notizie: una forse buona ed una cattiva. Quella buona è che riconosco di non conoscere lo scibile della programmazione e con umiltà mi leggo i manuali e consulto Google quando ho qualche dubbio, ma quello che conosco mi permette di vivere in felicità ed in serenità. Mi sembra che questo discorso valga per delineare i tuoi limiti di cui invece non sapevi porre.
    La brutta notizia che ti devo dare è che ho l'impressione che tu abbia ancora dei dubbi sul come fare ad estrarre il percorso corretto pur facendo il saccente per il semplice fatto che non hai avuto l'umiltà di leggere con attenzione il manuale.

    Mi preme ricordare che il tempo è il giudice più equo e severo di quanto altro possa aggiungere.


  • Moderatore

    Mi preme ricordarti, che lo script funziona ed era un problema annesso alle impostazioni del mio server.