file_get_contents работает, но file_put_contents нет

#php

#php

Вопрос:

Я на win7, xampp. Это работает:

 $path = '../HOME/01.html';  
$cnt = file_get_contents($path);
echo $cnt;
  

Это не работает:

 $path = '../HOME/01.html'; 
$cnt = 'lorem ipsum';       
file_put_contents($path, $cnt);
  

Ошибки или предупреждения нет, просто 01.html нет содержимого.

Комментарии:

1. надеюсь, что это не фактический код, поскольку в нем есть синтаксические ошибки

2. У вас есть разрешение на запись там? HOME действительно все заглавные буквы?

3. @chiliNUT — HOME это все заглавные буквы. Разрешение — я устанавливаю его, щелкнув правой кнопкой мыши HOME - Properties - ... all permissions to all users

Ответ №1:

Как вы можете видеть на странице руководства:

Эта функция возвращает количество байтов, которые были записаны в файл, или FALSE при сбое.

Вы должны убедиться, что возвращаемое значение не false :

 if (file_put_contents($path, $cnt) === false) {
    // handle error
}
  

Однако я бы предположил, что в подавляющем большинстве случаев отсутствуют разрешения на запись в файл. К счастью, в PHP есть функция для проверки этого:

 if (!is_writable($path)) {
    // No permission to write
}
  

Итак, объединив эти два, вы могли бы сделать что-то вроде:

 if (file_put_contents($path, $cnt) === false) {
    if (!is_writable($path)) {
        return "You do not have permission to write to $path";
    }
    return "An unknown error occurred while writing to $path";
}
return "successfully wrote to $path";