У меня есть сложный файл js, который делает некоторые тяжелые вычисления и сохраняет результат в коллекции. Это написано в js, потому что я не могу заявить о передаче данных.
в настоящее время я передаю скрипт в оболочку mongo следующим образом: $ mongodb <path_to_script
Сценарий состоит из нескольких функций?
Можно ли выполнить его с PHP? Я видел, что есть параметр "nolock", который может быть передан методу evel, можно ли использовать его при выполнении из оболочки или из PHP?
Что считается более безопасным, используя php execute wrapper или исполняющий скрипт из оболочки?
Когда вы запускаете файл.js в оболочке mongo, он не запускает javascript на сервере; он запускает его в оболочке. Вы используете функции javascript на стороне сервера, такие как db.eval и map/reduce в сценарии оболочки mongo?
В любом случае, я предлагаю отказаться от сценария оболочки и серверных функций javascript и либо использовать структуру агрегации для обработки на стороне сервера, либо реализовать логику в коде приложения PHP. На стороне сервера javascript имеет серьезные ограничения производительности и безопасности, и лучше избегать использования его, когда это возможно.
Вы можете прочитать файл js и выполнить его на PHP, используя execute, который является оболочкой для команды eval. Опция nolock может быть добавлена в аргументы.
$code = file_get_contents('filenam.js');
$db->execute($code, array('nolock' => true));
Инсталляция php execute должна быть более безопасной и лучшей. Если вы выполняете js с использованием оболочки в PHP, вам нужно будет дать разрешение php на выполнение сценария оболочки с помощью shell_exec(), что невозможно, если вы используете хостинг и не имеете права администратора на хосте.