名前付きパイプ、読み取りと書き込みはそれぞれ Reader.php と Writer.php です (以下のコードを参照)。
次に、ブラウザーで Writer.php を実行してパイプにデータを書き込み、シェルで Reader.php を実行してデータを読み取る必要があります。
問題は、書き込みは成功しても、データを読み取ることができないことです。
PHP ドキュメントには、両方のパーティの UID がセーフ モードでチェックされると記載されていますが、それらを一貫したもの (両方とも 48) に設定しても機能しません (ドキュメントには、セーフ モードが PHP 5.4.0 で削除されたことが示されています)。読み取りと書き込みがブラウザまたはシェルを通じて行われる場合、読み取りと書き込みは正常に実行されます。
何が起こっているのですか?どうやって解決すればいいでしょうか?ありがとう!
オペレーティング システム: CentOS 7.0 64 ビット
php: 5.6.0
Reader.php
<?php$pipe = "/tmp/xpipe";$mode = 0600;//posix_setuid(8899);posix_setuid(48);if(!file_exists($pipe)) { echo "create pipe.\n"; umask(0); posix_mkfifo($pipe,$mode);}//posix_setuid(48);echo "posix uid: ".posix_getuid()."\n";echo "my uid: ".getmyuid()."\n";$f = fopen($pipe,"r");while(true){ $ret = stream_get_line($f, 1024, "\n"); if($ret != false){ echo $ret."\n"; }else{ usleep(100000); }}?>
<?php$pipe = "/tmp/xpipe";$mode = 0600;//posix_setuid(8899);posix_setuid(48);if(!file_exists($pipe)) { umask(0); posix_mkfifo($pipe,$mode);}$f = fopen($pipe,"w");$msg = "some message [".Date("Y-m-d h:i:s")."]<br>\n";$ret = fwrite($f,$msg);echo "write pipe: ".$ret."<br>\n";fclose($f);//posix_setuid(48);echo "user: ".get_current_user()."<br>\n";echo "posix uid: ".posix_getuid()."<br>\n";echo "my uid: ".getmyuid()."<br>\n";echo $msg;?>
$mode = 0600;間違っているはずです
少なくとも 0644 である必要があります
同じユーザーを使用して、reader.php と Writer.php をそれぞれ実行しました
実行結果は成功しました
$mode = 0600; ?それは間違っているはずです
少なくとも 0644 である必要があります
Web モードで php と php を使用するにはどうすればよいですか?シェルはどうでしょうか?
退職して自宅で自由に過ごします
$mode = 0600;間違っているはずです
少なくとも 0644 である必要があります
同じユーザーを使用してそれぞれ Reader.php と Writer.php を実行します
実行結果は成功です
Halo~~~
環境 1:
オペレーティング システム: CentOS 7.0
PHP: 5.6.0
Apache: 2.4.6
環境 2: オペレーティング システム: 13.10
PHP: 5.5.3
Apache: 2.4.6
「環境 1」は読み取りと書き込みに失敗しましたが、「環境 2」は読み取りと書き込みに成功しました。 ! ! ! ! !
誰か解決を手伝ってくれませんか?実際の動作環境は「環境1」です
Halo~~~
オペレーティングシステム: CentOS 7.0 PHP: 5.6.0 Apache: 2.4.6
環境 2:
オペレーティング システム: Ubuntu 13.10 PHP: 5.5.3 Apache: 2.4.6
「環境 1」は読み取りと書き込みに失敗しましたが、「環境 2」は読み取りと書き込みに成功しました。 ! ! ! ! !
誰か解決を手伝ってくれませんか?私の実際の動作環境は「環境 1」です
/var/log/security を確認してください。RH シリーズには通常、解決されていない SELinux 権限があります
Halo~~~
環境 1:
オペレーティング システム。 : CentOS 7.0 PHP: 5.6.0 Apache: 2.4.6
環境 2:
オペレーティング システム: Ubuntu 13.10 PHP: 5.5.3 Apache: 2.4.6
ronment 1" の読み取りと書き込みに失敗しました、「環境 2」の読み取りと書き込みが正常に完了しました。 ! ! ! ! !
誰か解決を手伝ってくれませんか?私の実際の動作環境は「環境 1」です。
/var/log/security を確認してください。RH シリーズには通常、解決されていない SELinux 権限があります
?? は限定的なエラーであり、エラーの意味を確認する必要があります 制限が十分で同じである限り、アプリケーションは同じですか?正しいアプリケーションが見つからない場合は、エラーを待って内容をキャプチャして確認してください
権限がコードに設定されており、ログがすべて開いています。プロンプト。 CentOS の問題だと思いますが、どこに問題があるのかわかりません。