Problema apostrofo con funzione unlink

DeltaMachine

Nuovo Utente
28 Gen 2013
4
0
0
Salve,

ho un problema con la funzione unlink().
Ho una pagina con la lista delle immagini prelevate da una cartella e visualizzate, con la possibilità di eliminare uno o piu file spuntando la relativa checkbox.
Per l'eliminazione ho usato appunto la funzione unlink().
Se seleziono un'immagine da cancellare, il cui nome ha un apostrofo, mi appare il seguente errore:

Warning: unlink(../../gallery/img/L') [function.unlink]: No such file or directory...

L'immagine presa come esempio ha il nome: "L'illusione".
Per tutte le altre immagini lo script funziona correttamente.
Qui di seguito lo script della funzione unlink().

Spero in un vostro aiuto.
Grazie.

PHP:
<?php 
    $path = "../../gallery/img/"; 
    if(isset($_POST['file']) && is_array($_POST['file'])) 
    { 
    foreach($_POST['file'] as $file) 
    {     
    unlink($path . $file) or die("Eliminazione file fallita"); 
    } 
    } 
?>
 
ciao
per prima cosa cerca di capire come risulta il nome quando è l'illusione (cioè con l'apostrofo, comunque da evitare nomi simili)
1) come viene scritto dal post
PHP:
 <?php 
$path = "../../gallery/img/"; 
if(isset($_POST['file']) && is_array($_POST['file'])){ 
    foreach($_POST['file'] as $file){     
    	//unlink($path . $file) or die("Eliminazione file fallita");
		var_dump($file);//vedi come viene l'illusione
    } 
} 
?>
2)come viene interpretato da php il nome (metto solo per tipo .jpg)
PHP:
<?php
$path = "../../gallery/img/"; 
$immagini=glob($path."*.jpg");
foreach($immagini as $file){     
		var_dump($file);//vedi come viene viene riportato l'illusione.jpg
} 
?>
da questo, credo, dovresti capire cosa non va
p.s.
metti nella cartella poche immagini altrimenti di viene una sfilza
 
Ciao borgo,

ti ringrazio per la risposta.

Allora...

nel primo cosa nel momento in cui vado ad eliminare l'immagine ottengo questo output:
string 'L' (length=1)

nel secondo caso, invece:
string '../../gallery/img/L'illusione.jpg' (length=33)

l'errore potrebbe essere questo?
'../../gallery/img/L'illusione.jpg'

In che modo posso far si che il PHP non legga l'apostrofo di "L'illusione" come chiusura di apici?

Grazie mille per la tua disponibilità :)
 
Ciao borgo,

ti ringrazio per la risposta.

Allora...

nel primo cosa nel momento in cui vado ad eliminare l'immagine ottengo questo output:
string 'L' (length=1)

nel secondo caso, invece:
string '../../gallery/img/L'illusione.jpg' (length=33)

l'errore potrebbe essere questo?
'../../gallery/img/L'illusione.jpg'

In che modo posso far si che il PHP non legga l'apostrofo di "L'illusione" come chiusura di apici?

Grazie mille per la tua disponibilità :)
Buttandola li, potresti provare utilizzando addslashes() sul nome
 
ciao
dato i risultati mi sembra che l'errore provenga da come è trasmesso il post in quanto trovi L al posto di quello che hai trasmesso, cioè L'illusione, mentre sembra che php legga bene il nome.
quindi quello che dice nefyt può essere giusto, l'unico problema è dove applicare addslashes.
sul $_POST
proverei in prima istanza
PHP:
//...
if(isset($_POST['file']) && is_array($_POST['file'])){ 
	$_POST['file']=array_map($_POST['file'], "addslashes");
	//ecc....

oppure, ma non so come ricavi il campo di input, al suo value

counque, ribadisco: è meglio modificare il nome dell'immagine e non usare nei nomi caratteri particolari
 
Grazie ad entrambi per l'interessa.

Avevo provato ad utilizzare addslashes con esito negativo.

@borgo
ho inserito lo script che hai inserito ma ricevo questo errore:

Warning: array_map() expects parameter 1 to be a valid callback, array must have exactly two members...

PS - Come mai è meglio non utilizzare i caratteri particolari?

Ho necessita che il cliente possa caricare immagini esattamente con il nome esatto, apostrofo e accenti compresi.

Sbaglio qualcosa?

Questo è lo script con la tua dritta:
PHP:
<?php
    $path = "../../gallery/img/";
    if(isset($_POST['file']) && is_array($_POST['file'])){ 
    $_POST['file']=array_map($_POST['file'], "addslashes");
	foreach($_POST['file'] as $file)
	{	
	unlink($path . $file) or die("Failed to delete file");
	}
	}
?>

grazie ancora.
 
ciao
PS - Come mai è meglio non utilizzare i caratteri particolari?
per evitare i problemi di cui sopra.
se salvi su un db da una parte salvi i nomi così come sono, per i nomi dei file sostituisci i caratteri
poi guardo array_map
 

Discussioni simili