سؤال

أحاول تنفيذ أمر Shell عبر:

<php echo shell_execute("tac /home/kusmuk/access-logs/kusmuk.org"); ?>

لكنه لا يعطي أي إخراج. ماذا قد يكون السبب؟

على الرغم من أنها لا تعمل، إلا أن الأسطر التالية تعمل كما هو متوقع:

<php echo shell_execute("ls -al triogrup.com"); ?>
//outputs: -rw-r----- 2 root kusmuk 28640 Aug 19 17:44 kusmuk.org

<php echo shell_execute("pwd"); ?>
//outputs: /home/kusmuk/public_html
هل كانت مفيدة؟

المحلول

غمزة غريغ جيدة. ربما تنتهي بك الأمر مع مشكلة الأذونات.

ومع ذلك، أود أن أقول إنها فكرة جيدة تجنب إجراء مكالمات النظام من PHP إن أمكن. يمكن أن يكون التصحيح آلام وإذا كنت تمر مع المعلمات، فمن السهل جدا جعل الثقوب الأمنية. رمز PHP الأصلي أسهل بكثير التعامل معه.

"TAC" بسيط بما فيه الكفاية أنه يجب أن تكون قادرا على القيام بذلك بشكل جيد من داخل PHP. على سبيل المثال إصدار trival يبصق الملف بأكمله في واحد يذهب:

$log= file_get_contents('/home/kusmuk/access-logs/kusmuk.org');
echo implode("\n", array_reverse(explode("\n", $log)));

نصائح أخرى

جرب هذا:

echo shell_exec("tac /home/kusmuk/access-logs/kusmuk.org 2>&1");

سوف يعيد توجيه Stderr إلى Stdout لذلك نأمل أن ترى لماذا لا يعمل

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top