2010-06-24 5 views
8

Mój kodmkdir() nie działa

mkdir("/some/absolute/path",0777); 

i

mkdir("relative/path", 0777); 

nie działa, tryb bezpieczny jest wyłączony, a ja nawet nie próbował ustawienie wszystkich folderów nadrzędnych na 777.

Wszelkie pomysły?

EDYCJA: Mam zgłoszenie błędu włączone, w mojej frustracji mam 777'd całą ścieżkę tylko po to, aby upewnić się, że to nie jest problem. To musi być coś głupio prostego.

EDYCJA EDYCJI: Rozgrywka dla wszystkich, którzy odpowiedzieli sugestiami ... Ale nie wybiorę odpowiedzi, ponieważ ta kwestia nadal nie została rozwiązana, ale znowu myślę, że to będzie jedna z tych, które pozostały otwórz na zawsze.

EDYCJA x 3: Tak więc mam niezadowalające rozwiązanie tego pytania ... Zacząłem od czystego obrazu maszyny wirtualnej, ponawiałem ją i działa teraz. Bez żartów.

+4

Jaki błąd powraca? – enricog

+0

Nie, po prostu przechodzi przez to i nie wypluwa żadnych błędów. Próbowałem nawet sprawdzić, czy w jakiś sposób omyłkowo umieścił nowy katalog w innym miejscu i mógłbym go znaleźć. –

+5

Kilka rzeczy: Czy proces uruchamiający ten kod ma uprawnienia do zapisu w katalogu nadrzędnym? Jeśli używasz tego przez serwer sieciowy, czy sprawdziłeś dzienniki pod kątem komunikatów o błędach? – GreenMatt

Odpowiedz

0

Brakuje ci cytatów wokół parametru nazwy ścieżki.

+0

Kod rzeczywiście ma tam ... Przepraszam, że w mojej frustracji zapomniałem dodać, że dokonam edycji. Jakieś inne pomysły? –

+0

Upewnij się, że masz włączone zgłaszanie błędów, dzięki czemu możesz sprawdzić, czy wyświetla ostrzeżenia podczas wywoływania funkcji. –

+43

dlaczego ta odpowiedź jest akceptowana? – fartagaintuxedo

13

Czy istnieją wszystkie katalogi nadrzędne?

Jeśli nie, musisz włączyć rekurencji (zakładając PHP5 tutaj):

mkdir('/path/to/your/dir',0777,true); 

EDIT: Nie zobaczyć ukrytą komentarz mówiący, że każdy katalog z var spadkowy został ustawiony na światowym zapisu, więc założę się, że ścieżka do katalogu istnieje i powyższe nie będzie pomocne. Przepraszam!

+0

Wszystko dobrze, bałem się, że tak się dzieje, więc właśnie wprowadziłem zmianę do pierwotnego pytania. –

+0

To działa dla mnie. Wielkie dzięki! –

+0

Miło widzieć siedmioletnią odpowiedź nadal pomaga ludziom! – ajm

-3

Musisz wziąć atrybut w cudzysłowie:

mkdir('path/to/your/dir','0777'); 
+8

nie, parametr '$ mode' jest zdefiniowany jako ósemkowy int, więc ** nie należy ** umieszczać cudzysłowu wokół niego. – jordanstephens

+0

Tworzę katalog w ten sposób. I cała praca. – pltvs

2

Czy starasz się stworzyć te katalogi rekurencyjnie, jak byś zrobił z mkdir -p w wierszu polecenia? Jeśli tak, określ true jako trzeci parametr na mkdir.

I tylko po to, aby powtórzyć poprzednie sugestie, PROSZĘ podać komunikaty o błędach, które otrzymujesz. Jeśli nie otrzymujesz żadnych, użyj tego przed rozmową: error_reporting(-1); // ALL messages i ini_set('display_errors', 'On');.

+0

To prawie taki sam kod, jaki miałem na początku skryptu. Z wyjątkiem zamiast -1 miałem to. Czy to ma być -1? Miałem ini_set ('display_errors', 1); error_reporting (E_ALL | E_STRICT) Czy powinienem używać -1 zamiast tego? 1 zawsze działało w przeszłości, wyświetlając błędy. –

+0

To jest trochę maska, więc -1 zasadniczo jest takie samo jak "wszystkie bity ustawione" dla unsigned int. Efekt będzie taki sam. Jeśli w jakiejś przyszłej wersji dodadzą kolejną stałą "E_XXX", która nie jest zawarta w 'E_ALL', to' -1 'i tak ją zawrze. Zależy od tego, co lubisz najbardziej. – janmoesen

0

Czy próbowałeś/aś z możliwie najkrótszym testem?

mkdir ("katalog", 0777);

Jeśli to nie zadziała chciałbym spróbować tworzenia ze standardowym jak chmod 0755 (jest to całkowicie losowe przypuszczenie, być może serwer nie pozwoli na stworzenie 0777 za pośrednictwem PHP)

jeśli to nie działa I powiedziałbym, że serwer prawdopodobnie potrzebuje innej konfiguracji/php nie robi prawa do zapisu w folderze, może mógłbyś zapytać swojego dostawcę hosta?

1

Mam podobny problem i dowiedziałem się, że nie mam na moim dysku wolnej przestrzeni . Sprawdź komendą df (w systemie Linux), jak pełny jest twój dysk. Możliwe, że root może tworzyć pliki i foldery w tej sytuacji, ponieważ wcześniej zarezerwował miejsce.Jeśli uruchomisz skrypt z wiersza poleceń jako użytkownik root - nie ma błędu, ale jeśli skrypt jest uruchamiany przez apache, wystąpi błąd.