2010-09-21 5 views
6

я использовал этот базовый сценарий:PHP MkDir() CHMOD и разрешения

$folderPath = "../path/to/$folder/"; 
mkdir("$folderPath"); 

я создать этот каталог, а затем загрузить в него фотографии. Я делаю это в течение 4-5 месяцев, и вдруг я начинаю получать ошибки «FORBIDDEN», когда я пытаюсь просмотреть содержимое папки через веб-браузер.

Каталог создается так же, как и фотографии до сих пор загрузки без проблем, но я не могу получить доступ к фотографии

Я пытался переписывать сценарий и с помощью CHMOD, чтобы изменить разрешения, но я не имею никакой удачи на всех

все старые папки были созданы с : -w- rwx rx rx

и я не могу получить это воссозданное

Я попытался добавить CHMOD строки в мой сценарий:

$folderPath = "../sales/inventory/$folder/"; 
mkdir("$folderPath"); 
chmod("$folderPath", 0755); 

, но я не могу воссоздать то же разрешение, я пытаюсь понять, как CHMOD работает, но я не могу понять, как чтобы эта основная функция снова работала правильно

+2

принять некоторые ответы, если вы хотите, чтобы люди вам помогли – Galen

+0

Этот код меня раздражает, вы дезинфицируете/фильтруете '$ folder'? Если нет, то это будет мое первое предположение о том, почему это прекратилось, потенциальный секретный секрет. –

+0

это не весь скрипт, у меня есть фильтры в папке $ – Thomas

ответ

9

Попробуйте найти файл HTAccess, в котором будет упомянута опция «Параметры -Indexes», поскольку в основном это используется для того, чтобы не показывать содержимое папки в веб-браузере , Файл должен быть найдены следующим образом: -

  • В папке «root_folder/sales/inventory/$folder/», где «$folder» является, как указано в вашем коде.
  • Если не найдено, попробуйте ввести его в папку "root_folder/sales/inventory /".
  • Если не найдено, попробуйте ввести его в папку "root_folder/sales /".
  • Если не найдено, попробуйте ввести его в папку "root_folder /".

Когда вы получите код «Options -Indexes», написанной в файле Htaccess, вы можете удалить/комментировать эту строку кода оттуда, или вы также можете написать другой файл Htaccess в вашей требуемой папке "$folder », где код будет« Индексы опций ».

Также на странице PHP, логика должна быть такая: -

<?php 
$folderPath = "../sales/inventory/$folder/"; 
mkdir("$folderPath"); 
chmod("$folderPath", 0755); 

// Use of "copy()"/"move_uploaded_file()" function here, using some "$targetFile" variable. 
chmod($targetFile, 0755); 
?> 

Это поможет вам, когда вы будете отменяя связь/удаление загруженных файлов из папки «$ папки».

Надеюсь, это поможет.

+0

спасибо за помощь, это помогает, но у меня все еще есть проблема с фактическими разрешениями, отражающими то, что я подключаю к скрипту, например, ваш пример отлично работает, за исключением того, что, когда я смотрю на разрешения из дерева каталогов, созданная папка $ не является rwx rx rx, как и следовало ожидать, но вместо этого выходит как rwx rx --- – Thomas

+0

на второй взгляд. Я просто перечитаю, что вы сказал, и я, должно быть, пропустил chmod в части загрузки файлов в конце, я попытался добавить это к сценарию загрузки, и он отлично работает. Я очень ценю помощь, которую все, кажется, работает нормально, пока я просто не могу понять, почему это сломалось в первую очередь. – Thomas

+0

@thomas - Это обычная часть, в которой я тоже делал это неправильно, когда я сам был посвежее. Так что не о чем беспокоиться и подбадривать! ** Best of Luck !!! ** –

2

Если вы находитесь в общей среде, вы также можете отправить chown после загрузки, чтобы быть в безопасности. Особенно, если вы используете свой веб-сервер под другим пользователем, кроме вашего виртуального хоста, имеет разрешение на доступ (EG: «nobody» vs «mysite».) Это часто встречается с серверами cPanel, FWIW.

6

Если ваша переменная $ folder включает в себя некоторые подкаталоги, то ваши родительские каталоги, возможно, не будут закодированы в правильных разрешениях. Это была проблема, с которой я столкнулся на наемном сервере OVH Gentoo.

Представьте себе, что $folder = '/store1/ally23/shelf42'; так что ваша окончательная структура каталогов ../sales/inventory/store1/ally23/shelf42, и вы хотите 0777 permisions. Вы делаете:

mkdir($folderPath, 0777, true) || chmod($folderPath, 0777); 

Только последний каталог shelf42 будет права измененными на 0777. Промежуточные каталоги создаются с разрешениями по умолчанию (в моем случае 0744).

В PHP-команде chmod нет рекурсивной опции, поэтому вам нужно перебирать промежуточные каталоги и chmod их по отдельности.

+0

Я пробовал 'mkdir ($ folderPath, 777)', и это не сработало. Я понял, что это произошло из-за [неправильных разрешений] (http://digitalfortress.tech/php/difference-file-mode-0777-vs-777/). Как примечание, 0 предшествующий 777 очень важен. –

Смежные вопросы