2014-09-02 23 views
7

Zrobiłem prostą stronę, która działa dobrze na localhost. Więc umieściłem go na serwerze IIS Windows 2008r2, a teraz moje skrypty PHP nie piszą już do moich plików JSON. Sprawdziłem serwer i zainstalowałem na nim PHP, więc nie wiem, co jest nie tak i gdzie szukać.Skrypty PHP zapisują do pliku na localhost, ale nie na serwerze IIS.

Nadal nie działa, więc pomyślałem, że wyjaśnię sytuację bardziej szczegółowo.

Ten skrypt działa na serwerze lokalnym, ale nie na serwerze IIS.

<?php 
$myFile = "../json/countries.json"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 
$stringData = json_encode($_POST["data"]); 
fwrite($fh, $stringData); 
fclose($fh) 
?> 

Próbowałem dodając:

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

i

chmod("../json/countries.json", 0644); 

do PHP, ale nie widać żadnych innych rezultatów ani żadnych błędów.

Oto funkcja javascript, która uruchamia proces, a wyprowadzenie obiektu do konsoli pokazuje poprawne dane do zapisania.

function saveJson(object, file) { 

console.log("Saving JSON data: " + JSON.stringify(object)); 

$.ajax 
({ 
    type: "POST", 
    dataType : 'json', 
    async: false, 
    url: file, 
    data: { data:object }, 
    success: function() {console.log("Thanks!"); }, 
    failure: function() {console.log("Error!");} 
}); 

}

Wciąż pliki json nie są zmieniane. Ktoś dobry z Windows Server i php, który może wiedzieć dlaczego?

Dzięki

+0

Jaki komunikat o błędzie został otrzymany? Jaka część skryptu nie działa. część otwarta lub część do zapisu. Czy próbowałeś używać IIS jako administratora? –

+0

Nie masz uprawnień do serwera innego niż łączenie się z nim za pomocą Pulpitu zdalnego. I nie otrzymuję żadnego komunikatu o błędzie. Dane nie są zapisywane do pliku. – thehindutimes

+0

Czy masz wystarczające uprawnienia do zapisu pliku? –

Odpowiedz

3

Tego rodzaju problem występuje, ponieważ tylko trzy przyczyny:

  1. nie mają odpowiedniego katalogu owner.Ex: - w Apache domyślny użytkownik www: dane.
    • Najpierw sprawdź właściciela katalogu.
  2. Nie masz wystarczających uprawnień do zapisu do katalogu, to znaczy 755
    • Sprawdź katalog pozwolenie
  3. ścieżka jest niepoprawna do katalogu do zapisu lub przesłać plik.
    • Sprawdź ścieżkę do katalogu, w którym zapisujesz plik.

Według dokumentu php Installation on Windows systems domyślny użytkownik IUSER

Stąd trzeba ustawić właściciel katalogu 'IUSR' jest częścią IIS_IUSRS grupa, jeśli jej nie działa, spróbuj ustawić 'IIS AppPool\{YouApplicationPoolName}' from IIS AppPool\DefaultAppPool Przykł. na przykład IIS AppPool\yourdomain.com. To ustawienie jest wymagane w przypadku usług IIS8.

  1. Najpierw spróbuj zmienić właściciela na IUSER. Powinno działać zgodnie z dokumentem php.
  2. Ustaw uprawnienia do zapisu dla katalogu.

Jak zmienić uprawnienia katalogu & grupa użytkowników w systemie Windows.

Rightclick on directory->security->edit 

Proszę sprawdzić załączony zrzut ekranu.

Change user group & permission

+0

Brzmi jak znasz swoje rzeczy! Gdzie sprawdzasz krok 1? – thehindutimes

+0

@thehidutimes Dodano zrzut ekranu dla twojego zapytania. Przejdź do swojego serwera przy użyciu zdalnego udostępniania pulpitu –

+0

lub poproś administratora systemu o wykonanie tej operacji –

0
  1. Jaka wersja PHP używasz. Jeśli jest mniejsza niż 5,2, funkcja kodowania Json może nie działać. Użyj phpinfo(), aby się dowiedzieć.

  2. Możliwe również, że $ _POST ["dane"] nie istnieje. spróbuj wstawić tablicę, aby zobaczyć, czy to jest problem. Podobnie jak: array (1,2,3);

  3. Również, jeśli nie są wyświetlane żadne ostrzeżenia, użyj: error_reporting (E_ALL); LUB zgłaszanie_błędów (-1); u góry skryptu. Możliwe, że gospodarz wyłącza te błędy. pozwoli to zobaczyć, na czym polega problem.

  4. Host ma również możliwość dezaktywacji niektórych funkcji PHP. Skontaktuj się z obsługą klienta dotyczącą tego problemu. Chociaż uważam za bardzo mało prawdopodobne, że dezaktywują te, z których korzystasz.

  5. Upewnij się, że plik istnieje w stosunku do miejsca, w którym wykonywany jest kod PHP. Jeśli to jest problem, polecenie die powinno zostać uruchomione. Możesz zobaczyć, że plik istnieje za pomocą:

    if (file_exists ($ filename)) echo "plik istnieje";

    else echo "plik nie istnieje";

Jeśli żadna z powyższych czynności nie mam pojęcia! Przepraszam.

+0

OK, dzięki. Spróbuję tego. Próbowałem otworzyć skrypt php w przeglądarce, wpisując do niego adres URL, a to dało mi komunikat polecenia kości. Czy to oznacza, że ​​punkt 5 może być problemem? – thehindutimes

+0

Tak! Upewnij się, że plik istnieje w stosunku do twojego pliku. –

+0

Zmieniono $ myFile = "json/countries.json"; do $ myFile = "../json/countries.json"; ale nadal nie działa. Skrypty php znajdują się w folderze php, a json w folderze json. – thehindutimes

0

Dodaj IIS_IUSRS z dostępem "Execute listy, czytać" na karcie zabezpieczeń na nieruchomościach.