Fwrite ничего не делает при попытке записать источник HTML в виде строки в файл - PullRequest
0 голосов
/ 10 августа 2011
public function save(){
        $currentPage    = $_SESSION['current_page'];
        $content        = $this->input->get_post("page_content");   // html content
        $path           = $this->paths('pages');    
        $page           = $this->pages->db_get(array("id"=>$currentPage), true);

        //echo $path . $page['filename'];
        if(!is_dir($path)){
            $fileHandle = fopen($path . $page['filename'] , 'w');
            if(!fwrite($fileHandle, $content)) {
                $this->errors[] = "Error saving page";
            }
            fclose($fileHandle);
        }


echo json_encode($this->errors);
}

Я получаю исходный файл html через запрос POST ajax, который затем я хочу записать в файл в виде строки. Закомментированная строка будет повторять */home/sajt/public_html/application/data/users/kobra@kobras.net/websites/kobra/pages/glavna.php*, которая существует на сервере. Я верю и проверил, что $ path, $ page и $ content имеют правильные значения, необходимые после повторения $ path. $ page ['filename'] возвращает действительный путь к файлу, но все равно ничего не происходит, то есть ничего не пишется. Что мне здесь не хватает?

Разрешения родительского каталога:

drwx------    5 sajt       sajt             4096 Aug  9 04:20 .
drwx------    3 sajt       sajt             4096 Aug  9 04:20 ..
drwxr-xr-x    2 sajt       sajt             4096 Aug  9 04:20 header
drwxr-xr-x    2 sajt       sajt             4096 Aug  9 04:20 pages
drwxr-xr-x    2 sajt       sajt             4096 Aug  9 04:20 uploads

Справочник "страниц" прав доступа:

drwxr-xr-x    2 sajt       sajt             4096 Aug  9 04:20 .
drwx------    5 sajt       sajt             4096 Aug  9 04:20 ..
-rw-r--r--    1 sajt       sajt                0 Aug  9 13:20 glavna.php
-rw-r--r--    1 sajt       sajt             1450 Aug  9 04:20 kontakt.php

1 Ответ

1 голос
/ 10 августа 2011
    if(!is_dir($path)){

вы явно указываете сценарию пропустить весь бизнес fopen / fwrite, потому что при написании вашего кода все, что находится в $ path, ДОЛЖНО быть каталогом.

Скорее всего, вы просто хотите

if (is_dir($path)) {
    ^--- no !
...