<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// コードのこの部分は、記事の内容とは何の関係もありません,標識のみ</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
<h1>なんで Windows システムの下 </span><span><span class="hljs-title function_ invoke__">getmyuid</span></span><span>() 利用不可?原因と解決策</h1>
<p>存在する PHP プログラミング,<code></span><span><span class="hljs-title function_ invoke__">getmyuid</span></span><span>()
または環境変数を読む:
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'現在のユーザー:'</span></span><span> . </span><span><span class="hljs-title function_ invoke__">getenv</span></span><span>(</span><span><span class="hljs-string">'USERNAME'</span></span><span>);
WindowsのユーザーID情報が本当に必要な場合は、COM拡張機能を使用してWindows APIを呼び出して現在のユーザーのSIDを取得できます。
</span><span><span class="hljs-variable">$objWMI</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">COM</span></span><span>(</span><span><span class="hljs-string">'winmgmts://'</span></span><span>);
</span><span><span class="hljs-variable">$colItems</span></span><span> = </span><span><span class="hljs-variable">$objWMI</span></span><span>-></span><span><span class="hljs-title function_ invoke__">ExecQuery</span></span><span>(</span><span><span class="hljs-string">"Select * from Win32_ComputerSystem"</span></span><span>);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$colItems</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$objItem</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'ユーザー名:'</span></span><span> . </span><span><span class="hljs-variable">$objItem</span></span><span>->UserName . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
これには、COM拡張機能を有効にするにはPHPが必要であり、Windowsシステムでのみ実行できることに注意してください。
異なるオペレーティングシステム間のコードの互換性を確保するために、異なるシステムに対してユーザー情報を個別に処理することをお勧めします。
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strtoupper</span></span><span>(</span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(PHP_OS, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>)) === </span><span><span class="hljs-string">'WIN'</span></span><span>) {
</span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getenv</span></span><span>(</span><span><span class="hljs-string">'USERNAME'</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-title function_ invoke__">posix_getpwuid</span></span><span>(</span><span><span class="hljs-title function_ invoke__">posix_getuid</span></span><span>())[</span><span><span class="hljs-string">'name'</span></span><span>];
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'現在のユーザー:'</span></span><span> . </span><span><span class="hljs-variable">$user</span></span><span>;
PHP関数getMyUID()は、 UNIX/LinuxシステムのユーザーIDメカニズムに依存します。 Windowsはさまざまなユーザー管理方法を採用しているため、Windowsシステムでは使用できません。この状況に直面して、開発者は、環境変数の読み取り値やCom拡張機能を使用して現在のユーザー情報を取得するなどのWindows固有の方法を採用して、クロスプラットフォームの互換性のあるユーザー識別を実現する必要があります。
さまざまなオペレーティングシステムの基礎となるメカニズムを理解することは、より堅牢で互換性のあるPHPコードを書き込むのに役立ちます。