2013-07-15 3 views
1

Это странно, иногда работает, иногда это не так.ссылка() операция не разрешена

Я поместил var_dumps аргументов link().

string(35) "/printbox/web/repo/docusearch/5.pdf" 
string(82) "/printbox/web/repo/hardlink/Oleaginosa Moreno Hnos. S.A._20130715_000532989552.pdf" 

__

A PHP Error was encountered 

Severity: Warning 

Message: link(): Operation not permitted 

Filename: controllers/ct_form_procesar_escaneos.php 

Line Number: 178 

__

string(35) "/printbox/web/repo/docusearch/6.pdf" 
string(77) "/printbox/web/repo/hardlink/MOLINOS RIO DE LA PLATA_20130715_000533396947.pdf" //THIS WORKED !!! 

__ ВЫШЕ не РАБОТАЛ (никакой ошибки здесь и в самом деле была создана жесткая ссылка)

string(35) "/printbox/web/repo/docusearch/7.pdf" 
string(77) "/printbox/web/repo/hardlink/RENOVA TIMBUES VICENTIN_20130715_000533520657.pdf" 

_ _

A PHP Error was encountered 

Severity: Warning 

Message: link(): Operation not permitted 

Filename: controllers/ct_form_procesar_escaneos.php 

Line Number: 178 

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

<?php 
echo "Hi"; 
link('/printbox/web/repo/docusearch/7.pdf', '/printbox/web/repo/hardlink/RENOVA TIMBUES VICENTIN_20130715_000533520657.pdf'); 
?> 

журнала Апача:

[Mon Jul 15 13:41:57 2013] [error] [client 192.168.100.204] PHP Warning: link(): Operation not permitted in /printbox/web/repo/a.php on line 3 

Просеивание пробелов для _ в названии назначения не помогло.

Спасибо!

+0

Какая операционная система? – bansi

+0

Сервер Debian, – JorgeeFG

+0

проверьте, существует ли жесткая ссылка. Если жесткая ссылка не обязательна, попробуйте использовать 'symlink()' – bansi

ответ

1

Ну, кажется, проблема в том, что для первого файла (того, который существует) необходимы права на запись, я не знаю почему.

0

Для моей ситуации я обнаружил, что необходимы следующие дополнительные шаги, потому что я регулярно обновляю определенные файлы tarball для загрузки другими людьми, и я создаю отдельные жесткие ссылки в PHP для этих tarball для каждого HTTP-клиента, чтобы URL-адрес был рандомизирован. Другими словами, я динамически создаю другую жесткую ссылку в PHP для каждого посетителя на веб-сайте. Это не удалось, когда я перешел от старой ОС к более новой ОС (OpenSuSE 13.1). Вот мой метод.

  1. Сделать родительский каталог ссылки link() с разрешением chmod u = rwx, g = rxs, o = rx. Это должно отображаться в «ls» как «drwxr-sr-x». В этом случае владельцем user.group является wwwrun.www.
  2. Загрузите файлы tarball на сервер с разрешения chmod u = rw, g = rw, u = r. Затем эти файлы наследуют групповое владение «www» из родительского каталога.
  3. Создайте несколько жестких ссылок в PHP со ссылкой() из другого каталога, который принадлежит user.group = wwwrun.www для целевых файлов. Это разрешено, поскольку файл записывается группой «www», а групповое владение наследуется от родительского каталога.

Преимущество этого метода заключается в том, что файлы могут принадлежать обычным пользователям, но группа «www» может изменять файлы, а HTTP-сервер может создавать жесткие ссылки, поскольку они являются группами, пригодными для записи , Пользователь, загружающий файлы на сервер, не обязательно должен находиться в группе HTTP-сервера из-за «семантики BSD» наследования группового владения. (См. Man 2 stat.)

Смежные вопросы