1

これは奇妙で、うまくいくこともあれば、うまくいかないこともあります。

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 !!!

__ ABOVE 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

私は本当にパターンを見つけることができません....そして、以前のパターンの1つを手動でテストするスクリプトを作成すると、失敗します:

<?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

宛先名の _ のストライピング スペースは役に立ちませんでした。

ありがとう!

4

2 に答える 2

2

問題は、最初のファイル (存在するファイル) に対する書き込み権限が必要なことにあるようですが、理由はわかりません。

于 2013-07-15T18:08:14.837 に答える
0

私の状況では、他の人がダウンロードできる特定の tarball を定期的に更新し、URL がランダム化されるように、HTTP クライアントごとにこれらの tarball への個別のハード リンクを PHP で作成しているため、次の追加手順が必要であることがわかりました。つまり、Web サイトへの訪問者ごとに異なるハード リンクを PHP で動的に作成します。これは、古い OS から新しい OS (OpenSuSE 13.1) に移行したときに失敗しました。これが私の方法です。

  1. link() ターゲットの親ディレクトリにパーミッション chmod u=rwx,g=rxs,o=rx を持たせます。これは、「ls」に「drwxr-sr-x」として表示されるはずです。この場合、user.group の所有権は wwwrun.www です。
  2. パーミッション chmod u=rw,g=rw,u=r で tarball ファイルをサーバーにアップロードします。これらのファイルは、親ディレクトリからグループ所有権「www」を継承します。
  3. user.group=wwwrun.www が所有する別のディレクトリからターゲット ファイルへの link() を使用して、PHP で複数のハード リンクを作成します。ファイルはグループ "www" によって書き込み可能であり、グループの所有権は親ディレクトリから継承されるため、これは許可されます。

この方法の利点は、通常のユーザーがファイルを所有できることですが、「www」グループはファイルを変更でき、グループは書き込み可能であるため、HTTP サーバーはハード リンクを作成できます。ファイルをサーバーにアップロードするユーザーは、グループ所有権継承の「BSD セマンティクス」により、HTTP サーバーのグループに含まれている必要はありません。(man 2 統計を参照してください。)

于 2014-10-05T03:16:58.817 に答える