Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: unlink safe mode
Forum PHP.pl > Forum > PHP
Brick
Na serwerze włączony jest safe mode
Pliki wgrywane przez PHP do katalogu utworzonego przeze mnie (FTP) mogą być kasowane przez PHP (unlink).
Pliki wgrywane do katalogu utworzonego przez PHP nie mogą być kasowane, unlink zwraca błąd:

Warning: SAFE MODE Restriction in effect. The script whose uid is 1035 is not allowed to access ../uploaded/test/obrazek.jpg owned by uid 33 in

Tworzenie katalogu "test" przez php wygląda tak:
  1. <?php
  2. umask(0);
  3. mkdir ("$dir/$filename",02777);
  4. ?>


Utworzony katalog ma wtedy prawa 777
Wgrany plik przez PHP otrzymuje prawa 755
chmod oczywiście nie zadziała, zresztą nie o prawa tu chyba chodzi co o ten UID. Jest inny i nie wiem czemu (obie operacje wykonuje PHP).

Jest jakiś sposób na skasowanie takiego pliku przez PHP ?
(Wszystko działa dobrze na serwerach gdzie safe mode jest wyłączony)
nitro18
chmod to chyba chmod($plik,0755) a nie 02777.

=> http://pl2.php.net/manual/pl/function.chmod.php

a odnośnie unlink(), zadziała nawet przy włączonym safe mode i wtedy i tylko wtedy gdy ścieżka do pliku jest prawidłowa.
Brick
chmod to chyba chmod($plik,0755) a nie 02777.
Można pisać 02777, 02 dotyczy GID, czyli ID grupy do której należy katalog. Wtedy wszystkie pliki zapisywane do tego katalogu będą otrzymywały GID tego katalogu, a nie GID użytkownika, który wgrywa plik.

Niestety to nic nie pomaga w moim przypadku, ponieważ, gdy jest włączony SAFE MODE funkcja UNLINK sprawdza UID a nie GID
Cytat
Unlink sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.

W moim przypadku PHP pracuje jako użytkownik o UID=33
Użytkownik FTP ma UID=1035
Gdy tworzę katalogi lub pliki przez PHP to otrzymują one UID=33
Gdy skrypt PHP kasuje plik w katalogu utworzonym przez PHP to otrzymuję komunikat "The script whose uid is 1035..."
Kompletnie bez sensu, wynika z tego że przy operacji unlink PHP ma inne UID niż przy innych operacjach.

Nie udało mi się tego rozwiązać i wynika z tego, że to są jakieś dziwne ustawienia serwera
Pilsener
Z tego co coś mi dzwoni, to w SAFE MODE jest ograniczony dostęp do plików tworzonych "w locie" przez skrypt (np. funkcją fopen). Ja poradziłem sobie funkcją touch. Sprawdzałeś na innych serwerach? Przetestuj na jakimś darmowym hostingu z włączonym SAFE MODE.
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.