How to test a PHP script
PHP is a widely-used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML. PHP runs on all major operating systems, from Unix variants including Linux, FreeBSD, Ubuntu, Debian, and Solaris to Windows and Mac OS X. It can be used with all leading web servers, including Apache, Nginx, OpenBSD servers to name a few; even cloud environments like Azure and Amazon are on the rise.
Below are some of the ways in which a PHP script can be tested.
Testing Simple PHP Script
1. Create a file with the following contents. Give the file a name such as myphpInfo.php:
2. Copy the file to the your webservers DocumentRoot directory, for example – /var/www/html. You may have a different DocumentRoot directory depending on which webserver you are using and the configuration done for it.
3. Change the permissions to 755 (Linux only):
4. Call the file from a browser:
http://Fully-Qualified-Hostname:PORT#/phpinfo.php
Testing a PHP Script that uses Database Connections
1. Create a file with the following contents. Give the file a name such as phpdbchk.php:
$query = 'SELECT SYSDATE FROM DUAL'; $stmt = ociparse($conn, $query); ociexecute($stmt, OCI_DEFAULT); print 'Checking for the Date and Database Connectivity
'; $success = 0; while (ocifetch($stmt)) < print "Date: " . ociresult($stmt, "SYSDATE") . "
\n"; $success = 1; > if ($success) < print 'Success.'; > else < print 'Failed to retrieve the date.
\n'; > OCILogoff($conn); print 'PHP Configuration
'; print '======================'; phpinfo(); ?>
2. Set ORACLE_HOME and TNS_ADMIN to the proper values.
3. Copy the file to the DocumentRoot directory.
4. Modify the variables $username, $password, $database_hostname, $database_port, $database_sid and $database_srvc as necessary for the test system
5. Change the permissions to 755 (Linux only):
6. Call the file from a browser:
http://Fully-Qualified-Hostname:PORT#/phpdbchk.php
The following error occurs if ORACLE_HOME\network\admin\tnsnames.ora is not set up correctly or missing. If it is missing, the one from the database can be copied over and used as is.
Warning: ocilogon(): _oci_open_server: ORA-12560: TNS:protocol adapter error in [oracle_home]\apache\apache\htdocs\phpdbchk.php on line 25 ORA-12560: TNS:protocol adapter error
Running PHP Script to another directory outside of htdocs
For example, if you want to place php scripts to $ORACLE_HOME/Apache/Apache/phpsrc and run them from there via browser e.g http:FQHN:[port]/php/info.php, then do the following:
1. make directory $ORACLE_HOME/Apache/Apache/phpsrc
2. Copy info.php script to $ORACLE_HOME/Apache/Apache/phpsrc
3. Edit httpd.conf and add this line:
Alias /php/ $ORACLE_HOME/Apache/Apache/phpsrc
4. Restart http server and now it should work:
Note: The php script info.php was used as an example, you can use any name you choose for your php scripts
Some more articles you might also be interested in …
Your first PHP-enabled page
Create a file named hello.php and put it in your web server’s root directory ( DOCUMENT_ROOT ) with the following content:
Example #1 Our first PHP script: hello.php
Use your browser to access the file with your web server’s URL, ending with the /hello.php file reference. When developing locally this URL will be something like http://localhost/hello.php or http://127.0.0.1/hello.php but this depends on the web server’s configuration. If everything is configured correctly, this file will be parsed by PHP and the following output will be sent to your browser:
This program is extremely simple and you really did not need to use PHP to create a page like this. All it does is display: Hello World using the PHP echo statement. Note that the file does not need to be executable or special in any way. The server finds out that this file needs to be interpreted by PHP because you used the «.php» extension, which the server is configured to pass on to PHP. Think of this as a normal HTML file which happens to have a set of special tags available to you that do a lot of interesting things.
If you tried this example and it did not output anything, it prompted for download, or you see the whole file as text, chances are that the server you are on does not have PHP enabled, or is not configured properly. Ask your administrator to enable it for you using the Installation chapter of the manual. If you are developing locally, also read the installation chapter to make sure everything is configured properly. Make sure that you access the file via http with the server providing you the output. If you just call up the file from your file system, then it will not be parsed by PHP. If the problems persist anyway, do not hesitate to use one of the many » PHP support options.
The point of the example is to show the special PHP tag format. In this example we used . You may jump in and out of PHP mode in an HTML file like this anywhere you want. For more details, read the manual section on the basic PHP syntax.
Note: A Note on Line Feeds
Line feeds have little meaning in HTML, however it is still a good idea to make your HTML look nice and clean by putting line feeds in. A linefeed that follows immediately after a closing ?> will be removed by PHP. This can be extremely useful when you are putting in many blocks of PHP or include files containing PHP that aren’t supposed to output anything. At the same time it can be a bit confusing. You can put a space after the closing ?> to force a space and a line feed to be output, or you can put an explicit line feed in the last echo/print from within your PHP block.
Note: A Note on Text Editors
There are many text editors and Integrated Development Environments (IDEs) that you can use to create, edit and manage PHP files. A partial list of these tools is maintained at » PHP Editors List. If you wish to recommend an editor, please visit the above page and ask the page maintainer to add the editor to the list. Having an editor with syntax highlighting can be helpful.
Note: A Note on Word Processors
Word processors such as StarOffice Writer, Microsoft Word and Abiword are not optimal for editing PHP files. If you wish to use one for this test script, you must ensure that you save the file as plain text or PHP will not be able to read and execute the script.
Now that you have successfully created a working PHP script, it is time to create the most famous PHP script! Make a call to the phpinfo() function and you will see a lot of useful information about your system and setup such as available predefined variables, loaded PHP modules, and configuration settings. Take some time and review this important information.
Example #2 Get system information from PHP
Php html test script
БлогNot. Пишем простой тест на PHP
Пишем простой тест на PHP
- ‘q’ — отображаемый текст вопроса;
- ‘t’ — тип вопроса, соответствующий нужному тегу HTML: ‘checkbox’ для галочек «да/нет», ‘text’ для строки или числа в качестве ответа, ‘select’ — для списка, в котором нужно выбрать одно значение из нескольких. Выбор более одного значения реализуем придуманным нами элементом ‘multiselect’ , представляющим из собой группу вместе обрабатываемых checkbox’ов. На самом деле, стандартный список с атрибутом multiple тоже позволяет решить эту задачу, но не хотелось бы загружать пользователя необходимостью помнить, что множественный выбор из списка делается при зажатой клавише Ctrl;
- ‘a’ — правильный ответ, для checkbox это значение ‘1’ или ‘0’ (нужно ли включать галочку), для text — строка с ответом (длину поля будем генерировать равной длине строки с правильным ответом, так что контроль лишних разделителей и проч. опустим), для select — номер варианта в списке, который является правильным ответом (варианты нумеруются с нуля!), для multiselect — строка из единиц и нулей, разделённых символом » | «, показывающая, какие по порядку чекбоксы нужно включить, а какие не нужно;
- ‘i’ — элементы списка, нужные только для типов вопроса select и multiselect , значение содержит строки, разделённые символом » | » (элементы списка или варианты утверждений).
За каждый правильный ответ, в том числе, выбор всех «правильных» чекбоксов в ‘multiselect’, будет начисляться 1 балл, а в конце скрипт выдаст резюме о количестве и проценте правильных ответов.
В отличие от простого конвертера, в этом скрипте мы не ставили задачи сохранить пользовательский ввод, поэтому ссылка «Ещё раз!» на странице с результатами позволяет просто пройти тест повторно, введя все результаты и отметив все чекбоксы заново. Несмотря на это, программке понадобилось 2 дополнительных функции:
- error_check проверяет, всё ли хорошо с очередным элементом массива $test , и, если что-то не так, завершает выполнение скрипта. Это может пригодиться при отладке;
- strlwr_ переводит в нижний регистр строки, введённые пользователем в качестве ответов. Предполагается кодировка Windows-1251, но можно, конечно, вставить текст скрипта в файл с другой кодировкой и поменять мета-тег кодировки в заголовке.
Вот полный исходник приложения, содержащий тест всех 4 типов вопросов:
Тест на PHP
'Первым космонавтом был Юрий Гагарин','t'=>'checkbox','a'=>'1'), array ('q'=>'Первым президентом РФ был Михаил Горбачёв','t'=>'checkbox','a'=>'0'), array ('q'=>'Сколько уровней прикладных протоколов в стандартной сетевой модели OSI?','t'=>'text','a'=>'7'), array ('q'=>'Жириновский возглавляет партию ','t'=>'select','i'=>'КПРФ|ЛДПР|ЕР','a'=>'1'), array ('q'=>'Выберите верные утверждения','t'=>'multiselect', 'i'=>'2*2=4|Волга впадает в Каспийское море|Луна дальше от Земли, чем Солнце','a'=>'1|1|0') ); if (!empty($_POST['action'])) < //считаем правильные и выводим резюме $ball = 0; foreach ($test as $key=>$val) < switch ($val['t']) < case 'checkbox': if (isset($_POST[$key]) and $val['a']==1 or !isset($_POST[$key]) and $val['a']==0) $ball++; break; case 'text': if (isset($_POST[$key]) and strlwr_($_POST[$key])==strlwr_($val['a'])) $ball++; break; case 'select': if (isset($_POST[$key]) and $_POST[$key]==$val['a']) $ball++; break; case 'multiselect': $i = explode ('|',$val['a']); $cnt = 0; foreach ($i as $number=>$answer) if (isset($_POST[$key.'_'.$number]) and $answer==1 or !isset($_POST[$key.'_'.$number]) and $answer==0) $cnt++; if ($cnt==count($i)) $ball++; break; > > $p = round ($ball/count($test)*100); echo 'Верных ответов: '.$ball.' из '.count($test).', '.$p.'%.
'; echo 'Ещё раз!
'; > else < //предложить форму echo 'Отметьте верные утверждения или введите ответ или выберите верный вариант из списка.
'; $counter = 1; echo ''; foreach ($test as $key=>$val) < error_check ($val); echo ($counter++).'. '; switch ($val['t']) < case 'checkbox': echo $val['q'].' '; break; case 'text': $len = strlen ($val['a']); echo $val['q'].' '; break; case 'select': echo $val['q'].' '; break; case 'multiselect': $i = explode ('|',$val['i']); echo $val['q'].': '; foreach ($i as $number=>$item) echo $item.' '; break; > echo '
'; > echo ' '; > function error_check ($q) < $question_types = array ('checkbox', 'text', 'select', 'multiselect'); $error = ''; if (!isset($q['q']) or empty($q['q'])) $error='Нет текста вопроса или он пуст'; else if (!isset($q['t']) or empty($q['t'])) $error='Не указан или пуст тип вопроса'; else if (!in_array($q['t'],$question_types)) $error='Указан неверный тип вопроса'; else if (!isset($q['a']) or empty($q['a']) and $q['a']!='0') $error='Нет текста ответа или он пуст'; else < if ($q['t']=='checkbox' and !($q['a']=='0' or $q['a']=='1')) $error = 'Для переключателя разрешены ответы 0 или 1'; else if ($q['t']=='select' || $q['t']=='multiselect') < if (!isset($q['i']) or empty($q['i'])) $error='Не указаны элементы списка'; else < $i = explode ('|',$q['i']); if (count($i)<2) $error='Нет хотя бы 2 элементов списка вариантов ответа с разделителем |'; foreach ($i as $s) if (strlen($s)<1) < $error = 'Вариант ответа короче 1 символа'; break; >else < if ($q['t']=='select' and !array_key_exists($q['a'],$i)) $error='Ответ не является номером элемента списка'; if ($q['t']=='multiselect' ) < $a = explode ('|',$q['a']); if (count($i)!=count($a)) $error='Число утверждений и ответов не совпадает'; foreach ($a as $s) if ($s!='0' and $s!='1') < $error = 'Утверждение не отмечено как верное или неверное'; break; >> > > > > if (!empty($error)) < echo 'Найдена ошибка теста: '.$error.'
Отладочная информация:
'; print_r ($q); exit; > > function strlwr_($s) < $hi = "ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; $lo = "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя"; $len = strlen ($s); $d=''; for ($i=0; $ireturn $d; > ?>
Ниже показан вид теста и результат его прохождения.
простой тест на PHP, будет выведен на одной странице, но типы вопросов могут быть разными
простой тест на PHP, страница с результатами 🙂
05.10.2015, 18:14 [27649 просмотров]