I’m using php 7.2x
After starting sitepod I got the following error-message:
AH01071: Got error ‘PHP message: PHP Fatal error: Uncaught Error: Call to undefined function split() in /var/www/vhosts/domainname.tld/httpdocs/vendor/nasa/sitepod/inc/classes/Crawler.class.php:340
This is because split() is in php 7.x removed!
Therefore split() must be replaced with str_split().
Because I’m not firm with GIT I can’t do that.
Hi @Pyradur,
I’ve checked what you wrote and I found that you use an old sitepod version.
I’ve already fixed the split issue. We just haven’t release it yet.
You can download the newest version from here.
@Pyradur I made a 1.6.0 release of the codebase so it should now be available. Thank you for registering the issue.
Hi there,
after «installing» (copying) the newst version and starting sitepod I hat the following error_messages in my log-file:
AH01071: Got error ‘PHP message: PHP Warning: include_once(/var/www/vhosts/dvi-service.de/httpdocs/etikettenagentur.de/admin_fremd/sitepod/inc/../vendor/autoload.php): failed to open stream: No such file or directory in /var/www/vhosts/dvi-service.de/httpdocs/etikettenagentur.de/admin_fremd/sitepod/inc/startup.php on line 31
PHP message: PHP Warning: include_once(): Failed opening ‘/var/www/vhosts/dvi-service.de/httpdocs/etikettenagentur.de/admin_fremd/sitepod/inc/../vendor/autoload.php’ for inclusion (include_path=’.:/opt/plesk/php/7.1/share/pear:./inc:./inc/functions:./inc/classes:./settings:./templates’) in /var/www/vhosts/dvi-service.de/httpdocs/etikettenagentur.de/admin_fremd/sitepod/inc/startup.php on line 31
PHP message: PHP Fatal error: Uncaught Error: Class ‘Sitepod\GeoIp’ not found in /var/www/vhosts/dvi-service.de/httpdocs/etikettenagentur.de/admin_fremd/sitepod/inc/startup.php:34
Stack trace:
#0 /var/www/vhosts/dvi-service.de/httpdocs/etikettenagentur.de/admin_fremd/sitepod/index.php(17): require_once()
#1 {main}
thrown in /var/www/vhosts/dvi-service.de/httpdocs/etikettenagentur.de/admin_fremd/sitepod/inc/startup.php on line 34′
Mit freundlichen Grüßen
Reinhold Riedersberger
DVI-Service
Reinhold Riedersberger
Oderstraße 98
78052 Villingen-Schwenningen
Telefon : (07721) 70057
Telefax : (07721) 70058
eMail : info@dvi-service.de
Internet: www.dvi-service.de
———————————————————————
Hi @Pyradur,
I’ve checked what you wrote and I found that you use an old sitepod version.
I’ve already fixed the split issue. We just haven’t release it yet.
You can download the newest version from here.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.
Hi there,
after using composer I got the following error:
Maybe you can help me…?
AH01071: Got error ‘PHP message: PHP Warning: include_once(/var/www/vhosts/dvi-service.de/httpdocs/etikettenagentur.de/admin_fremd/vendor/nasa/sitepod/inc/../vendor/autoload.php): failed to open stream: No such file or directory in /var/www/vhosts/dvi-service.de/httpdocs/etikettenagentur.de/admin_fremd/vendor/nasa/sitepod/inc/startup.php on line 31nPHP message: PHP Warning: include_once(): Failed opening ‘/var/www/vhosts/dvi-service.de/httpdocs/etikettenagentur.de/admin_fremd/vendor/nasa/sitepod/inc/../vendor/autoload.php’ for inclusion (include_path=’.:/opt/plesk/php/7.1/share/pear:./inc:./inc/functions:./inc/classes:./settings:./templates’) in /var/www/vhosts/dvi-service.de/httpdocs/etikettenagentur.de/admin_fremd/vendor/nasa/sitepod/inc/startup.php on line 31nPHP message: PHP Fatal error: Uncaught Error: Class ‘Sitepod\GeoIp’ not found in /var/www/vhosts/dvi-service.de/httpdocs/etikettenagentur.de/admin_fremd/vendor/nasa/sitepod/inc/startup.php:34nStack trace:n#0 /var/www/vhosts/dvi-service.de/httpdocs/etikettenagentur.de/admin_fremd/vendor/nasa/sitepod/index.php(17): require_once()n#1 {main}n thrown in /var/www/vhosts/dvi-service.de/httpdocs/etikettenagentur.de/admin_fremd/vendor/nasa/sitepod/inc/startup.php on line 34n’
Hi @Pyradur,
Sitepod is depending on composer.
Here is the installation giude:
https://github.com/nasa/sitepod/wiki/Sitepod-Installation
BTW: I guess you need to run composer install, but you should check the guide.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.
Hi @Pyradur If I were you I would purge all Sitepod material and run from a clean installation.
Содержание
- Бортовой журнал
- Полет нормальный. Без происшествий.
- Переход на PHP7: работа над ошибками
- The Joomla! Forum™
- PHP 7.0 and 7.1 ‘call to undefined function split()’ on User LogIn
- PHP 7.0 and 7.1 ‘call to undefined function split()’ on User LogIn
- Fatal error: Uncaught Error: Call to undefined function mysql_connect() — как исправить
- С чем связана ошибка Fatal error
- Создание резервных копий сайта
- Настройка журнала ошибок
- Переводим сайт на MySQLi
- CP1251 и PHP 7 – как расшифровать непонятный набор символов
- Заключение
Бортовой журнал
Полет нормальный. Без происшествий.
Переход на PHP7: работа над ошибками
Итак, у вас есть старенький, но уж очень милый сердцу сайт, который вы решаетесь из жалости (или, возможно, перечитав Хабра) перевести на PHP7. С волнением ожидая резкого роста производительности, вы смахиваете пыль с бедного сайта и решительно переключаете в панели управления хостингом версию PHP.
Если сайт уже давно не молод, то с большой долей вероятности чудо не произойдет. В лучшем случае начнут появляться разного рода ошибки, а в худшем — вы увидите белый экран, дзен веб-разработки. В этот момент хочется по-быстрому переключить все обратно и забыть о своей внезапной слабости.
Но предположим, что ваша сильная сторона — настойчивость, к тому же вы располагаете некоторым количеством времени для экспериментов. Давайте попробуем все починить.

Резервные копии
Делаем резервные копии сайта (а заодно и баз данных). Ведь кто не делает резервные копи — сам себе враг, верно? Для разного рода экспериментов имеет смысл добавить еще один сайт на хостинге и скопировать в него файлы, которые мы сейчас будем править.
Журналы ошибок
Настроим ведение журнала ошибок PHP в файл .htaccess (если он не был настроен ранее):
php_value display_errors 0
php_value log_errors 1
php_value error_log /home/vasya/domains/mysite.ru/logs/error.log
Работа с MySQL
Допустим, сайт использует базы данных, и вы видите ошибки вроде такой:
Fatal error: Uncaught Error: Call to undefined function mysql_connect()
Это оттого, что в современных версиях PHP (начиная с PHP 5.5.0) оригинальное расширение MySQL не поддерживается. Разработчики рекомендуют использовать MySQLi или PDO. Попробуем перейти на MySQLi, это просто:
Предположим, что сайт написан с использованием процедурного подхода, который представляет собой классический говнокод многие и сейчас считают лаконичным и эффективным решением. В таком случае, следующую устаревшую конструкцию для подключения к базе данных:
$link = mysql_connect(‘localhost’, $user, $password)
mysql_select_db($dbname, $link)
mysql_query(‘set names cp1251’)
можно заменить на:
$link = mysqli_connect(‘localhost’, $user, $password, $dbname)
mysqli_query($link, ‘set names cp1251’)
Другие популярные функции легко меняются на их аналоги с буквой ‘i’:
mysqli_fetch_array()
mysqli_fetch_row()
mysqli_fetch_assoc()
mysqli_fetch_array()
mysqli_num_rows()
mysqli_insert_id()
mysqli_close()
В результате этих несложных действий данные из БД должны успешно собираться и отправляться.
Кодировка
Настоящий олдскул — это сайт в CP1251 (как минимум). Всё превратилось в ромбики или прочие козяблики?
Скорее всего, достаточно будет указать кодировку в .htaccess таким образом:
php_value default_charset «cp1251»
Регулярные выражения
Также вы можете наблюдать ошибки следующего рода:
Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
Это означает, что модификатор /e, который позволял передать произвольной функции результат регулярного выражения, теперь не поддерживается. В таких случаях рекомендуется использовать функцию preg_replace_callback
Допустим, у нас есть такое регулярное выражение:
с заменой на preg_replace_callback оно должно выглядеть вот так:
$string=preg_replace_callback(«/:([a-z]<1,10>):/», create_function(‘$matches’, ‘return print_smile($matches[1])’), $string)
здесь все просто, регулярное выражение теперь указывается в качестве первого аргумента (без модификатора /e, разумеется), а в качестве второго аргумента указывается анонимная функция (которая будет выполнена после применения регулярного выражения) с двумя аргументами: массив $matches, где будут сохранены данные, совпадающие с регулярным выражением и вызов внешней функции с аргументами. В данном примере внешняя функция называется print_smile и ей передается аргументом первое найденное вхождение. То, что в preg_replace было \1 (первое найденное вхождение) станет $matches[1] (если аргументов было больше, то будет $matches[2], $matches[3] и так далее).
Вот еще один пример, посложнее:
$out=preg_replace_callback(‘/ (.*?) /s’, create_function(‘$matches’, ‘return feed_out_sub_rm($matches[2], «‘.$base_prefix.’», «‘.$nick.’», «‘.$id_entry.’») ‘), $out)
здесь легко запутаться в кавычках, будьте внимательны.
Копаясь в регулярных выражениях, можно вспомнить еще про две функции, которые с версии PHP 5.3.0 считаются устаревшими (и не поддерживаются). Симптомы следующие:
Fatal error: Uncaught Error: Call to undefined function ereg_replace()
Если регулярное выражение в ereg_replace простое, то можно обойтись просто установкой граничных символов, как здесь:
Fatal error: Uncaught Error: Call to undefined function split()
Если регулярное выражение посложнее, то пробуем преобразовать к preg_split.
На этом пока все. Удачной отладки.
Много полезных материалов по теме можно найти на сайте разработчиков.
Если что-то не получается, или ваш случай совсем не похож на наши примеры — пишите комментарии, попробуем разобраться вместе.
Для того, чтобы оставлять комментарии к посту, авторизуйтесь, используя свой аккаунт в социальных сетях ВКонтакте/FaceBook, или аккаунт в Google/Яндекс.
Источник
The Joomla! Forum™
PHP 7.0 and 7.1 ‘call to undefined function split()’ on User LogIn
PHP 7.0 and 7.1 ‘call to undefined function split()’ on User LogIn
Post by Rowdie » Wed Jun 14, 2017 2:08 pm
Basic Environment :: wrote: Joomla! Instance :: Joomla! 3.7.2-Stable (Amani) 22-May-2017
Joomla! Configured :: Yes | Read-Only ( 444 ) | Owner: —protected— . (uid: 1/gid: 1) | Group: —protected— (gid: 1) | Valid For: 3.7
Configuration Options :: Offline: 0 | SEF: 1 | SEF Suffix: 0 | SEF ReWrite: 1 | .htaccess/web.config: Yes | GZip: 0 | Cache: 0 | FTP Layer: 0 | SSL: 0 | Error Reporting: default | Site Debug: 0 | Language Debug: 0 | Default Access: 1 | Unicode Slugs: 0 | Database Credentials Present: Yes
Host Configuration :: OS: Linux info 3.0 #1337 SMP Tue Jan 01 00:00:00 CEST 2000 all GNU/Linux | OS Version: Linux info 3.0 #1337 SMP Tue Jan 01 00:00:00 CEST 2000 all GNU/Linux | Technology: Linux info 3.0 #1337 SMP Tue Jan 01 00:00:00 CEST 2000 all GNU/Linux | Web Server: Apache | Encoding: gzip, deflate, br | Doc Root: /kunden/homepages/12/d299163707/htdocs/richardowden.live.1412 | System TMP Writable: Yes
PHP Configuration :: Version: 5.6.30 | PHP API: cgi-fcgi | Session Path Writable: Yes | Display Errors: 1 | Error Reporting: 22517 | Log Errors To: | Last Known Error: | Register Globals: | Magic Quotes: | Safe Mode: | Open Base: | Uploads: 1 | Max. Upload Size: 64M | Max. POST Size: 64M | Max. Input Time: -1 | Max. Execution Time: 50000 | Memory Limit: 256M
MySQL Configuration :: Version: 5.5.54-0+deb7u2-log (Client:mysqlnd 5.0.11-dev — 20120503 — $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $) | Host: —protected— ( —protected— ) | Collation: latin1_general_ci ( Character Set: latin1) | Database Size: 5.40 MiB | #of Tables: 106
Detailed Environment :: wrote: PHP Extensions :: Core (5.6.30) | date (5.6.30) | ereg () | libxml () | openssl () | pcre () | sqlite3 (0.7-dev) | zlib (2.0) | bcmath () | bz2 () | calendar () | ctype () | curl () | dba () | dom (20031129) | hash (1.0) | fileinfo (1.0.5) | filter (0.11.0) | ftp () | gd () | gettext () | SPL (0.2) | iconv () | session () | intl (1.1.0) | json (1.2.1) | mbstring () | mcrypt () | standard (5.6.30) | mysqlnd (mysqlnd 5.0.11-dev — 20120503 — $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $) | PDO (1.0.4dev) | pdo_mysql (1.0.2) | pdo_sqlite (1.0.1) | Phar (2.0.2) | posix () | Reflection ($Id: 5f15287237d5f78d75b19c26915aa7bd83dee8b8 $) | imap () | shmop () | SimpleXML (0.1) | soap () | mysqli (0.1) | exif (1.4 $Id: 1c8772f76be691b7b3f77ca31eb788a2abbcefe5 $) | tidy (2.0) | tokenizer (0.1) | wddx () | xml () | xmlreader (0.1) | xmlwriter (0.1) | xsl (0.1) | zip (1.12.5) | mysql (1.0) | cgi-fcgi () | Zend Engine (2.6.0) |
Potential Missing Extensions :: suhosin |
Switch User Environment (Experimental) :: PHP CGI: Yes | Server SU: Yes | PHP SU: Yes | Custom SU (LiteSpeed/Cloud/Grid): Yes
Potential Ownership Issues: No
Folder Permissions :: wrote: Core Folders :: —protected— (755) | —protected— (755) | —protected— (755) | —protected— (755) | —protected— (755) | —protected— (755) | —protected— (755) | —protected— (705) | —protected— (755) | —protected— (755) | —protected— (755) | —protected— (755) | —protected— (755) |
Источник
Fatal error: Uncaught Error: Call to undefined function mysql_connect() — как исправить
PHP 7 является новой версией языка программирования. Её предшественницей считается PHP 5, т. к. 6 версия так и не была выпущена для общего пользования в связи с возникшими во время разработки проблемами. Но это отдельная тема, а сегодня мы разберем, когда при переводе сайта с PHP 5 на PHP 7 возникает ошибка Fatal error: Uncaught Error: Call to undefined function mysql_connect(), и как её исправить, чтобы наш ресурс заработал быстрее, стабильнее и надежнее.
С чем связана ошибка Fatal error
Ошибка, начинающаяся словами «Fatal error: Uncaught Error:», вызывает прекращение работы скрипта. В нашем случае она вместе с рядом других часто появляется при переводе старого сайта с PHP 5 на PHP 7. Выскакивают либо сообщения с уведомлениями об ошибках, либо просто висит белый экран. Здесь есть 2 пути – либо вернуть все назад, переключившись в панели управления хостингом, либо проявить настойчивость, разобраться с этой ошибкой и работать уже с новой версией PHP. Итак, давайте посмотрим, с чем же конкретно связана наша ошибка.
Как видно из самого названия ошибки, проблема связана с тем, что новые версии PHP (начиная с v. 5.5.0) не осуществляют поддержку оригинального расширения MySQL, в связи с чем сайт не собирает и не отправляет данные из БД. В этом случае разработчики предлагают перейти на расширения PDO или MySQLi. Попробуем выполнить несколько простых действий по переходу на MySQLi. Также пользователи иногда сталкиваются с ошибкой Error CertEnroll, возникающей в процессе создания запроса на выпуск сертификата на сайте “Росказна”.
Создание резервных копий сайта
Прежде чем предпринимать какие-либо серьезные попытки исправить Fatal error: Uncaught Error: Call to undefined function mysql_connect, необходимо создать резервные копии своего сайта и БД. Также для того, чтобы была неограниченная возможность экспериментировать, добавляем на хостинге еще один сайт и копируем туда файлы, в которые будем вносить различные корректировки. Подобный подход поможет избежать последствий необдуманных или неосторожных действий с данными – мы их уже не потеряем, т. к. они дополнительно хранятся в резервных копиях. Это актуально при решении различных задач, например, при отладке кода на JavaScript иногда приходится решать ошибку TypeError: Cannot read property ‘xxx’ of undefined.
Настройка журнала ошибок
Также настраиваем ведение журнала ошибок (если этого не было сделано ранее). Открываем файл .htaccess и корректируем информацию в нем. Она должна выглядеть следующим образом.
Мы найдем файл .htaccess, если пройдем путь /home/login/domains/domain.ru/public_html/, где login – это логин нашего аккаунта, а domain.ru – домен нашего сайта. Третья строка на картинке выше показывает, где лежит файл с ошибками PHP, которые записываются в процессе работы сайта. Открыть error.log и просмотреть журнал ошибок возможно при помощи файлового менеджера в Панели управления.
Переводим сайт на MySQLi
Итак, вначале вносим коррективы в конструкцию, при помощи которой сайт подключается к базе данных. Открываем действующую запись.
- Везде mysql меняем на mysqli.
- В первой строчке после $password через запятую добавляем $dbname.
- Вторую строчку mysql_select_db($dbname, $link) убираем совсем.
- В третьей строчке перед ‘set names cp1251’ ставим $link и запятую.
В конструкцию, отвечающую за запросы, также вносим изменения. Берем действующую запись.
- Также заменяем mysql на mysqli.
- Меняем местами то, что заключено в скобки.
Теперь выглядит так.
Измененная конструкция, отвечающая за запросы
Открываем следующие популярные функции:
- mysql_fetch_array();
- mysql_fetch_row();
- mysql_fetch_assoc();
- mysql_fetch_array();
- mysql_num_rows();
- mysql_insert_id();
- mysql_close().
И везде производим замену mysql на mysqli. Наша картина выглядит следующим образом.
Теперь сбор и отправка информации из БД должны осуществляться без сбоев.
CP1251 и PHP 7 – как расшифровать непонятный набор символов
Иногда при написании сайта некоторые программисты используют не процедурный подход, являющийся на данный момент самым кратким решением, не раз доказавшим свою эффективность, а кодировку CP1251 и другие. В этом случае при переходе на PHP 7 на экране компьютера вся информация выглядит как непонятный набор палочек и иероглифов. В этом случае пробуем в файле дополнительной конфигурации .htaccess указать кодировку так.
Исправляем ситуацию в сайте, написанном при помощи CP1251
Проблемы с компьютером возникают нередко, и многие из них нужно научиться устранять самостоятельно. Например, это такие ситуации, как ошибка html5 Video file not found при просмотре видеороликов в сети или ошибки 0x0001, 0x0003 в дополнительной утилите Nvidia GeForce Experience.
Заключение
В этой статье мы рассмотрели, почему при переводе сайта с PHP 5 на PHP 7 возникает ошибка Fatal error: Uncaught Error: Call to undefined function mysql_connect(), и рассмотрели пути ее решения. Сложного в этом ничего нет, были внесены небольшие коррективы в конструкции, отвечающие за подключение к БД и за запросы. Также коснулись ситуации, когда сайт написан с использованием старой кодировки CP1251. Надеюсь, что предложенные варианты помогут вам исправить ситуацию и без проблем работать на PHP 7.
Источник
Проблема, с которой сталкиваются многие программисты после перевода площадки на современную версию PHP, — вероятная полная или частичная потеря работоспособности программного обеспечения на одном или нескольких сайтах площадки. Не предавайтесь панике, всё решаемо!
Использование функций mysql_connect(), mysql_select_db(), mysql_query() и т.д.
В PHP 7 разработчики отказались от расширения mysql, все использования функций расширения приводят к фатальной ошибке (Call to undefined function).
Как заменить неработающие функции mysql_connect(), mysql_select_db(), mysql_query()? Ошибка «PHP Fatal Error: Call to undefined function»
Решения проблемы есть и даже не одно!
Есть достойная альтернатива mysql — расширение mysqli. Функции расширения соответствуют старым (большая часть):
mysqli_fetch_array() //расширение mysqli mysql_fetch_array() //расширение mysql
1. Если у вас небольшой проект, вам будет несложно через поиск найти несколько строк в коде с функциями, начинающимися с «mysql_*» расширения mysql. Вручную отредактируйте код, заменив «mysql_*» на «mysqli_*».
2. Если у вас большой проект или вы очень активно пользовались функциями расширения mysql, вам будет непросто поменять все упоминания устаревших функций. В таком случае вам поможет следующее решение. Создайте PHP-файл, в котором определите функции с именами исключённых, которые будут ссылаться на соответствующие функции расширения mysqli.
Пример кода новой библиотеки. Не надо перечислять все функции расширения, это излишний перфекционизм. Создайте только те, которые встречаются в ваших проектах.
<?
function mysql_connect($server, $username, $password, $new_link = NULL, $client_flags = NULL) {
$GLOBALS['mysql_oldstyle_link'] = mysqli_connect($server, $username, $password);
return $GLOBALS['mysql_oldstyle_link'];
}
function mysql_query($sql) {
return mysqli_query($GLOBALS['mysql_oldstyle_link'], $sql);
}
function mysql_fetch_row($res) {
return mysqli_fetch_row($res);
}
function mysql_fetch_assoc($res) {
return mysqli_fetch_assoc($res);
}
function mysql_fetch_array($res) {
return mysqli_fetch_array($res);
}
function mysql_fetch_object($res) {
return mysqli_fetch_object($res);
}
function mysql_affected_rows($link = NULL) {
if ($link===NULL) $link=$GLOBALS['mysql_oldstyle_link'];
return mysqli_affected_rows($link);
}
function mysql_insert_id($link = NULL) {
if ($link===NULL) $link=$GLOBALS['mysql_oldstyle_link'];
return mysqli_insert_id ($link);
}
function mysql_select_db($database_name) {
return mysqli_select_db($GLOBALS['mysql_oldstyle_link'], $database_name);
}
function mysql_errno($link = NULL) {
if ($link===NULL) $link=$GLOBALS['mysql_oldstyle_link'];
return mysqli_errno($link);
}
function mysql_error($link = NULL) {
if ($link===NULL) $link=$GLOBALS['mysql_oldstyle_link'];
return mysqli_error($link);
}
function mysql_num_rows($res) {
return mysqli_num_rows($res);
}
function mysql_free_result($res) {
return mysqli_free_result($res);
}
function mysql_close($link) {
return mysqli_close($link);
}
function mysql_real_escape_string($sql, $link = NULL) {
if ($link===NULL) $link=$GLOBALS['mysql_oldstyle_link'];
return mysqli_real_escape_string($link, $sql);
}
function mysql_get_server_info($link = NULL) {
if ($link===NULL) $link=$GLOBALS['mysql_oldstyle_link'];
return mysqli_get_server_info($link);
}
?>
Данный код сохраните в файл, назовите его, например, deletedmysql.php и сохраните в корне сайта (на одном уровне с index.php главной страницы сайта).
В каждый PHP-файл, в котором встречается ошибка, добавьте строку в самое начало файла, после открывающего кода:
<? include_once 'deletedmysql.php'; /* далее старый PHP-код */
Совсем идеально будет добавить проверку на версию PHP, так как при переезде на другую площадку или понижении версии PHP до 5.x вы получите ошибку PHP: Fatal error: Cannot redeclare…
if (version_compare(PHP_VERSION, '7.0.0', '>=')) include_once 'deletedmysql.php';
Маленький лайфхак для тех, кому понравился способ 2. Используйте это решение только в качестве временной заглушки. При удобном случае перепрограммируйте код на использование новых функций.
PHP Fatal error: Uncaught Error: Call to undefined function split()
В PHP 7 функция spit() — разбиение строки на массив по регулярному выражению, — была исключена. Альтернатива есть, функции preg_split(), str_split(), explode().
В приведённом примере разбить командную строку можно любой функцией. Лично я предпочитаю explode().
|
ppsg -17 / 0 / 0 Регистрация: 05.04.2018 Сообщений: 16 |
||||
|
1 |
||||
|
16.04.2018, 10:30. Показов 3413. Ответов 5 Метки нет (Все метки)
Fatal error: Uncaught Error: Call to undefined function split() in E:OpenServerdomainsphpCodeГлава 3. DHTMLТрюк 24. Создание диаграмм ссылокlinkgraph.php:3 Stack trace: #0 {main} thrown in E:OpenServerdomainsphpCodeГлава 3. DHTMLТрюк 24. Создание диаграмм ссылокlinkgraph.php on line 3
__________________
0 |
|
3802 / 3160 / 1326 Регистрация: 01.08.2012 Сообщений: 10,717 |
|
|
16.04.2018, 10:57 |
2 |
|
0 |
|
-17 / 0 / 0 Регистрация: 05.04.2018 Сообщений: 16 |
|
|
16.04.2018, 14:45 [ТС] |
3 |
|
в книге написано что все должно работать
0 |
|
494 / 359 / 235 Регистрация: 31.05.2016 Сообщений: 999 |
|
|
16.04.2018, 14:51 |
4 |
|
ppsg, у тебя книга устаревшая. Выкинь её. Вместо split используй explode.
0 |
|
-17 / 0 / 0 Регистрация: 05.04.2018 Сообщений: 16 |
|
|
16.04.2018, 14:54 [ТС] |
5 |
|
а как мне тогда выучить пхп?
0 |
|
494 / 359 / 235 Регистрация: 31.05.2016 Сообщений: 999 |
|
|
16.04.2018, 14:56 |
6 |
|
ppsg, по-новее книгу найди.
0 |
За последние 24 часа нас посетили 11467 программистов и 1168 роботов. Сейчас ищут 307 программистов …
ошибка on line 3
Тема в разделе «PHP для новичков», создана пользователем ubunta2, 16 апр 2018.
-
ubunta2
Зэк[ БАН ]
- С нами с:
- 27 июн 2017
- Сообщения:
- 947
- Симпатии:
- 28
PHP:-
<?php
-
$wordcounts = array( );
-
$words = split( » «, «CNN number Americans disapproving President Bush job
-
perance risen highest level presidency according CNN USA Today Gallup poll
-
released Monday According poll percent respondents disapproved Bush performance
-
compared percent approved margerror plus minus percentage points percent
-
figure highest disapproval rating recorded CNN USA Today Gallup poll Bush
-
president January approval percentage percent matches low point late March
-
point gap between those disapproved approved largest recorded during Bush tenure
-
As Bush prepares address nation Tuesday defend Iraq policy just percent those
-
responding poll approved handling war percent disapproved Full story approval
-
rating Iraq unchanged poll late May disapproval figure marked increase
-
percentage points But poll found issues other Iraq war dragging down Bush numbers
-
Respondents expressed stronger disapproval handling economy energy policy health
-
care Social Security lone bright spot president poll handling terrorism which
-
scored percent approval rating compared just percent disapproved presidents
-
worst numbers latest poll came issue Social Security respondents disapproving
-
performance margmore percent percent Bush made changing Social Security system
-
signature issue second term He proposed creating voluntary government sponsored
-
personal retirement accounts workers younger Under proposal workers could invest
-
portion their Social Security taxes range government selected funds exchange
-
guaranteed benefits retirement plan run instiff opposition Democrats accounts are
-
too risky undermine Social Security system Some Republicans are wary taking such
-
politically risky economy only percent poll respondents approved Bush
-
performance compared percent disapproved On energy policy percent approved
-
percent disapproved health care percent approved percent disapproved poll results
-
based interviews Friday Sunday American adults» );
-
foreach( $words as $word )
-
{
-
$word = strtolower( $word );
-
if ( strlen( $word ) > 0 )
-
{
-
if ( ! array_key_exists( $word, $wordcounts ) )
-
$wordcounts[ $word ] = 0;
-
$wordcounts[ $word ] += 1;
-
}
-
}
-
$min = 1000000;
-
$max = —1000000;
-
foreach( array_keys( $wordcounts ) as $word )
-
{
-
if ( $wordcounts[ $word ] > $max )
-
$max = $wordcounts[ $word ];
-
if ( $wordcounts[ $word ] < $min )
-
$min = $wordcounts[ $word ];
-
}
-
$ratio = 18.0 / ( $max — $min );
-
?>
-
<html>
-
<head>
-
<style type=»text/css»>
-
body { font-family: arial, verdana, sans-serif; }
-
.link { line-height: 20pt; }
-
</style>
-
</head>
-
<body>
-
<div style=»width:600px;»>
-
<?php
-
$wc = array_keys( $wordcounts );
-
sort( $wc );
-
foreach( $wc as $word )
-
{
-
$fs = (int)( 9 + ( $wordcounts[ $word ] * $ratio ) );
-
?>
-
<a class=»link» href=»http://en.wikipedia.org/wiki/<?php echo($word);
-
?>» style=»font-size:<?php echo( $fs ); ?>pt;»>
-
<?php echo( $word ); ?></a>
-
<?php } ?>
-
</div>
-
</body>
-
</html>
Fatal error: Uncaught Error: Call to undefined function split() in E:OpenServerdomainsphpCodeГлава 3. DHTMLТрюк 24. Создание диаграмм ссылокlinkgraph.php:3 Stack trace: #0 {main} thrown in E:OpenServerdomainsphpCodeГлава 3. DHTMLТрюк 24. Создание диаграмм ссылокlinkgraph.php on line 3
#1
ubunta2,16 апр 2018
-
Dron-Boy
Старожил- С нами с:
- 20 ноя 2014
- Сообщения:
- 1.041
- Симпатии:
- 126
Эта функция объявлена УСТАРЕВШЕЙ в PHP 5.3.0, и УДАЛЕНА PHP 7.0.0.
Какая версия PHP у тебя?#2
Dron-Boy,16 апр 2018
-
ubunta2
Зэк[ БАН ]
- С нами с:
- 27 июн 2017
- Сообщения:
- 947
- Симпатии:
- 28
у меня 7
— Добавлено —
а если поставлю 5 , то заработает?
я могу переставлять#3
ubunta2,16 апр 2018
-
Deonis
Старожил- С нами с:
- 15 фев 2013
- Сообщения:
- 1.523
- Симпатии:
- 504
Не версию нужно понижать, а использовать актуальные функции. Вы в документацию хоть изредка заглядывайте. Почитайте, что рекомендуют использовать вместо split
#4
Deonis,16 апр 2018
-
Danil005
Активный пользователь- С нами с:
- 2 янв 2015
- Сообщения:
- 528
- Симпатии:
- 30
Переставишь на 5-ю, будут проблемы с функциями из 7-го. Это палка о двух концах.
Что тебе мешает использовать explode?#5
Danil005,16 апр 2018
-
Dron-Boy
Старожил- С нами с:
- 20 ноя 2014
- Сообщения:
- 1.041
- Симпатии:
- 126
Учись чел, будь внимательней и может толк будет.
#6
Dron-Boy,16 апр 2018
-
ubunta2
Зэк[ БАН ]
- С нами с:
- 27 июн 2017
- Сообщения:
- 947
- Симпатии:
- 28
какая и где об этом почитать?
#7
ubunta2,16 апр 2018
-
Dron-Boy
Старожил- С нами с:
- 20 ноя 2014
- Сообщения:
- 1.041
- Симпатии:
- 126
split
#8
Dron-Boy,16 апр 2018
-
Danil005
Активный пользователь- С нами с:
- 2 янв 2015
- Сообщения:
- 528
- Симпатии:
- 30
Мне кажется или он тупо игнорирует другие сообщения?))
Просто ему это написали несколько человек…#9
Danil005,16 апр 2018
-
ubunta2
Зэк[ БАН ]
- С нами с:
- 27 июн 2017
- Сообщения:
- 947
- Симпатии:
- 28
все понял спасибо
#10
ubunta2,16 апр 2018
-
artoodetoo
СуперстарКоманда форума
Модератор- С нами с:
- 11 июн 2010
- Сообщения:
- 10.827
- Симпатии:
- 1.174
- Адрес:
- там-сям
#11
artoodetoo,16 апр 2018
-
mahmuzar
Старожил- С нами с:
- 6 апр 2012
- Сообщения:
- 4.633
- Симпатии:
- 425
- Адрес:
- РД, г. Махачкала.
Вероятно он все воспринимает иначе.).
#12
mahmuzar,16 апр 2018
-
Deonis
Старожил- С нами с:
- 15 фев 2013
- Сообщения:
- 1.523
- Симпатии:
- 504
А может просто думает очень плавно…
#13
Deonis,16 апр 2018
Dron-Boy и mahmuzar нравится это.
(Вы должны войти или зарегистрироваться, чтобы разместить сообщение.)
- Ваше имя или e-mail:
- У Вас уже есть учётная запись?
-
- Нет, зарегистрироваться сейчас.
- Да, мой пароль:
-
Забыли пароль?
-
Запомнить меня
Если сайт уже давно не молод, то с большой долей вероятности чудо не произойдет. В лучшем случае начнут появляться разного рода ошибки, а в худшем — вы увидите белый экран, дзен веб-разработки. В этот момент хочется по-быстрому переключить все обратно и забыть о своей внезапной слабости.
Но предположим, что ваша сильная сторона — настойчивость, к тому же вы располагаете некоторым количеством времени для экспериментов. Давайте попробуем все починить.
Резервные копии
Делаем резервные копии сайта (а заодно и баз данных). Ведь кто не делает резервные копи — сам себе враг, верно? Для разного рода экспериментов имеет смысл добавить еще один сайт на хостинге и скопировать в него файлы, которые мы сейчас будем править.
Журналы ошибок
Настроим ведение журнала ошибок PHP в файл .htaccess (если он не был настроен ранее):
php_value display_errors 0
php_value log_errors 1
php_value error_log /home/vasya/domains/mysite.ru/logs/error.log
Работа с MySQL
Допустим, сайт использует базы данных, и вы видите ошибки вроде такой:
Fatal error: Uncaught Error: Call to undefined function mysql_connect()
Это оттого, что в современных версиях PHP (начиная с PHP 5.5.0) оригинальное расширение MySQL не поддерживается. Разработчики рекомендуют использовать MySQLi или PDO. Попробуем перейти на MySQLi, это просто:
Предположим, что сайт написан с использованием процедурного подхода, который представляет собой классический говнокод многие и сейчас считают лаконичным и эффективным решением. В таком случае, следующую устаревшую конструкцию для подключения к базе данных:
$link = mysql_connect(‘localhost’, $user, $password)
mysql_select_db($dbname, $link)
mysql_query(‘set names cp1251’)
можно заменить на:
$link = mysqli_connect(‘localhost’, $user, $password, $dbname)
mysqli_query($link, ‘set names cp1251’)
для запросов:
$result=mysql_query($query,$cid)
заменить на:
$result=mysqli_query($cid, $query)
Другие популярные функции легко меняются на их аналоги с буквой ‘i’:
mysqli_fetch_array()
mysqli_fetch_row()
mysqli_fetch_assoc()
mysqli_fetch_array()
mysqli_num_rows()
mysqli_insert_id()
mysqli_close()
В результате этих несложных действий данные из БД должны успешно собираться и отправляться.
Кодировка
Настоящий олдскул — это сайт в CP1251 (как минимум). Всё превратилось в ромбики или прочие козяблики?
Скорее всего, достаточно будет указать кодировку в .htaccess таким образом:
php_value default_charset «cp1251»
Регулярные выражения
Также вы можете наблюдать ошибки следующего рода:
Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
Это означает, что модификатор /e, который позволял передать произвольной функции результат регулярного выражения, теперь не поддерживается. В таких случаях рекомендуется использовать функцию preg_replace_callback
Допустим, у нас есть такое регулярное выражение:
$string=preg_replace(«/:([a-z]{1,10}):/e», «print_smile(‘\1’)», $string)
с заменой на preg_replace_callback оно должно выглядеть вот так:
$string=preg_replace_callback(«/:([a-z]{1,10}):/», create_function(‘$matches’, ‘return print_smile($matches[1])’), $string)
здесь все просто, регулярное выражение теперь указывается в качестве первого аргумента (без модификатора /e, разумеется), а в качестве второго аргумента указывается анонимная функция (которая будет выполнена после применения регулярного выражения) с двумя аргументами: массив $matches, где будут сохранены данные, совпадающие с регулярным выражением и вызов внешней функции с аргументами. В данном примере внешняя функция называется print_smile и ей передается аргументом первое найденное вхождение. То, что в preg_replace было \1 (первое найденное вхождение) станет $matches[1] (если аргументов было больше, то будет $matches[2], $matches[3] и так далее).
Вот еще один пример, посложнее:
Было так:
$out=preg_replace(«/<[Rr][Mm]( [Mm][Ss][Gg]=[’»]{0,1}|)(.*?)([’»]{0,1})>(.*?)</[Rr][Mm]>/es», «feed_out_sub_rm(‘\2′,’$base_prefix’,’$nick’,’$id_entry’)», $out)
Стало вот так:
$out=preg_replace_callback(‘/<[Rr][Mm]( [Mm][Ss][Gg]=[’»]{0,1}|)(.*?)([’»]{0,1})>(.*?)</[Rr][Mm]>/s’, create_function(‘$matches’, ‘return feed_out_sub_rm($matches[2], «‘.$base_prefix.'», «‘.$nick.'», «‘.$id_entry.'») ‘), $out)
здесь легко запутаться в кавычках, будьте внимательны.
Копаясь в регулярных выражениях, можно вспомнить еще про две функции, которые с версии PHP 5.3.0 считаются устаревшими (и не поддерживаются). Симптомы следующие:
Fatal error: Uncaught Error: Call to undefined function ereg_replace()
Если регулярное выражение в ereg_replace простое, то можно обойтись просто установкой граничных символов, как здесь:
$str=ereg_replace(«[rtn]»,»»,$str)
$str=preg_replace(«/[rtn]/»,»»,$str)
Аналогичный симптом:
Fatal error: Uncaught Error: Call to undefined function split()
Было:
$var_pair=split(«=»,$tmp[3])
Стало:
$var_pair=explode(«=»,$tmp[3])
Если регулярное выражение посложнее, то пробуем преобразовать к preg_split.
На этом пока все. Удачной отладки.
Много полезных материалов по теме можно найти на сайте разработчиков.
Если что-то не получается, или ваш случай совсем не похож на наши примеры — пишите комментарии, попробуем разобраться вместе.













![[IMG]](https://php.ru/forum/threads/oshibka-on-line-3.70255/proxy.php?image=https%3A%2F%2Fmedia.makeameme.org%2Fcreated%2Fhurray-vp7m1t.jpg&hash=843f95413710aa2636a86c588bca124f)
![[IMG]](https://php.ru/forum/threads/oshibka-on-line-3.70255/proxy.php?image=https%3A%2F%2Fdemotos.ru%2Fsites%2Fdefault%2Ffiles%2Fcaricatures%2F2016-08-16-1471342372.jpg&hash=5e162bf67abeafc578350ca3e9b18ea9)

