这很奇怪,有时是有效的,有时也不行。
我把link()的参数放在var_dumps上。
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
在目标名称中为_区分空格没有帮助。
谢谢!
答案 0 :(得分:1)
好吧,似乎问题是它需要对第一个文件(存在的文件)的写权限,我不知道为什么。
答案 1 :(得分:0)
对于我的情况,我发现需要执行以下额外步骤,因为我会定期更新特定的tarball以供其他人下载,并且我在PHP中为每个HTTP客户端的那些tarball创建单独的硬链接,以便URL被随机化。换句话说,我为PHP的每个访问者动态创建一个不同的硬链接。当我从旧操作系统迁移到更新的操作系统(OpenSuSE 13.1)时失败了。这是我的方法。
这种方法的优点是文件可以由普通用户拥有,但是&#34; www&#34; group可以修改文件,HTTP服务器可以创建硬链接,因为它们是组可写的。将文件上传到服务器的用户不需要在HTTP服务器组中,因为&#34; BSD语义&#34;组所有权继承。 (参见man 2 stat。)