2016-05-26 2 views
1

У вас есть определенная проблема. Я занимаюсь разработкой автоматизированного скрипта в PHP, чтобы помочь в создании демонстрационного веб-приложения, если клиент хочет установить демонстрационный сайт.Скопируйте файлы на сервер Windows с помощью PHP

Я использую выделенный сервер Plesk.

Мое намерение состоит в том, чтобы создать новый суб-домен, создать новую базу данных, скопировать базу данных из других, скопируйте файлы сайт из другой папки и, наконец, по электронной почте клиенту своих учетных данных для входа и т.д.

I используя API-интерфейс Plesk API RPC для создания пользователя поддомена, базы данных и базы данных, который работает отлично. У меня есть база данных, копирующая схему из других источников, и у меня есть работа электронной почты. Единственная часть, которая ускользает от меня, - это копирование файлов из одной папки в другую.

Исходная папка находится в той же папке «httpdocs», что и папка назначения. Первоначальная проблема, с которой я столкнулся, это проблема open_basedir, которую я исправил, но теперь у меня есть проблема с разрешением.

Я знаю, что не могу chmod с окнами. Я попытался с помощью XCOPY через Exec(), который возвращает

string(13) "Access denied" 

Я также попытался как CACLS и Icacls, оба из которых дают мне подобную ошибку

string(57) "Successfully processed 0 files; Failed processing 1 files" 

Короткие давая все права доступа к папке httpdocs. Я немного потеряю, как лучше всего подходить к этому. Любые советы/помощь будут высоко оценены.

+0

Не могли бы вы поделиться тем, что вы пытаетесь достичь с помощью xcopy/icacls? –

ответ

1

Этот скрипт работает для меня:

<?php 

echo(system('xcopy /Y /Z "C:\Inetpub\vhosts\example.tld\httpdocs\index.html" "C:\Inetpub\vhosts\example.tld\httpdocs\index2.html"')); 

Вы можете использовать XCOPY:

C:\Inetpub\vhosts\example.tld\httpdocs>xcopy index.html index5.html 
Does index5.html specify a file name 
or directory name on the target 
(F = file, D = directory)? F 
C:index.html 
1 File(s) copied 

Но не во всех случаях:

C:\Inetpub\vhosts\example.tld\httpdocs>xcopy /O index.html index4.html 
Does index4.html specify a file name 
or directory name on the target 
(F = file, D = directory)? F 
Access denied 
0 File(s) copied 

Также вы можете использовать Icacls:

C:\Inetpub\vhosts\example.tld\httpdocs>icacls index3.html /grant ftp3:(F) 
processed file: index3.html 
Successfully processed 1 files; Failed processing 0 files 

Вы можете даже отключить inheretence:

C:\Inetpub\vhosts\example.tld\httpdocs>icacls index4.html /inheritance:r 
processed file: index4.html 
Successfully processed 1 files; Failed processing 0 files 
+0

Привет, спасибо за ответ, как уже было сказано, я уже пробовал эти методы с помощью PHP, они, похоже, не работали.Я дам им еще одну попытку, если бы это было что-то, что я делал неправильно, и дайте знать, как я это делаю. – user1530205

+0

Я выполняю эти команды под пользователем системы подписки (а не как администратор) и с PHP (проверьте скрипт в ответ), поэтому никаких ограничений на использование xcopy из PHP не существует. –

+0

Хотя я все еще не мог получить xcopy для работы из-за отказа в доступе, мне удалось взять то, на что вы ответили, и немного подкрутить его, чтобы настроить разрешения с помощью icacls, а затем с помощью xcopy скопировать папки. Для тех, кто пытается использовать аналогичные функции, пожалуйста, найдите пример того, что я сделал ниже; – user1530205

1

мне удалось решить мою затруднительное используя следующий код;

system('icacls "C:\Inetpub\vhosts\domain.ltd\httpdocs\destination_subdomain" /grant:r "USER_USERNAME":(OI)(CI)F'); 
    system('xcopy /y /z /e "C:\Inetpub\vhosts\domain.ltd\httpdocs\source_subdomain" "C:\Inetpub\vhosts\domain.ltd\httpdocs\destination_subdomain\"'); 
    system('icacls "C:\Inetpub\vhosts\domain.ltd\httpdocs\destination_subdomain" /grant:r "USER_USERNAME":(OI)(CI)RX'); 

Первая строка устанавливает полные разрешения для выбранного имени пользователя в папке назначения.

Вторая строка использует xcopy для копирования всех папок и подпапок, даже пустых из исходной папки в папку назначения.

Третья строка сбрасывает разрешения для целевой папки обратно на чтение и выполнение только.

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