- създаване на фаил в папка
12
WT форуми -> PHP MySQL ASP.NET -> създаване на фаил в папка
Създайте нова тема Напишете отговор 
Автор Съобщение
systems
Турист
Турист

Регистриран на: 28/09/2012 9:04 pm

Support: 3
Bonus: 6
Мнения: 251
Мнение 10/08/2018 6:54 pm     създаване на фаил в папка Отговорете с цитат


Добър вечер това е скрипт с които създавам папка въпроса ми е следния има ли начин
по които в създадената папка да се създаде празен фаил index.html или index.php
автоматично както създавам папка благодаря ви.


PHP code:
<?php
$directory=strtolower("/тук директорията/$user");
if (!is_dir($directory))
{
mkdir("$directory",777,true)or die('Грешка при създаването на директория!');

}
?>
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 83
Bonus: 178
Мнения: 1747
Мнение 10/08/2018 8:11 pm      Отговорете с цитат


PHP code:

$file = fopen("/path/to/dir/index.php", "w");
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
systems
Турист
Турист

Регистриран на: 28/09/2012 9:04 pm

Support: 3
Bonus: 6
Мнения: 251
Мнение 10/08/2018 9:22 pm      Отговорете с цитат


teroristd написа:
PHP code:

$file = fopen("/path/to/dir/index.php", "w");


Да но нестава несъздава index.php използвам debian 5.0.3 и PHP Версия: 5.6.36-1+0~20180714182146.1+stretch~1.gbpa3dade

ако е от значение.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
systems
Турист
Турист

Регистриран на: 28/09/2012 9:04 pm

Support: 3
Bonus: 6
Мнения: 251
Мнение 10/08/2018 11:53 pm      Отговорете с цитат


реших да тествам с txt фаил създава го но ако опитам да задам директория като
/var/www/forlders/newfile.txt веднага казва Unable to open file! а в този му вид без да задавам директория работи.

има ли някакъв начин да проработи със субдиректорий?


PHP code:
<?php
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");

$txt = "John Doe\n";
fwrite($myfile, $txt);

$txt = "Jane Doe\n";
fwrite($myfile, $txt);

fclose($myfile);
?>


моля ви помогнете ми!!!
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 158
Bonus: 315
Мнения: 1475
Мнение 11/08/2018 7:30 am      Отговорете с цитат


Ако се опитваш да записваш в някоя външна директория, най-вероятно нямаш права.

Не би трябвало да е проблем да записваш в субдиректории, примерно:

PHP code:
mkdir ("subdir");
fopen("subdir/newfile.txt", "w");


И ползвай относителни пътища, за да си сигурен, че подадения път е в директорията на сървъа.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
raiden
Активен
Активен

Регистриран на: 08/12/2006 10:13 am

Support: 189
Bonus: 464
Мнения: 2181
Мнение 11/08/2018 10:45 am      Отговорете с цитат


Забелязах, че използваш strtolower за пътя. Имай предвид, че в unix базираните ОС имената на файловете и папките са case sensitive. Другият възможен проблем е apache user-а да няма права в папката. Опитах при мен (Ubuntu 18.04, PHP 7.2.7) 4 варианта за създаване на файл, само 2 от тях сработиха
Опитай така и напиши какво връща:
PHP code:
$currrentDir = realpath(getcwd());
$dirToCreate = "folder123";
$dirPath = escapeshellarg($currentDir . "/" . $dirToCreate);
$fileToCreate = "index.php";
$filePath = escapeshellarg($currentDir . "/" . $dirToCreate . "/" . $fileToCreate);
$out = array();
$out['pwd'] = $currentDir;
$out['dirToCreate'] = $dirPath;
$out['fileToCreate'] = $filePath;
exec("ls -laR", $out);
exec("mkdir " . $dirPath, $out);
// touch($filePath); //Това не работи при мен
// file_put_contents($filePath, ''); //Това също не работи
// fclose(fopen($filePath, "w")); //Това работи
exec("touch " . $filePath, $out); //Това също работи
exec("ls -laR", $out);
print_r($out);


EDIT: Хрумна ми нещо, дай и резултата от:
PHP code:
print decoct(umask());
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
systems
Турист
Турист

Регистриран на: 28/09/2012 9:04 pm

Support: 3
Bonus: 6
Мнения: 251
Мнение 11/08/2018 11:53 am      Отговорете с цитат


raiden написа:
Забелязах, че използваш strtolower за пътя. Имай предвид, че в unix базираните ОС имената на файловете и папките са case sensitive. Другият възможен проблем е apache user-а да няма права в папката. Опитах при мен (Ubuntu 18.04, PHP 7.2.7) 4 варианта за създаване на файл, само 2 от тях сработиха
Опитай така и напиши какво връща:
PHP code:
$currrentDir = realpath(getcwd());
$dirToCreate = "folder123";
$dirPath = escapeshellarg($currentDir . "/" . $dirToCreate);
$fileToCreate = "index.php";
$filePath = escapeshellarg($currentDir . "/" . $dirToCreate . "/" . $fileToCreate);
$out = array();
$out['pwd'] = $currentDir;
$out['dirToCreate'] = $dirPath;
$out['fileToCreate'] = $filePath;
exec("ls -laR", $out);
exec("mkdir " . $dirPath, $out);
// touch($filePath); //Това не работи при мен
// file_put_contents($filePath, ''); //Това също не работи
// fclose(fopen($filePath, "w")); //Това работи
exec("touch " . $filePath, $out); //Това също работи
exec("ls -laR", $out);
print_r($out);


EDIT: Хрумна ми нещо, дай и резултата от:
PHP code:
print decoct(umask());



резултата от:
<?php
print decoct(umask());
?>
е 22

ето резултата от горния код:
Array ( [pwd] => [dirToCreate] => '//var/www/view/pic/testuser253/' [fileToCreate] => '//var/www/view/pic/testuser253//index.php' [0] => .: [1] => total 4376 [2] =>


папаката си я създава но самия фаил index.php неще трябва ръчно да го създам
иначе папката си има права:

създаване на фаил в папка
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
raiden
Активен
Активен

Регистриран на: 08/12/2006 10:13 am

Support: 189
Bonus: 464
Мнения: 2181
Мнение 11/08/2018 12:13 pm      Отговорете с цитат


В момента правата на папката са 466, което е странно. При umask 022 и mkdir със 777 резултата би трябвало да е 755.
Опитай преди да извикаш mkdir да сложиш umask(0); и виж с какви права ще я създаде. Опитай и варианта за създаване на файл с exec("touch /path/to/file.php");

EDIT: Най-добре дай да видим owner-ите и правата по папките
$ls -laR /var/www/view/pic
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
systems
Турист
Турист

Регистриран на: 28/09/2012 9:04 pm

Support: 3
Bonus: 6
Мнения: 251
Мнение 11/08/2018 12:47 pm      Отговорете с цитат


Ето правата:

/var/www/view/pic/testusers251:
общо 8
dr--rwxrwt  2 www-data www-data 4096 авг 10 19:34 .
drwxrwxrwx 50 root     www-data 4096 авг 10 22:11 ..

Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
systems
Турист
Турист

Регистриран на: 28/09/2012 9:04 pm

Support: 3
Bonus: 6
Мнения: 251
Мнение 11/08/2018 12:51 pm      Отговорете с цитат


systems написа:
Ето правата:

/var/www/view/pic/testusers251:
общо 8
dr--rwxrwt  2 www-data www-data 4096 авг 10 19:34 .
drwxrwxrwx 50 root     www-data 4096 авг 10 22:11 ..



най-после стана съдаде фаила ето така:
PHP code:
<?php
exec("touch /var/www/view/pic/testuser253/index.php");
?>
PHP code:
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
raiden
Активен
Активен

Регистриран на: 08/12/2006 10:13 am

Support: 189
Bonus: 464
Мнения: 2181
Мнение 11/08/2018 1:51 pm      Отговорете с цитат


systems написа:
systems написа:
Ето правата:

/var/www/view/pic/testusers251:
общо 8
dr--rwxrwt  2 www-data www-data 4096 авг 10 19:34 .
drwxrwxrwx 50 root     www-data 4096 авг 10 22:11 ..



най-после стана съдаде фаила ето така:
PHP code:
<?php
exec("touch /var/www/view/pic/testuser253/index.php");
?>


Правата не са ОК.
www-data user-а има права само за четене, от там идва проблема. Не виждам при това положение как е сработил touch-а. При мен резултата при тези права е очаквания:
dr--rwxrwt  2 srs srs    4096 авг 11 11:17 noPermission/
$ touch noPermission/test.php
touch: cannot touch 'noPermission/test.php': Permission denied

Всъщност ако целта на празния файл е просто да не се листват файловете в папката, можеш да го постигнеш и с 1 .htaccess файл във /var/www/view/pic. В него слагаш Options -Indexes и не се мъчиш повече.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
systems
Турист
Турист

Регистриран на: 28/09/2012 9:04 pm

Support: 3
Bonus: 6
Мнения: 251
Мнение 11/08/2018 2:27 pm      Отговорете с цитат


Оправих проблема със правата сега се създава папка с права www четене и запис навсякъде но остана проблема със създаването на празен фаил индекс.

PHP code:
  $structure = strtolower("/var/www/view/pic/$user");
if (!mkdir($structure, 0777, true)) {
die('Failed to create folders...');
}
if(!chmod($structure, 0777)){
die('Failed to chmod');
}
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
12
Страница 1 от 2


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети