Помощь
Все разделы помощи → Вопросы по виртуальному хостингу
- PHP-скрипт не закачивает файлы на сервер! Что делать?
-
Скрипт запускается с правами nobody, соответственно у директории, в которую он пытается положить закачиваемый файл, должны быть права на доступ 777.
- Как установить PHP5 в режиме CGI?
-
Для установки php в режиме cgi, необходимо выполнить следующие действия:
-
Создать текстовый файл с названием php (без расширения и без пробелов в имени) следующего содержания:
#!/usr/bin/php-cgi -cphp-cgi.ini
- Закачать созданный файл php в cgi-bin директорию своего сайта
- Установить права на файл php 755 (-rwxr-xr-x)
-
В файле httpdocs/.htaccess своего домена прописать:
Action phpcgi-script /cgi-bin/php
AddHandler phpcgi-script .php
-
Если вы хотите иметь собственные настройки php, скачайте файл настроек:
http://soft.mchost.ru/php-cgi.ini
Загрузите файл php-cgi.ini в папку cgi-bin вашего домена, где уже лежит файл php
-
- Какая версия php установлена на вашем хостинге?
-
На хостинге установлен PHP версии 5.
- Какие права доступа должны быть у PHP скриптов?
-
Атрибуты к php, так же как и к html, должны быть 644 (rw-r--r--). Запись-чтение для владельца и только чтение для всех остальных.
- Не могу удалить каталог. Permission denied.
-
Скорее всего, каталог или файл был создан PHP-скриптом и имеет owner'а nobody, соответственно не подлежит удалению от вашего имени. Удалить такой каталог со всем содержимым можно скриптом примерно такого вида:
<?
$deldir = "ПУТЬ_К_ДИРЕКТОРИИ";
rmdirr($deldir);
function rmdirr($dirname)
{
if (!file_exists($dirname)) {
return false;
}
if (is_file($dirname)) {
return unlink($dirname);
}
$dir = dir($dirname);
while (false !== $entry = $dir->read()) {
if ($entry == '.' || $entry == '..') {
continue;
}
rmdirr("$dirname/$entry");
}
$dir->close();
return rmdir($dirname);
}
?>Скрипт следует вызывать через браузер. В переменной $deldir в начале скрипта следует указать путь к удаляемой директории относительно того места, откуда вызывается скрипт. Будут удалены все файлы и подкаталоги, принадлежащие nobody.
- Поддерживается ли на хостинге pear?
-
Да, вы можете взять нужные скрипты с http://pear.php.net и установить их в папке httpdocs.
- При создании файлов средствами PHP файлы создаются с пользователем apache и с правами 644, поэтому я не могу ими управлять, как быть?
-
Дело в том, что PHP-сценарии, запущенные модулем mod_php, выполняются от имени пользователя apache. Соответственно, если на чтение/модификацию не были выставлены разрешения для всех (достаточно 666 - для файлов, 777 - для каталогов), то модификация созданных такими скриптами файлов (каталогов) пользователю будет запрещена (при доступе по SSH, по FTP).
Для того, чтобы проблема не возникала - нужно для такого каталога (файла) установить права, достаточные для модификации файлов, посредством функции chmod.
Сделать это рекурсивно можно, исполнив PHP-сценарий:
<?php
function chmod_R($path, $perm) {
$handle = opendir($path);
while ( false !== ($file = readdir($handle)) ) {
if ( ($file !== ".") && ($file !== "..") ) {
if ( is_file($file) ) {
chmod($path . "/" . $file, $perm);
}
else {
chmod($path . "/" . $file, $perm);
chmod_R($path . "/" . $file, $perm);
}
}
}
closedir($handle);
}
$path = $_SERVER["QUERY_STRING"];
if ( $path{0} != "/" ) {
$path = $_SERVER["DOCUMENT_ROOT"] . "/" . $path;
}
chmod_R($path, 0777);
chmod($path, 0777);
echo $path;
?>
Разместите этот файл на хостинге, в директории, доступной веб-серверу, например, как httpdocs/chmod.php
Вызывать скрипт нужно так:
http://ваш_домен/chmod.php?path_to_problem_dir
path_to_problem_dir - путь, относительно DocumentRoot для данного домена (httpdocs/ в нашем примере).
- Установлен ли у Вас модуль РНР сURL?
-
Да, у нас установлен модуль PHP cURL на всех серверах виртуального хостинга.
- Вывод ошибок в PHP
-
Иногда возникает необходимость получить информацию о том, какие ошибки возникают при выполнении PHP-скриптов. При использовании PHP как модуля Apache (по умолчанию именно так) вывод ошибок доступен в панели управления в разделе "Управление услугами", далее в таблице домена иконка "Лог ошибок".
Иногда имеет смысл включить вывод ошибок PHP-скриптов на экран. Возможно 2 случая:
-
Если вы используйте PHP-интерпретатор как модуль Apache, создайте в той директории, где находятся скрипты, файл .htaccess (если он не существует) и добавьте 2 строки, одна из которых включает вывод ошибок в браузер, а вторая определяет уровень отображаемых ошибок:
php_flag display_errors on
php_value error_reporting 2047 -
Если вы используете PHP-интерпретатор в режиме CGI, то для вывода ошибок следует в файле настроек для PHP, изменить значение параметра
display_errors = Off
на
display_errors = On
Кроме этого, надо изменить значение параметра error_reporting со значения E_ALL & E_NOTICE на простое E_ALL (по желанию).
Рекомендуем включать вывод всех ошибок, указывая для директивы error_reporting значение E_ALL(2047).
-
- Использование собственного PHP
-
Существует возможность использовать PHP собственной версии на домене. Для этого понадобится тариф с поддержкой SSH-доступа.
Для того, чтобы скомпилировать такой PHP из исходных кодов, надо проделать следующее:
-
Подключиться по SSH на сервер в домашнюю директорию, а затем перейти в директорию private/:
$ cd ~/private -
Скачаем архив с нужной версией PHP. В данном примере это последняя версия ветки 5.2.х - 5.2.14 (другие версии можно найти на официальном сайте):
$ wget http://ru.php.net/get/php-5.2.14.tar.bz2/from/ru2.php.net/mirror -
Разархивируем архив:
$ tar -xjvf php-5.2.14.tar.bz2 -
Переходим в директорию только что разархивированного архива:
$ cd php-5.2.14 -
Открываем файл install-sh (он пустой и не нужен для компиляции):
$ nano -w install-sh -
Вписываем в него параметры компиляции PHP (вместо domain.tld нужно вписать имя Вашего домена) таким образом:
#!/bin/sh
./configure --prefix=/home/httpd/vhosts/domain.tld/private/php-5.2.14 --enable-force-cgi-redirect --disable-debug --enable-inline-optimization --with-bz2 --with-db4=/usr --with-curl --with-freetype-dir=/usr --with-png-dir=/usr --with-gd --enable-gd-native-ttf --without-gdbm --with-gettext --with-iconv --with-jpeg-dir=/usr --with-openssl --with-pspell --enable-xml --with-libexpat-dir=/usr --with-zlib --enable-bcmath --enable-exif --enable-ftp --enable-magic-quotes --enable-sockets --enable-calendar --enable-mbstring --enable-mbregex --enable-zip --with-xsl --with-mysqli --with-mysql --with-pdo-mysql=shared --with-libdir=lib64 - Сохраняем файл, нажав
Control+X, YиEnter. -
Делаем файл исполняемым:
$ chmod +x install-sh -
Запускаем этот скрипт:
$ ./install-sh -
После выполнения скрипта компилируем:
$ make -
Устанавливаем:
$ make install -
Переходим в директорию cgi-bin/:
$ cd ~/cgi-bin -
Создаем текстовый файл php5 (без расширения) с помощью такой команды (вместо domain.tld нужно вписать имя Вашего домена):
$ echo '#!/home/httpd/vhosts/domain.tld/private/php-5.2.14/bin/php-cgi -c php-cgi.ini' > php5 -
Делаем его исполняемым:
$ chmod +x php5 -
В директории архива PHP лежат примеры файлов настроек. Скопируем один из них, переименовав сразу в php-cgi.ini:
$ cp ../private/php-5.2.14/php.ini-dist php-cgi.iniТаким образом, в директории cgi-bin/ у нас должны находиться два файла - php5 и php-cgi.ini.
-
Переходим в директорию httpdocs/:
$ cd ~/httpdocs -
Создаем файл .htaccess:
$ nano -w .htaccess -
Вписываем в него следующее:
Action phpcgi-script /cgi-bin/php5
AddHandler phpcgi-script .phpПримечание: Если файл .htaccess уже присутствует (например, он был загружен со скриптом сайта), то надо дописать эти строки в него вместо создания файла.
- Сохраняем файл, нажав
Control+X, YиEnter -
Создаём файл phpinfo.php, чтобы проверить, что получилось:
nano -w ~/httpdocs/phpinfo.php -
Вписываем в него следующее:
<? phpinfo(); ?> - Сохраняем файл, нажав
Control+X, YиEnter. Затем открываем его в браузере: http://domain.tld/phpinfo.php
-