Php 使用Zend_Search_Lucene fopen失败.fnm文件

Php 使用Zend_Search_Lucene fopen失败.fnm文件,php,zend-framework,lucene,zend-search-lucene,Php,Zend Framework,Lucene,Zend Search Lucene,我在一个独立的项目中使用Zend_Search_Lucene,它不基于ZF。我成功地为内容编制了索引,并对其进行了搜索,但问题是它无法创建.fnm文件 这是我正在使用的代码 Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8()); Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding

我在一个独立的项目中使用Zend_Search_Lucene,它不基于ZF。我成功地为内容编制了索引,并对其进行了搜索,但问题是它无法创建.fnm文件

这是我正在使用的代码

Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8');
Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive());

$this->index = Zend_Search_Lucene::create(self::PATH_INDEX);

$doc = new Zend_Search_Lucene_Document();

$doc->addField(Zend_Search_Lucene_Field::keyword('id',$content['id'],'UTF-8'));
$doc->addField(Zend_Search_Lucene_Field::text('summary',$summary,'UTF-8'));
$doc->addField(Zend_Search_Lucene_Field::keyword('module',$module,'UTF-8'));

$this->index->addDocument($doc);
我也试过了

$doc->addField(Zend_Search_Lucene_Field::keyword('module',utf_encode($module),'UTF-8'));
我的内容是可搜索的,但我不知道为什么它不创建fnm文件,它创建其他文件,如cfs文件和fdx、锁、段…等等,所以这不是目录或权限问题,我想问题在于锁

这是个例外

Fatal error: Uncaught exception 'Zend_Search_Lucene_Exception' with message 'fopen(dict/_1.fnm): failed to open stream: No such file or directory' in Zend/Search/Lucene/Storage/File/Filesystem.php on line 67

Zend_Search_Lucene_Exception: fopen(dict/_1.fnm): failed to open stream: No such file or directory in Zend/Search/Lucene/Storage/File/Filesystem.php on line 67

Call Stack:
    0.0882    7819976   1. Zend_Search_Lucene_Proxy->__destruct() Zend/Search/Lucene/Proxy.php:0
    0.0882    7819976   2. Zend_Search_Lucene->removeReference() Zend/Search/Lucene/Proxy.php:63
    0.0882    7819976   3. Zend_Search_Lucene->_close() Zend/Search/Lucene.php:607
    0.0882    7819976   4. Zend_Search_Lucene->commit() Zend/Search/Lucene.php:569
    0.0882    7819976   5. Zend_Search_Lucene_Index_Writer->commit() Zend/Search/Lucene.php:1419
    0.0882    7819976   6. Zend_Search_Lucene_Index_SegmentWriter_DocumentWriter->close() Zend/Search/Lucene/Index/Writer.php:757
    0.0882    7819976   7. Zend_Search_Lucene_Index_SegmentWriter->_dumpFNM() Zend/Search/Lucene/Index/SegmentWriter/DocumentWriter.php:212
    0.0882    7820112   8. Zend_Search_Lucene_Storage_Directory_Filesystem->createFile(???) Zend/Search/Lucene/Index/SegmentWriter.php:280
    0.0882    7820912   9. Zend_Search_Lucene_Storage_File_Filesystem->__construct(???, ???) Zend/Search/Lucene/Storage/Directory/Filesystem.php:184

非常感谢您的帮助

将目录设置为绝对目录后,所有帮助最终都能正常工作。

您是否有意省略了异常消息的其余部分?冒号
fopen(indices/\u 1.fnm)后面应该有相关文本:
关于
fopen()
失败的原因。@MikeB用堆栈跟踪更新了它如果有任何帮助,我已经调试了Zend\u Search\u Lucene\u Storage\u File\u文件系统中创建文件的\uu construct()方法,它首先成功创建了\u 0.fnm,但随后尝试创建_1.fnm并失败,尽管两者都位于同一目录中,且模式为“w+b”。唯一的区别是文件名@MikeBAny你能用pass/fail打印构造方法的参数吗?类似于
$filename=dict/_0.fnm,$mode='r+b',success
$filename=dict/_1.fnm,$mode='r+b',fail
。。我不能重新创建它,否则我会自己调试它。一旦你把这件事确定下来。。尝试使用同一目录中的一个新文件自己执行此操作,该目录仅尝试执行以下操作:
success:$filename='dict/_0.fnm',$mode='w+b',fail:$filename='dict/_1.fnm',$mode='w+b'@MikeB我将使用相同的参数尝试fopen,在创建_1.fnm及其相同的rwx之前,我还检查了dict的权限