Apabila bekerja dengan persekitaran sisi pelayan, adalah perkara biasa untuk menghadapi situasi di mana anda perlu melaksanakan program baris perintah luaran daripada skrip PHP. Walau bagaimanapun, pengguna lalai di mana PHP berjalan mungkin tidak mempunyai kebenaran atau akses yang mencukupi kepada aplikasi tertentu.
Pertimbangkan senario di mana anda menjalankan Apache pada localhost dan cuba mengawal main balik Rhythmbox daripada skrip PHP yang berjalan sebagai pengguna-www. Melaksanakan arahan rhythmbox-client --pause berfungsi dengan sempurna apabila dijalankan secara manual, tetapi gagal apabila dilaksanakan sebagai www-user kerana Rhythmbox tidak mengecam atau mengakses tika pengguna.
Satu yang berkesan penyelesaiannya ialah memanfaatkan arahan sudo, membolehkan anda melaksanakan program luaran sebagai pengguna tertentu. Ini melibatkan pengubahsuaian fail sudoers (visudo) untuk memberikan pengguna pelayan web (cth., wwwuser) kebenaran untuk menjalankan arahan tertentu:
wwwuser ALL=/usr/bin/rhythmbox-client
Ini menyekat keupayaan Apache untuk melaksanakan hanya arahan yang diperlukan, menghalang potensi risiko keselamatan .
Dalam kes khusus ini, Rhythmbox mungkin masih tidak mengenali tika pengguna kerana PHP berjalan sebagai pengguna-www. Untuk menangani masalah ini, buat skrip bash yang memanggil rhythmbox-client dan dapatkan DBUS_SESSION_BUS_ADDRESS daripada persekitaran pengguna yang melaksanakan:
<code class="bash">#! /bin/bash DBUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/*/environ 2>> /dev/null| sed 's/DBUS/\nDBUS/g' | tail -n 1` if [ "x$DBUS_ADDRESS" != "x" ]; then export $DBUS_ADDRESS /usr/bin/rhythmbox-client --pause fi</code>
Skrip bash ini kemudiannya boleh dilaksanakan oleh PHP sebagai wwwuser, membolehkan anda mengawal main balik Rhythmbox sebagai pengguna anda daripada aplikasi PHP anda.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Perintah Luaran sebagai Pengguna Khusus dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!