Я создаю приложение, которое требует, чтобы скрипт .sh запускался на файле, который был недавно загружен на мой сервер XAMPP (каталог :/opt/lampp/htdocs/audio_server/uploads), который просто перемещает его из одного каталога в другой. Ниже приведен мой PHP-код для вызова файла:
<?php
print_r($_FILES);
$target_path = "uploads/";
$target_path = $target_path . basename( $_FILES['audio_name'] ['name']);
if(move_uploaded_file($_FILES['audio_name']['tmp_name'], $target_path))
{
echo "The file ". basename( $_FILES['audio_name']['name'])." has been uploaded";
chmod ("uploads/".basename( $_FILES['audio_name']['name']), 0777);
}
else
{
echo "There was an error uploading the file, please try again!";
echo "filename: " . basename( $_FILES['audio_name']['name']);
echo "target_path: " .$target_path;
}
echo shell_exec("/opt/lampp/htdocs/audio_server/uploads/dirChangeScript.sh 2>&1");
?>
и мой файл dirChangeScript.sh выглядит следующим образом:
latest_file=$(ls -t | head -n 1)
cp -p "$latest_file" /opt/lampp/htdocs/audio_server/converted
При выполнении вышеуказанного скрипта возникает ошибка «пропущен каталог 'uploads'».
Проблема, как бы странно это ни звучало, заключается в том, что всякий раз, когда скрипт dirChangeScript запускается из PHP-файла, никакого эффекта не наблюдается, т.е. последний файл не копируется в указанную папку.
Но когда я запускаю скрипт через терминал, нужный файл (последний) копируется в целевой каталог.
Также я попробовал следующее утверждение:
cp -r "$latest_file" /opt/lampp/htdocs/audio_server/converted
Но в этом случае весь каталог загрузок вместе со всеми его файлами копируется в преобразованную папку.