PHP fopen возвращает ноль для файлов, которые нормально работают с include и get_file_contents - PullRequest
4 голосов
/ 11 марта 2010

У меня XAMPP установлен на сервере Windows 2000. все работает отлично, кроме функции PHP fopen. Я не могу ни создавать, ни открывать файлы с ним. странно то, что я могу включить / require / file_get_contents / другие функции, связанные с файлами; Кроме того, fopen не генерирует никаких ошибок или уведомлений, просто возвращает NULL.

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

Я пробовал это на php 5.2.9, 5.2.13 и 5.3.1 с тем же эффектом. я просмотрел файл php.ini в поисках чего-то, что его нарушает; Я даже пытался удалить и использовать основной INI-файл из Linux-коробки, где работает FOPEN и до сих пор ничего.

Я знаю, что должен перезапустить apache после изменения моего ini и всего того, что было (я даже перезапустил сервер), так что это не так.

Я нахожусь в этой позе, предполагая, что это проблема конфигурации Apache, завтра я собираюсь запустить тест через php-cli, чтобы убедиться.

Я действительно не хочу больше ломать голову из-за этого, может ли какой-нибудь apache / php волшебник прийти мне на помощь?


Привет, ребята,

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

для записи вот что я делал, что не работало:

$test_file = 'c:\\test.csv';//everybody has full control. is very large.
    if(file_exists($test_file) && is_readable($test_file)){
        $fp = fopen($test_file, 'r');
        echo var_export($fp, true);//outputs NULL. on my linux box this is a number.
        if($fp !== false){
            //do the work
            fread($fp, 10);//throws the error that $fp is not a valid file handle
        }
    }

что-то, что я включаю, должно как-то нарушать fopen. работает, как и ожидалось, в новом файле без включений.

Ответы [ 2 ]

1 голос
/ 11 марта 2010

Спасибо за ответы. Вы правы, так как это не проблема конфигурации. Проблема должна быть с одним из моих dll или одним из моих включенных файлов. Я просто попробовал тот же код, который не работает в новом файле без включения, и я отключил свои пользовательские библиотеки, и это сработало.

для записи вот что я делал, что не работало:

$test_file = 'c:\\test.csv';//everybody has full control. is very large.
    if(file_exists($test_file) && is_readable($test_file)){
        $fp = fopen($test_file, 'r');
        echo var_export($fp, true);//outputs NULL. on my linux box this is a number.
        if($fp !== false){
            //do the work
            fread($fp, 10);//throws the error that $fp is not a valid file handle
        }
    }

что-то, что я включаю, должно как-то нарушать fopen. работает как положено в новом файле без включений.

0 голосов
/ 11 марта 2010

Итак, мы предполагаем, что вы используете такой код:

$fp = fopen( "my_file.txt", "r" );
$contents = fread($fp, filesize( "my_file.txt" ) );
fclose($fp);

Должен ли я считать, что функция filesize () возвращает ноль? Также попробуйте функцию stat ($ filename), чтобы увидеть, получаете ли вы относительно полный массив.

Дайте мне знать ваши результаты.

...