В зависимости от того, что Вы делаете, система () или , popen () может быть прекрасным. Используйте систему (), если сценарий Python не имеет никакого вывода, или если Вы хотите, чтобы вывод сценария Python перешел непосредственно к браузеру. Используйте popen (), если Вы захотите записать данные во вход стандарта сценария Python или считать данные со стандартного вывода сценария Python в php. popen (), то только позволит Вам читать или запишет, но не оба. Если Вы хотите обоих, проверяете proc_open () , но с двусторонней связью между программами необходимо стараться избежать мертвых блокировок, где каждая программа ожидает другого, чтобы сделать что-то.
, Если Вы хотите передать пользователя, снабдил данными к сценарию Python, тогда большой вещью быть осторожным относительно является инжекция команды. Если Вы не осторожны, Ваш пользователь мог бы отправить Вам данные как"; evilcommand"; и заставьте свою программу выполнить произвольные команды против Вашей воли.
escapeshellarg () и , которому escapeshellcmd () может помочь с этим, но лично мне нравится удалять все, что не является известным хорошим символом, с помощью чего-то как
preg_replace('/[^a-zA-Z0-9]/', '', $str)
Плевать, я действительно получил эту работу после отправки моего вопроса. В итоге я удалил libdbd-odbc-ruby и libdbi-ruby, а затем переустановил их, установив сначала libdbi-ruby, а затем установив libdbd-odbc-ruby. Думаю, когда я устанавливал их раньше, должно быть, что-то пошло не так.
Я начал получать эту ошибку, когда обновился до Ubuntu 9.10 (Karmic Koala). Ваш совет относительно порядка установки пакетов Ubuntu мне не помог.
Кажется, исправление заключалось в ручной компиляции ruby-odbc.
wget http://www.ch-werner.de/rubyodbc/ruby-odbc-0.9997.tar.gz
tar xzvf ruby-odbc-0.9997.tar.gz
cd ruby-odbc-0.9997
ruby extconf.rb --with-dlopen
make
sudo make install
Кстати, следование инструкциям по перекомпиляции Ruby-ODBC на Ubuntu 9.10 (Karmic) потребовало установки пакета libiodbc2-dev или unixodbc-dev. При использовании libiodbc2-dev у меня возникали ошибки сегментации, когда моя программа на Ruby пыталась:
connection.select_all('select top 15 * from log_device_healths')
.. но без проблем при использовании unixodbc-dev вместо этого.
Решение Тима Моргана не сработало для меня. Однако мне удалось заставить все работать, установив старую версию libodbc-ruby (0.9995) отсюда:
http://mirrors.kernel.org/ubuntu/pool/universe/libo/libodbc-ruby/libodbc- ruby1.8_0.9995-1_i386.deb
Дополнительные сведения доступны в блоге Карстена Гелинга:
http://gehling.dk/2010/02/the-woes-of-libodbc-ruby1-8-and- debian-ubuntu /
Однако будьте осторожны - диспетчер обновлений Ubuntu с радостью «обновит» эту версию libodbc-ruby до неработающей версии 0.9997-2. Я случайно перезаписал старую версию таким образом только для того, чтобы снова оказаться здесь, пытаясь выяснить, как я исправил это в прошлый раз.
Ну, это кажется, мой другой ответ перестал работать для меня. Эта ветка помогла мне решить проблему другим способом, и я хотел поделиться ею здесь.
sudo gem uninstall ruby-odbc
sudo rm /usr/local/lib/site_ruby/1.8/x86_64-linux/odbc.so
cd /tmp
wget http://mirrors.kernel.org/ubuntu/pool/universe/libo/libodbc-ruby/libodbc-ruby1.8_0.9995-1_amd64.deb
sudo dpkg -i libodbc-ruby1.8_0.9995-1_amd64.deb
Если вы используете не 64-битную платформу, вам необходимо загрузить другой пакет Debian.
По сути, проблему решает установка версии 0.9995 пакета Ubuntu ruby-odbc.
Ubuntu 9.10 64 бит
Мне пришлось указать каталог odbc в установке rubyodbc
wget http://www.ch-werner.de/rubyodbc/ruby-odbc-0.9997.tar.gz tar xzvf ruby-odbc-0.9997.tar.gz cd ruby-odbc-0.9997 ruby extconf.rb --with-odbc-dir=/usr/lib/odbc --disable-dlopen make sudo make install