这很奇怪,有时起作用,有时不起作用。
我把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');
?>Apache的日志:
[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在目标名称中对_的分隔空间没有帮助。
谢谢!
发布于 2013-07-15 18:08:14
问题似乎在于它需要对第一个文件(存在的文件)拥有写权限,我不知道为什么。
发布于 2014-10-05 03:16:58
对于我的情况,我发现需要执行以下额外步骤,因为我定期更新特定的tarball供其他人下载,并在PHP中为每个HTTP客户端创建指向这些tarball的单独硬链接,以便URL是随机的。换句话说,我动态地为每个访问网站的访问者在PHP中创建了一个不同的硬链接。当我从旧操作系统移到新操作系统(OpenSuSE 13.1)时,这个问题失败了。这是我的方法。
这种方法的优点是文件可以由普通用户拥有,但是"www“组可以修改文件,而HTTP服务器可以使硬链接成为可写组。由于组所有权继承的"BSD语义“,上传文件到服务器的用户不需要在HTTP服务器的组中。(见man 2 stat)
https://stackoverflow.com/questions/17659409
复制相似问题