fopen вызывает ошибку. Длина пути файла > 255

frost18

Новичок
Warning: fopen(I:/home/test/www/catalogue/zip_zap_chasti_i_komplektuyuschie_kabeli_bloki_pitaniya_i_tp/zip_dlya_skanerov_shtrihkoda/bloki_pitaniya_dlya_skanerov_shtrihkoda/opticon/blok_pitaniya_5v_dlya_skanera_rs232_opticon_opl6735opl7736nft1195nft7175nlb9665_1587.html) [function.fopen]: failed to open stream: No such file or directory in I:\home\test\www\admin\_iblocks.php on line 226

Подскажите как можно решить эту проблему? к сожалению имя файла или папок я не могу поменять. Пробовал указывать относительный путь с установкой корневого каталога функцией chdir, не помогло, ошибка все равно остается.

К примеру так пробывал
PHP:
   chdir(REAL_DOCS_PATH.'/admin/catalogue/zip_zap_chasti_i_komplektuyuschie_kabeli_bloki_pitaniya_i_tp/zip_dlya_skanerov_shtrihkoda/bloki_pitaniya_dlya_skanerov_shtrihkoda/opticon/');
        $dd = fopen('blok_pitaniya_5v_dlya_skanera_rs232_opticon_opl6735opl7736nft1195nft7175nlb9665_1587.html', 'w+');
        fwrite($dd, 'teeeest');
        fclose($dd);
 

tony2001

TeaM PHPClub
Код один, а варнинг - явно от другого кода.
Чему верить? Коду или варнингу?
 

frost18

Новичок
PHP:
    if(isset($_POST['html_test'])){
        //chdir(REAL_DOCS_PATH.'/admin/catalogue/zip_zap_chasti_i_komplektuyuschie_kabeli_bloki_pitaniya_i_tp/zip_dlya_skanerov_shtrihkoda/bloki_pitaniya_dlya_skanerov_shtrihkoda/opticon/');
        $dd = fopen('/admin/catalogue/zip_zap_chasti_i_komplektuyuschie_kabeli_bloki_pitaniya_i_tp/zip_dlya_skanerov_shtrihkoda/bloki_pitaniya_dlya_skanerov_shtrihkoda/opticon/blok_pitaniya_5v_dlya_skanera_rs232_opticon_opl6735opl7736nft1195nft7175nlb9665_1587.html', 'w+');
        fwrite($dd, 'teeeest');
        fclose($dd);
    }
Вызовет ошибки
Warning: fopen(/admin/catalogue/zip_zap_chasti_i_komplektuyuschie_kabeli_bloki_pitaniya_i_tp/zip_dlya_skanerov_shtrihkoda/bloki_pitaniya_dlya_skanerov_shtrihkoda/opticon/blok_pitaniya_5v_dlya_skanera_rs232_opticon_opl6735opl7736nft1195nft7175nlb9665_1587.html) [function.fopen]: failed to open stream: No such file or directory in I:\home\marketop\www\admin\_iblocks.php on line 226

Warning: fwrite() expects parameter 1 to be resource, boolean given in I:\home\marketop\www\admin\_iblocks.php on line 227

Warning: fclose() expects parameter 1 to be resource, boolean given in I:\home\marketop\www\admin\_iblocks.php on line 228
 

frost18

Новичок
К примеру этот код НЕ РАБОТАЕТ
PHP:
fopen('I:/home/marketop/www/admin/catalogue/zip_zap_chasti_i_komplektuyuschie_kabeli_bloki_pitaniya_i_tp/zip_dlya_skanerov_shtrihkoda/bloki_pitaniya_dlya_skanerov_shtrihkoda/opticon/blok_pitaniya_5v_dlya_skanera_rs232_opticon_opl6735opl7736nft1195nft7175nlb9665_1587.html', 'w+');
А этот РАБОТАЕТ!
PHP:
fopen('I:/home/marketop/www/admin/catalogue/zip_zap_chasti_i_komplektuyuschie_kabeli_bloki_pitaniya_i_tp/zip_dlya_skanerov_shtrihkoda/bloki_pitaniya_dlya_skanerov_shtrihkoda/opticon/blok_pitaniya_5v_dlya_skanera_rs232_opticon_opl6735opl7736nft1195nft7175nlb966.html', 'w+');
Сократил имя создаваемого файла на 6 символов, и все записалось
 

frost18

Новичок
Москва
Ни кто не знает почему у меня эта строчка не работает???
 

tony2001

TeaM PHPClub
Максимальная длина имени файла под виндой == 256
Это ограничение системного API, не PHP.
PHP в threadsafe сборке всегда открывает файлы с использованием абсолютного пути, поэтому chdir() не поможет.
Есть non-threadsafe сборки (http://windows.php.net/download/#php-5.3-nts-VC9-x86), они так не делают и chdir() там поможет.
 

baev

‹°°¬•
Команда форума

fixxxer

К.О.
Партнер клуба
Еще, как вариант, на ntfs есть подобие симлинков. :) junction point называются
 

frost18

Новичок
php я к сожалению не могу поменять на non-threadsafe что бы попробывать( Я вот попробывал как вариант создать этот файл в корне а потом функцией copy переместить в нужное место, и опять ошибка
PHP:
Warning: copy(catalogue/zip_zap_chasti_i_komplektuyuschie_kabeli_bloki_pitaniya_i_tp/zip_dlya_skanerov_shtrihkoda/bloki_pitaniya_dlya_skanerov_shtrihkoda/opticon/blok_pitaniya_5v_dlya_skanera_rs232_opticon_opl6735opl7736nft1195nft7175nlb9665_1587.html) [function.copy]: failed to open stream: No error in I:\home\marketop\www\admin\_iblocks.php on line 230
Ведь в ручную я же могу зайти в нужную директорию и создать там этот файл, почему же программно нельзя, должен же быть способ?
 

tony2001

TeaM PHPClub
в винде есть два API для этого - ANSI и юникодное.
ANSI - вот такое, кастрированное, а юникодное PHP не поддерживал никогда.
Пьер говорит, что у него это в todo; ему видней - он сам щас в M$ работает.
 

frost18

Новичок
Вот чудеса, у меня в денвере под виндой не получается, а на сервере попробывал под линуксом, все отлично создается, только с правами 0644, соответственно я не могу удалить файл. Подскажите я могу назначить другие права при создании нового файла?
 
Сверху