2015-11-06 14 views
9

EDIT 1Zapis do folderu tmp

To pytanie wiąże się użytkownikowi MANGOPAY API. Mój problem polega na tym, że nie mogę napisać interfejsu API do folderu tmp.

Udało mi się przekonać API do napisania do http://fakedomain.com/apifolder/blank.txt i uzyskania odpowiedniego wyniku.

Następnie uruchomiłem skrypt http://fake.com/apifolder/demos/iswrite.php na http://fakedomain.com/apifolder/blank.txt, aby mieć minimalny działający kod, który mógłbym przetestować w folderze tmp. Oto kod w skrypcie:

<?php 

$filename = 'blank.txt'; 


echo "<br>"; 


file_exists($filename); 

echo "<br>"; 



if (file_exists($filename)) { 
    echo "The file $filename exists"; 
} else { 
    echo "The file $filename does not exist"; 
} 

echo "<br>"; 

if (is_writable($filename)) { 
    echo 'The file is writable'; 
} else { 
    echo 'The file is not writable'; 
} 

?> 

Daje mi wyjście

The file blank.txt exists The file is writable

więc wszystko dobrze tam. I stworzył następujący plik z następującymi uprawnieniami korzystających Filezilla:

enter image description here

W skrypcie http://fake.com/apifolder/demos/iswrite.php Zmieniłem nazwę pliku do zmiennej $filename = 'http://fake.com/tmp/creative/blank.txt';. Daje mi następujący wynik:

The file http://fake.com/tmp/creative/blank.txt does not exist The file is not writable

Również allow_url_fopen jest włączony.

Nie w pełni rozumiem strukturę adresów URL, więc może problem leży w tym miejscu? Folder tmp, do którego próbuję uzyskać dostęp, znajduje się na tym samym poziomie, co folder public_html. Może piszę błędnie moje adresy URL?

enter image description here

Put w inny sposób, czy folder tmp muszą znajdować się poza folderu public_html? Czy miałby to jakiś cel? Czy mogę utworzyć własny folder tmp w obrębie public_html, gdzie to już działa?


oryginalne pytanie

Oryginalny pytanie zostało źle napisane. Zobacz EDIT 1

Gram z piaskownicą API (MangoPay). Zawarłem moje ClientId i ClientPassword, które wydają się działać.

API mówi również ...

Należy również ustawić ścieżkę do folderu w $ API-> config-> TemporaryFolder że SDK musi przechowywać pliki tymczasowe. Ta ścieżka powinna znajdować się poza Twoim folderem www pod adresem . Może to być/tmp/lub/var/tmp/lub dowolna inna lokalizacja , do której PHP może pisać.

Stworzyłem jeden na:

ftp://[email protected]/tmp/fakefoldername

Używam skrypt php z mojego pulpitu za pomocą terminala. Wyjście to daje mi to

Nie można utworzyć lub zapisać do pliku ftp://[email protected]/tmp/fakefoldername

chociaż mam ustawić uprawnienia do 777.

jakiś pomysł, dlaczego ja dostaję ten błąd?

+1

Z jakiego systemu operacyjnego korzystasz? –

+0

@ Fred-ii- Używam Linuksa z CPanel –

+1

Dzięki. Dodałem odpowiedni tag i usunąłem "http", jeśli to jest w porządku. Może to pomóc w uzyskaniu lepszej ekspozycji i związanej z tym systemem operacyjnym. –

Odpowiedz

1

Ogólnie mówiąc, katalog tymczasowy powinien znajdować się na tym samym komputerze, co kod. Korzystanie z FTP jest mniej niż idealne. Nie możesz użyć lokalnego katalogu?

Zauważysz w dokumentacji MangoPay pokazuje lokalny reż:

https://github.com/Mangopay/mangopay2-php-sdk

$api->Config->TemporaryFolder = '/some/path/'; 

Powinieneś raczej trzymać się, że zamiast używać do zdalnego serwera za pośrednictwem protokołu FTP.

+0

Pomimo mojego słabego sformułowania, wierzę, że rozumiesz, co robiłem źle tutaj. Czy będzie możliwe sprawdzenie mojej edycji i potwierdzenie moich podejrzeń? (patrz dół edycji pogrubioną czcionką). Dzięki! –

+0

Aby odpowiedzieć na twoje inne pytania: ten folder 'tmp' zawiera pliki, które * nie * powinny być widoczne z sieci (np. Niewidoczne dla użytkowników w przeglądarce), ponieważ zawierają treści, których użytkownicy nie mają aby móc uzyskać dostęp. Umieszczenie go obok folderu 'public_html' jest w porządku, ale nie spodziewaj się, że będziesz mieć do niego dostęp w ten sposób' http: // fake.com/tmp/', ponieważ nie jest to przeznaczenie folderu tmp. – Ian

+0

Ponadto, zgodnie z ich dokumentacją, jeśli masz piaskownicę, katalog 'tmp' musi być inny niż twoja strona bez piaskownicy, więc w razie potrzeby utwórz dwa różne katalogi' mp'. – Ian

0

out-of-the-box maszyna Linux Ubuntu 14.04 ma następujące użytkowników i uprawnień ustawienia

drwxrwxrwt 13 root root 4096 nov 9 00:56 tmp// 

a katalog atrapę

drwxrwxr-x 2 eric eric 4,0K nov 9 00:49 fakefoldername/ 

W przypadku włączenia do 777 zgody zestawie (jak już powiedziałeś, zrobiłeś już to), to będzie

Należy zwrócić uwagę, że jeśli użyjesz chmod 777 fakefoldername, zmienisz zestaw uprawnień do katalogu, nie dotykając żadnego z plików/katalogów w fakefoldername (użyj chmod -R 777 fakefoldername). Inną kwestią do zapamiętania jest to, że katalogi prowadzące do fakefoldername również muszą mieć wystarczającą ilość permów. W tym konkretnym przypadku należy sprawdzić, czy /tmp folder ma je naprawić w razie potrzeby

sudo chmod 1777 tmp/ 

Ponadto, jak wskazano powyżej, chciałbym spróbować zrobić inny katalog w /var katalogu i zobaczyć, jak się sprawy mają następnie (AN miłą odpowiedź dlaczego do lub nie do wyboru /var/tmp ponad /tmphere).

Dla innych: SDK, który jest używany jest prawdopodobnie https://github.com/Mangopay/mangopay2-php-sdk

Nie może być kilka wskazówek w nieco podobnej odpowiedzi poniżej:

5

jestem zgadywanie danej biblioteki to this one, a błąd, który otrzymujesz, to this exception:

if (!is_writable($this->GetPathToTemporaryFolder())) 
      throw new \MangoPay\Libraries\Exception('Cannot create or write to file ' . $this->GetPathToTemporaryFolder()); 

Więc w zasadzie wydaje się być debugowania wezwanie do is_writable().

  1. upewnić allow_url_fopen jest
  2. w stosownych przypadkach, upewnij się, że URL includes the FTP password
  3. upewnij się, że folder istnieje i konto FTP ma uprawnienia do zapisu (777 powinno wystarczyć ...)
0

Najprawdopodobniej twój apache nie ma uprawnień do napisania tego folderu, musisz być pewien, że tworzysz ten katalog z tym samym użytkownikiem (w twoim przypadku, apache), a także chmod.