Zend Framework

Uncaught exception 'Zend_Search_Lucene_Exception' with message 'chmod(): Operation not permitted

Details

  • Type: Bug Bug
  • Status: Resolved Resolved
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: None
  • Fix Version/s: 1.6.0
  • Component/s: Zend_Search_Lucene
  • Labels:
    None
  • Fix Version Priority:
    Must Have

Description

Hi,

When I try to re-create the index, I get this error. Let me know what to do? I'm using ZendFramework-1.0.3.

PHP Fatal error: Uncaught exception 'Zend_Search_Lucene_Exception' with message 'chmod(): Operation not permitted' in ~/Zend/Search/Lucene/Storage/Directory/Filesystem.php:189
Stack trace:
#0 /var/www/daedalus/htdocs/kishore/bioethics3/Zend/Search/Lucene.php(210): Zend_Search_Lucene_Storage_Directory_Filesystem->createFile('index.lock')
#1 Zend/Search/Lucene.php(171): Zend_Search_Lucene->__construct('/var/www/daedal...', true)
#2 createindex.php(16): Zend_Search_Lucene::create('/var/www/kishore/...')
#3 {main}
thrown in Zend/Search/Lucene/Storage/Directory/Filesystem.php on line 189

I actually wrote a php script to create index, which is being called by a cron file.

I will appreciate if someone gives me a solution.

Thanks,
Kishore

Issue Links

Activity

Hide
Matthew Ratzloff added a comment -

The problem is that it is using chmod() instead of umask(), which is probably a bad thing for a library to do. This is bad when the owner of the file is not the server user (e.g., publisher:apache or publisher:www) but you do not want to give the user (in this example, publisher) sudo rights so that it can change ownership to apache:apache.

What this should do is umask() in Zend_Search_Lucene_Storage_File_Filesystem prior to the fopen() call (which is passed w+b to create the file if it does not exist). The umask should be 0111 (for the default of 0666):

$previousUmask = umask(0111);
...fopen(...);
umask($previousUmask);

The call to chmod() should be removed, or at least there should be a call to fileperms() first to see if the permissions are correct. By correct, I mean between 0660 and 0777. I'm not sure why the default is 0666.

Show
Matthew Ratzloff added a comment - The problem is that it is using chmod() instead of umask(), which is probably a bad thing for a library to do. This is bad when the owner of the file is not the server user (e.g., publisher:apache or publisher:www) but you do not want to give the user (in this example, publisher) sudo rights so that it can change ownership to apache:apache. What this should do is umask() in Zend_Search_Lucene_Storage_File_Filesystem prior to the fopen() call (which is passed w+b to create the file if it does not exist). The umask should be 0111 (for the default of 0666):
$previousUmask = umask(0111);
...fopen(...);
umask($previousUmask);
The call to chmod() should be removed, or at least there should be a call to fileperms() first to see if the permissions are correct. By correct, I mean between 0660 and 0777. I'm not sure why the default is 0666.
Hide
Alexander Veremyev added a comment -

Fixed.

PS Matthew, there was an idea to use umask, but it has problems in multi-threaded environment. See also discussion at ZF-2779.

Show
Alexander Veremyev added a comment - Fixed. PS Matthew, there was an idea to use umask, but it has problems in multi-threaded environment. See also discussion at ZF-2779.
Hide
Wil Sinclair added a comment -

Updating for the 1.6.0 release.

Show
Wil Sinclair added a comment - Updating for the 1.6.0 release.

People

Vote (2)
Watch (3)

Dates

  • Created:
    Updated:
    Resolved: