Może opiszę dokładnie co chcę osiągnąć:
1. Kiedy uploaduje się plik chce filtrować jego nazwę (usuwane polskie zanki, spacje i znaki specjalne)
2. Nazwa przefiltrowanego pliku jest zapisywana w bazie a plik jest zapisywany w katalogu public/uploads
3. Poprzedni plik skojarzony z tym rekordem jest usuwany
Dwa pierwsze punkty udalo mi się zrobić filtrem, natomiast jest problem z pkt. 3, poniżej fragment akcji:
Pracuję na localhost na Windows 7 kiedy wyświetlam:
$fld dostaję : C:\wamp\www\learning\public\uploads
$fld . '/' . $plik : C:\wamp\www\learning\public\uploads/audyt-dla-strony-http.doc
$fld . '\\' . $plik : C:\wamp\www\learning\public\uploads\audyt-dla-strony-http.doc
realpath($fld . '/' . $plik) : ''
realpath($fld . '\\' . $plik) : ''
//usuwanie poprzedniego pliku
$fld = realpath(APPLICATION_PATH
. '/../public/uploads'); $plik = $DbTable->getFile($eid); //pobranie z bazt nazwy pliku
{
chmod($np, 0777);
}
EDIT:Problem jest gdzie indziej niż w ścieżce. Mam taki filtr:
Ten filtr działa ok pod tym względem, że nazwa pliku jest filtrowana i zapisywana w bazie prawidłowo. Dla przykładu dla pliku: badanie-konkurencji-szkolenia -Łódź.xls
w bazie jest zapisywany: badanie-konkurencji-szkolenia-d.xls, natomiast w katalogu uploads jest zapisywany: badanie-konkurencji-szkolenia -ĹĂłdĹş.xls
czyli plik skrzaczony i nie filtrowany
class My_Filters_Uploader implements Zend_Filter_Interface
{
public function filter($value)
{
// perform some transformation upon $value to arrive on $valueFiltered
$valueFiltered = My_Slugs::string2slug($file['filename']);
return $valueFiltered . '.' . $file['extension'];
}
}