2011-02-01 2 views
3

Ошибка:PHP - Имя функции должно быть строкой

PHP Notice: Undefined variable: exec in readings.php on line 3 
PHP Fatal error: Function name must be a string in readings.php on line 3 

Код:

<?php 
    require('smarty_config.php'); 
    exec('reading_fetcher.py',$output,$ret_code); 
    $smarty->assign('readings',$output); 
    $smarty->display('readings.tpl'); 
?> 

меня попросили код reading_fetcher.py так вот:

#!/usr/bin/env python 
import urllib2, re 

response = urllib2.urlopen('http://it.ctsfw.edu/inc/nc_scriptureframe.php') 

html = response.read() 

def remove_html_tags(data): 
    p = re.compile(r'<.*?>') 
    return p.sub(' ', data) 

import re 
import htmlentitydefs 

def convertentity(m): 
    if m.group(1)=='#': 
     try: 
      return unichr(int(m.group(2))) 
     except ValueError: 
      return '&#%s;' % m.group(2) 
     try: 
      return htmlentitydefs.entitydefs[m.group(2)] 
     except KeyError: 
      return '&%s;' % m.group(2) 

def converthtml(s): 
    return re.sub(r'&(#?)(.+?);',convertentity,s) 

readings = converthtml(str(remove_html_tags(html))) 
readings.replace("&nbsp;", " ") 

print readings[699:] 

Я уже посмотрел here, here и here. Две из этих ошибок - дополнительные «$». Я не вижу дополнительного «$» в имени моей функции. Третья ошибка имеет «()» вместо «[]». Поэтому я попытался заменить их. Это не сработало. Что еще я могу попробовать?

+1

Выполняет ли 'function_exists ('exec')' return true? (Это очень верно, но кто знает?) – zneak

+0

@zneak Это должно сделать, иначе он получил бы «Неустранимая ошибка: вызов неопределенной функции». (Я думаю.) – alex

+0

@zneak: Да, это так. – John

ответ

1

exec() может быть отключен администратором сервера. В этом случае вызов exec будет печатать E_NOTICE и E_WARNING. Поэтому, если вы отключили печать предупреждений, вы можете видеть только E_NOTICE и, возможно, пропустить более интересное предупреждение о том, что «exec был отключен по соображениям безопасности».

Вы можете добавить эту строку в код

error_reporting(E_ALL); 

так что вы можете иметь более подробное выполнение.

+0

Хороший намек, скорее всего, он был отключен. @OP: Если у вас есть доступ к php.ini, найдите 'disable_functions', это значит, что sysop может отключить функции php. – acme

+0

@acme: 'disable_functions' установлен в ничто[email protected]: отчет об ошибках уже установлен в 'E_ALL' в php.ini, поэтому добавление' error_reporting (E_ALL); 'к моему коду ничего не делало. – John

Смежные вопросы