Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]funkcja fopen(), apostrof w nazwie pliku.
Forum PHP.pl > Forum > Przedszkole
obil
Witam.

Próbuję funkcją fopen() otworzyć plik z podmontowanego zasobu sieciowego (komputer z systemem Windows),
który posiada w swej nazwie apostrof ( ' ), w celu skopiowania go na dysk lokalny komputera.
Przykład użycia:
Kopiuję dwa pliki: jeden który nie zawiera apostrofu, drugi przeciwnie ... oto wynik.

CODE
kedzior@localhost:/home/Dokumenty/JAVA$ ~/script.php 1.tmp
copy file from /media/DESKTOP_D/[LAPTOP]/NA DVD/Programowanie/Books - Java 2 Micro Edition (J2ME)/Mobile 3D Graphics API for Java 2 Micro Edition.pdf to ./NA DVD/Programowanie/Books - Java 2 Micro Edition (J2ME)/Mobile 3D Graphics API for Java 2 Micro Edition.pdf ... OK
copy file from /media/DESKTOP_D/[LAPTOP]/NA DVD/Programowanie/Books - Java 2 Micro Edition (J2ME)/O\'Reilly - Learning Wireless Java.pdf to ./NA DVD/Programowanie/Books - Java 2 Micro Edition (J2ME)/O\'Reilly - Learning Wireless Java.pdf ...
Warning: fopen(/media/DESKTOP_D/[LAPTOP]/NA DVD/Programowanie/Books - Java 2 Micro Edition (J2ME)/O\'Reilly - Learning Wireless Java.pdf): failed to open stream: Invalid argument in /home/kedzior/script.php on line 56

Warning: fread(): supplied argument is not a valid stream resource in /home/kedzior/script.php on line 58

Warning: fclose(): supplied argument is not a valid stream resource in /home/kedzior/script.php on line 66
OK
copy file from to ./ ...
Warning: fread(): supplied argument is not a valid stream resource in /home/kedzior/script.php on line 58

Warning: fclose(): supplied argument is not a valid stream resource in /home/kedzior/script.php on line 66

Warning: fclose(): supplied argument is not a valid stream resource in /home/kedzior/script.php on line 67
OK
kedzior@localhost:/home/Dokumenty/JAVA$


Próbowałem zabawy z add?slashes i innymi (również ręcznie napisanymi przez siebie funkcjami, aby sprawdzić co jest) oraz jakichś dziwnych konwersji na ciągi heksadecymalne i mieszane, ale to nic nie pomogło. Po dodaniu addcslashes (lub addslashes), pisze że taki plik nie istnieje.

Proszę o pomoc.

Pozdrawiam,
Konrad.
Pilsener
Cytat
Próbuję funkcją fopen() otworzyć plik z podmontowanego zasobu sieciowego
- właśnie testowałem to na windows i działa bez problemu:
  1. <?php
  2. $uchwyt = fopen('aa'bb.htm','r');
  3. if($uchwyt){echo 'ok';}else{echo 'porazka';}
  4. ?>

Daj kod, którym chcesz otworzyć ten plik, bo nie wiadomo, co tam wyczyniasz.
obil
CODE
#!/usr/bin/php
function mkdir_from_path($s,$min,$is_root_path) {
if(isset($s) && $s != "" && isset($min) && $min >= 0) {
$tab = explode("/",$s);
if($min == 0) {
// NOT YET
return 0;
} else {
if(!is_array($tab)) {
echo $s." nie jest prawidlowym ciagiem ze slashem i nie moze zostac przekonwertowany na tablice";
return 0;
}
$len = count($tab) - 1;
if(isset($is_root_path) && $is_root_path == 1)
$path = "/";
for($i = $min + 1; $i < $len; $i++) {
$path .= $tab[$i]."/";
@mkdir($path,0700);
}
return $path.$tab[$len];
}
}
}


// process

$fp = fopen($argv[1],"rt");
while($s = fgets($fp)) {

$d = mkdir_from_path($s,3,0);

//$d = addslashes($d);
//$s = addslashes($s);

//$s = erase_apostrof($s);
//$d = erase_apostrof($d);

$d = substr($d,0,strlen($d) - 1);
$s = substr($s,0,strlen($s) - 1);

echo "copy file from $s to ./$d ... ";

$src = fopen("$s","r");
$dst = fopen("$d","w+");
while($tmp_data = fread($src,32768)) {
if(fwrite($dst,$tmp_data) === FALSE) {
fclose($dst);
fclose($src);
rmdir("$d");
echo "FAILED";
}
}
fclose($src);
fclose($dst);
echo "OK";
echo "\n";
}
fclose($fp);

?>
Pilsener
1.
  1. <?php
  2. @mkdir($path,0700);
  3. ?>
- nie używaj @ przed nazwami funkcji, bo nie będą się wyświetlały błędy.
2.
  1. <?php
  2. $src = fopen("$s","r");
  3. ?>
- wyechuj ścieżki do plików i zobacz, czy są poprawne - jeżeli w nazwie pliku są znaki specjalne, to musisz dodać przed nimi slesz (jak w moim kodzie powyżej)
3. Sprawdzaj, czy plik istnieje (file_exists) i czy fopen nie zwraca FALSE
obil
Dzięki Pilsener za zainteresowanie.

Chciałem skorzystać z Twoich uwag, ale odpalając skrypt, aby sprawdzić fo 'na dzień dobry', odziwo wszystkie pliki skopiowały się bez problemu do odpowiednich podkatalogów. Teraz to naprawdę nie wiem o co chodziło biggrin.gif:D ale skrypt jakotako działa.

Jeszcze raz dzięki i pozdrawiam,
Konrad.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.