PHP - запись файла - Отказано в доступе для одного сценария, но не для другого в том же каталоге - PullRequest
0 голосов
/ 08 сентября 2011

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

failed to open stream: Permission denied

ошибка.

Мой правильно исполняемый скрипт просто:

try {
    $printer = new PDFPrinter();
    $FDFData = $printer->assembleFDFData(5);
    $fdf_file = $printer->writeFDFFile($FDFData);
    $printer->downloadForm($fdf_file);
}catch(Exception $e) {
    echo $e->getMessage();
}

и мой тестовый код:

    function setUp() {
        $this->printer = new PDFPrinter();
        $this->FDFData = $this->printer->assembleFDFData(5);
    }

    function testWrite() {
        try {
            $this->printer->writeFDFFile($this->FDFData);
            $this-assertTrue(true);
        } catch(Exception $e) {
            $this->assertTrue(false);
        }
    }

Я знаю, что тестовый код testWrite плох, но я просто хочу, чтобы он прекратил выдавать это исключение первым.

Сценарий выдает исключение при выполнении метода writeFDFFile($this->FDFData);, когда пытается открыть файл для записи. Это код, который не работает:

$fp=fopen($fdf_file,'w')

Я не понимаю, как 2 файла в одном каталоге с одинаковыми разрешениями могут работать по-разному при выполнении одного и того же кода.

Что я мог делать не так?

Большое спасибо

1 Ответ

1 голос
/ 08 сентября 2011

Как вы запускаете стандартный и тестовый код?Возможно, вы запускаете стандартный код через apache (открытый в браузере), но тестируете код напрямую через php (запускайте из IDE).И, возможно, у apache есть разрешения, а у php нет.И, возможно, рабочая директория отличается ($ fdf_file содержит абсолютный путь?).

Обратите внимание, что «не удалось открыть поток: отказано в доступе» - это предупреждение (не фатальная ошибка), и при запуске стандартного кода это предупреждение неостановить исполнение.Но PHPUnit преобразует предупреждения в исключения, и это предупреждение останавливает выполнение при запуске кода в PHPUnit.

...