мой корневой каталог
/var/www/html/
я хочу создать каталог в / var / www /
т.е. /var/www/myfolder
я выполняю create_dir.php
от
/var/www/html/site/create_dir.php
когда я запускаю эту программу, она не может создать папку.
в журнале я получаю разрешение отрицать.
Обновить
Это мой код
<?php
$os_type=php_uname('s');
$cur_file_path=$_SERVER['PHP_SELF'];
echo "File path:$cur_file_path<br>";
$scount=substr_count($cur_file_path, '/');
echo "/ count:$scount<br>";
$doc_root= $_SERVER['DOCUMENT_ROOT'] ;
echo "doc root:$doc_root<br>";
if($os_type=='Linux')
{
$ds=substr_count("$cur_file_path","/");//directory seperator
echo "Count of /=$ds<br>";
}
if($os_type=='Windows')
{
$ds=substr_count("$cur_file_path","'\'");//directory seperator
}
$path="../";
for($i=1;$i<$scount;$i++)
{
$path.="../";
}
$dir="myfolder";
exec("mkdir ".$dir);
?>
как решить это.
Это проблема безопасности, так как она дает миру доступ для чтения и записи. Может быть, что ваш апаш У пользователя нет прав на чтение / запись в каталоге.
Вот что вы делаете, если $os_type=='Linux'
:
1. Убедитесь, что все файлы принадлежат группе Apache и пользователю. В Linux это WWW-данные группа и пользователь
exec('chown -R www-data:www-data /path/to/webserver/www',$ouput,$result);
2. Далее включены все члены WWW-данные группа для чтения и записи файлов
exec('chmod -R g+rw /path/to/webserver/www',$ouput,$result);
Php mkdir()
Функция теперь должна работать без возврата ошибок. Вы также можете увидеть вывод ошибки в $ output в случае ошибки.
Существует еще один способ создания каталога с использованием ftp:
Вы можете попробовать mkdir с помощью ftp, mkdir работает с потоковыми упаковщиками, так что писать можно mkdir('ftp://user:pass@server/mydir');
ИЛИ ЖЕ
Если у вас есть проблемы с БЕЗОПАСНЫЙ РЕЖИМ Действует ограничение, т. Е. Если вы пытаетесь создать и получить доступ к subdirectorys
рекурсивный вы можете использовать FTP-Lib как это.
<?php
DEFINE ('FTP_USER','yourUser');
DEFINE ('FTP_PASS','yourPassword');
/**
* Returns the created directory or false.
*
* @param Directory to create (String)
* @return Created directory or false;
*/
function mkDirFix ($path) {$path = explode("/",$path);
$conn_id = @ftp_connect("localhost");
if(!$conn_id) {
return false;
}
if (@ftp_login($conn_id, FTP_USER, FTP_PASS)) {
foreach ($path as $dir) {
if(!$dir) {
continue;
}
$currPath.="/".trim($dir);
if(!@ftp_chdir($conn_id,$currPath)) {
if(!@ftp_mkdir($conn_id,$currPath)) {
@ftp_close($conn_id);
return false;
}
@ftp_chmod($conn_id,0777,$currPath);
}
}
}
@ftp_close($conn_id);
return $currPath;
}
?>
Может быть, это поможет.
Назначение «корневого» каталога — защитить хост-компьютер от вредоносного / ошибочного кода, который может повредить информацию, хранящуюся в других частях компьютера. Это дает вам область, в которой вы можете безопасно выполнять свои действия, в то же время явно и преднамеренно предотвращая вмешательство в любые данные «выше» вашего корневого каталога. Корень настолько низок, насколько вы можете, по замыслу. Любой хост-компьютер, имеющий уязвимость, которая позволяет вам получать доступ к данным за пределами назначенного вам пространства, является хост-компьютером, который требует взлома; надеюсь, вы не найдете многих из них.
Возможно, стоит реструктурировать каталоги внутри корневого каталога, чтобы имитировать более глубокий корень, чем тот, на который вы на самом деле ограничены. В противном случае необходимо убедить системного администратора хост-компьютера предоставить вам дополнительный доступ.
В правильно спроектированной и управляемой системе то, что вы запрашиваете, намеренно невозможно, и столкновение с этим конкретным блокпостом является скорее признаком того, что вам, возможно, придется пересмотреть то, что вы хотите сделать в свете ваших ограничений. Даже если это происходит с вашего собственного компьютера, и вы являетесь системным администратором, было бы разумно изучить все возможные пути достижения целей, которые вы надеетесь достичь, не преодолев этот барьер. ЛЮБОЕ означает, что вы реализуете, чтобы позволить контролируемому веб-коду преодолеть этот барьер, — это уязвимость в вашей системе, которую кто-то где-то ищет возможность использовать.