Не открывается файл с файл сервера

Обновлено: 07.07.2024

При открытии файла, который находится на FTP сервере (заходим на FTP через проводник) файл открывается не в определенной программа (Excel, Word, Paint и т.д.), а в браузере по умолчанию. Как сделать чтобы файл открывался в нужной программе?

ОС Windows 7x32/64.
IIS FTP на Windows 2008r2.

Во вложении скриншоты что происходит в папке FTP.

С Уважением, Петр.

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

Копирование файлов с FTP-сервера на компьютеры клиентов без замены уже имеющихся файлов
Приветствую. Такая задача. имеется фтп сервер. на нем лежит 5 папок, в каждой паке каждый день.

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

Копирование файлов с FTP-сервера
Доброго времени суток. имея небольшой багаж знаний в этой области))) создаю небольшой батник для.

Backup файлов с сервера FTP
Всем доброго времени суток. Я сделал програмку для бэкапа, она создает папки на рабочем столе.

На одном ПК стоит Opera 30.0.1835.59 по умолчанию Win7x32. На другом ПК Windows Posready2009 с IE 7 Заменил на IE. Собственно ничего не поменялось. При выборе на FTP, например, файла excel, то появляется окно (открыть/сохранить/отмена), даже если я его открою (открывается он в Excel), то файл доступен для чтения и просто откорректировать какие-нибудь данные в этом файле, а потом просто сохранить не получается, он просит указать путь, куда сохранять и при попытке сохранить его на FTP пишет ошибку (см. рис.). При этом права на папку у пользователя полные (см. рис.).
Такое ощущение, что FTP просто не предназначен для работы с файлами на нем в понимании пользователя, а работает как простой файлообменник без излишеств. Та же проблема, открывает фото с FTP сервера в Хроме, вместо IrfanView. Который месяц долблюсь и не могу найти решения. Помогите. Я бы попробовал переустановить необходимый браузер (чтоб был последним по времени установки). Возможно поможет

Тут нет решения.
Если открываешь ФТП в браузере, то браузер перехватывает файл и открывает через себя.
Надо сначала на ПК сохранить и открыть виндой.

И не пользоваться ФТП через браузер. Если ФТП открытый, то винда позволяет подключаться к ФТП как к обычному диску(ну почти, но это нюансы).

у меня такой же вопрос. Как открыть файл напрямую, а не скачивать его. Все делается через стандартный проводник windows 10, а не через браузер, но при этом когда я пытаюсь открыть какой либо файл на ftp серевере (в моем случае это мой смартфон) вместо диалога с выбором программы для открытия, меня перекидывает на стандартный браузер, а он в свою очередь предлагает скачать файл на пк Привет всем. Та же фигня. решения нет.
Есть знатоки которые могут помочь?
Win8.1x64 IE11


Скачивание файлов с FTP сервера на локальный ЖД
Здравствуйте. Возникла проблема, возможно глупая и её решение должно быть элементарным, но всё же.

Удаление дублей файлов и папок с FTP-сервера
Здравствуйте, пожалуйста помогите с написание bat файла. Надо удалить дубли файлов и папок.

Список папок и файлов с удаленного FTP сервера
Собственно, тема. Подскажите кто знает, может скрипт какой есть или как такое сделать? В.


Получение списка файлов с ftp сервера с авторизацией
Как можно получить список файлов с сервера с авторизацией. Никак не могу понять, как это сделать.


Загрузка/открытие файлов с сервера
Получаю имя и путь до файла, и вот таким образом загружаю его с сервера на ПК пользователя .


Копирование wav-файлов с FTP-сервера на локальную машину
Возникла проблема следующего рода: Есть ftp_command.txt login psw cd.

Не проблема не в аттрибутах. Файл нельзя ни удалить, ни переименовать, ни изменить аттрибуты. Он блокирован отдельным процессом на сервере. Причём на сервере с файлом тоже ничего сделать не удаётся, пока сервер не перегрузишь.

Не проблема не в аттрибутах. Файл нельзя ни удалить, ни переименовать, ни изменить аттрибуты. Он блокирован отдельным процессом на сервере. Причём на сервере с файлом тоже ничего сделать не удаётся, пока сервер не перегрузишь.


На сервере можно "срубить" процесс? Есть к нему доступ? Кстати, фай каким приложением открывается?

Originally posted by mhaturov

На сервере можно "срубить" процесс? Есть к нему доступ? Кстати, фай каким приложением открывается?


Типичный пример того, как плохо быть постоянно подключенным к серверу. Это я к соседнему топику о постоянных активных коннекшенах.

Originally posted by xelos

Типичный пример того, как плохо быть постоянно подключенным к серверу. Это я к соседнему топику о постоянных активных коннекшенах.


Ну, во-первых. при постоянно открытых коннектах, если всё по-уму делать, такого не происходит. А во-вторых, каждый раз устанавливать новый коннект - очень накладно. У меня, например, постоянный 1 коннект основной, а вот рекордсеты уже локальные, на уровне процедур, в большинстве своём.

Originally posted by mhaturov

Ну, во-первых. при постоянно открытых коннектах, если всё по-уму делать, такого не происходит. А во-вторых, каждый раз устанавливать новый коннект - очень накладно. У меня, например, постоянный 1 коннект основной, а вот рекордсеты уже локальные, на уровне процедур, в большинстве своём.


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

Originally posted by ALEKSMIR
Проблема:
Файл открыт по сети с сервера. Сеть по какой-то причине обрывается. Восстанавливаю сеть, но открытый ранее файл
остаётся блокированным и становится доступным только для чтения, пока не перегрузишь сервер. Как разблокировать такой файл?


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

Originally posted by xelos

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


Что верно, то верно. Но всё же, каким приложением открывается файл?:P

Originally posted by mhaturov

Что верно, то верно. Но всё же, каким приложением открывается файл?:P

Файл формата MDB. Это база данных, она открывается приложением, написанным на VB5. Когда оператор открывает у себя контрагента, в базе данных этот контрагент блокируется. После сбоя в сети процесс на сервере остаётся открытым, а контрагент заблокированным. Чтобы его разблокировать, приходится перегружать сервер. Во время рабочего дня это сбивает с ритма всех операторов на локальных компьютерах.

Файл формата MDB. Это база данных, она открывается приложением, написанным на VB5. Когда оператор открывает у себя контрагента, в базе данных этот контрагент блокируется. После сбоя в сети процесс на сервере остаётся открытым, а контрагент заблокированным. Чтобы его разблокировать, приходится перегружать сервер. Во время рабочего дня это сбивает с ритма всех операторов на локальных компьютерах.

date

27.07.2021

directory

Windows 10, Windows Server 2012 R2, Windows Server 2016

comments

комментариев 39

Если вы администрируете общие сетевые папки Windows, скорее всего вы периодически сталкиваетесь с просьбами пользователей принудительно закрыть файлы, открытые (заблокированные) в сетевых папках другими пользователями. Обычно это связано с некорректной работой программы, неправильном завершении сессии пользователя или ситуациях, когда пользователь открыл файл и забыл закрыть его (ушел домой, в отпуск и т.д.). Во всех этих случаях файл в сетевой папке оказывается заблокированным, и другие пользователи не могут вносить в него изменения.

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

Вывод списка открытых файлов в сетевой папке Windows

Список открытых по сети файлов в Windows можно получить с помощью стандартной графической консоли Computer Management (Управление компьютером — compmgmt.msc ).

Запустите на файловом сервере консоль Computer Management (или подключитесь к нему консолью удаленно со своего компьютера) и перейдите в раздел System Tools -> Shared Folders -> Open files (Служебные программы -> Общие папки -> Открыты файлы). В правой части окна отображается список файлов на сервере, открытых удаленно. В данном списке указан локальный путь к файлу, имя учетной записи пользователя, количество блокировок и режим, в котором открыт файл (Read или Write+Read).

Открыты файлы на файловом сервере Windows

Этот же список открытых файлов можно получит с помощью встроенной консольной утилиты Openfiles. Например, с помощью следующей команды можно получить id сессии, имя пользователя и полный локальный путь к открытому файлу:

Openfiles /Query /fo csv |more

Openfiles /Query

При удаленном доступе пользователя к папке или файлу в сетевой папке (SMB) на сервере, для пользователя создается новая сессия. Вы можете управлять открытыми файлами с помощью идентификаторов этих сессий.

Вы можете вывести список открытых файлов на сервере удаленно. Например, чтобы вывести все открытые по сети файлы на сервере mskfs01, выполните:

Openfiles /Query /s mskfs01 /fo csv

Команда Openfiles позволяет также вывести список локально открытых файлов. Для этого на сервере нужно включить опцию Maintain Objects List (Построение списка объектов) командой openfiles /local on и перезагрузить сервер. После этого команда Openfiles будет отображать файлы, открытые локальными процессами (этот режим желательно использовать только для отладки, т.к. может негативно сказаться на производительности сервера).

Определяем пользователя, который открыл файл в сетевой папке с помощью Openfiles

Чтобы удаленно определить пользователя, который открыл (заблокировал) файл cons.adm в сетевой папке на сервере mskfs01, выполните команду:

Openfiles /Query /s mskfs01 /fo csv | find /i "cons.adm"

Ключ /i используется, чтобы выполнялся регистронезависимый поиск.

Можно указать только часть имени файла. Например, чтобы узнать, кто открыл xlsx файл, в имени которого есть строка farm, воспользуйтесь таким конвейером:

Openfiles /Query /s mskfs01 /fo csv | find /i "farm"| find /i "xlsx"

Можно, конечно найти открытый файл и в графической консоли Computer Management, но это менее удобно (в консоли нет возможности поиска).

Как принудительно закрыть открытый файл в Windows?

Чтобы закрыть открытый файл, нужно найти его в списке файлов секции Open Files и в контекстном меню выбрать пункт “Close Open File”.

Закрыть открытые файлы в сетевой папке

Если на файловом сервере сотни открытых файлов, найти их в консоли будет непросто. Удобнее воспользоваться утилитой Openfiles. Как мы уже говорили, она возвращает ID сессии открытого файла. Вы можете принудительно закрыть файл и сбросить подключение пользователя по ID SMB сессии. Сначала нужно определить ID сессии открытого файла:

Openfiles /Query /s mskfs01 /fo csv | find /i "farm"| find /i ".xlsx"

Теперь можно принудительно отключить пользователя по полученному идентификатору SMB сессии:

Openfiles /Disconnect /s mskfs01 /ID 67109098

Openfiles Disconnect - отключение файла по id сессии


Можно принудительно сбросить все сессии и освободить все файлы, открытые определённым пользователем:
openfiles /disconnect /s mskfs01 /u corp\aivanova /id *

Обратите внимание, что принудительное закрытие файла, открытого клиентом на SMB сервере, вызывает потерю несохраненных данных. Поэтому команду openfiles /disconnect и командлет Close-SMBOpenFile (рассматривается ниже) нужно использовать с осторожностью.

Get-SMBOpenFile: вывод списка открытых по сети файлов в PowerShell

В версии PowerShell в Windows Server 2012/Windows 8 появились командлеты для управления сетевыми файлами и папками на SMB сервере. Эти командлеты можно использовать чтобы удаленно закрыть открытые по сети файлы.

Список открытых файлов можно получить с помощью командлета Get-SMBOpenFile. Чтобы закрыть файл (сбросить подключение), используется Close-SmbOpenFile.

Для вывода полного списка открытых файлов на сервере, выполните команду:

Get-SMBOpenFile вывод списка открытых файлов на SMB сервере с помощью powershell

Команда возвращает ID файла, ID сессии и полное имя файла.

Можно вывести список открытых файлов с именами пользователей и компьютеров (IP адресами):

poweshell вывод список пользователей, которые открыли файлы в сетевой папке windows

Можно вывести все файлы, открытые определенным пользователем:

Get-SMBOpenFile –ClientUserName "corp\aaivanov" |select ClientComputerName,Path

или с определенного компьютера (сервера):

Get-SMBOpenFile –ClientComputerName 192.168.12.170| select ClientUserName,Path

Можно вывести список открытых файлов по шаблону. Например, все открытые по сети exe файлы:

или файлы с определенным именем:

Чтобы закрыть файл используется командлет Close-SmbOpenFile . Закрыть файл можно по ID:

Close-SmbOpenFile -FileId 4123426323239

Но обычно удобнее закрыть файл по имени:

Get-SmbOpenFile | where | Close-SmbOpenFile -Force

С помощью Out-GridView можно сделать простую графическую форму для поиска и закрытия файлов. Следующий скрипт выведет список открытых файлов. Администратор должен с помощью фильтров в таблице Out-GridView найти, выделить нужные файлы и нажать ОК. В результате выбранные файлы будут принудительно закрыты.

Get-SmbOpenFile|select ClientUserName,ClientComputerName,Path,SessionID| Out-GridView -PassThru –title “Select Open Files”|Close-SmbOpenFile -Confirm:$false -Verbose

Get-SmbOpenFile вместе с out-gridview - powershell скрипт с графическим интерефейсом по выбору и принудительному закрыттию заблокированных (открытых) файлов в windows

Как удаленно закрыть открытые SMB файлы с помощью PowerShell?

Командлеты Get-SMBOpenFile и Close-SmbOpenFile можно использовать чтобы удаленно найти и закрыть открытые файлы. Сначала нужно подключиться к удаленному SMB серверу Windows через CIM сессию:

$sessn = New-CIMSession –Computername mskfs01

Также вы можете подключаться к удаленному серверам для запуска команд через командлеты PSRemoting: Enter-PSSession или Invoke-Command .

Следующая команда найдет SMB сессию для открытого файла *pubs.docx и завершит ее.

Get-SMBOpenFile -CIMSession $sessn | where | Close-SMBOpenFile -CIMSession $sessn

Подтвердите закрытие файла, нажав Y . В результате вы разблокировали открытый файл. Теперь его могут открыть другие пользователи.

Get-SMBOpenFile - удаленное управление открытых файлов

Чтобы убрать подтверждение закрытия файла на сервере, используйте ключ –Force .

С помощью PowerShell вы можете закрыть и разблокировать на файловом сервере все файлы, открытые определенным пользователем (пользователь ушел домой и не освободил файлы). Например, чтобы сбросить все файловые сессии для пользователя ipivanov, выполните:

Get-SMBOpenFile -CIMSession $sessn | where |Close-SMBOpenFile -CIMSession $sessn

В PHP скриптах, вызывая include() , require() , fopen() или их производные, такие как include_once , require_once или даже move_uploaded_file() , часто появляются ошибки или предупреждения:

Не удалось открыть поток: нет такого файла или каталога.

Как быстро найти первопричину проблемы?

Ответ 1

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

Предположим, у нас есть следующая строка:

require "/path/to/file"

Контрольный список

1. Проверьте путь к файлу на предмет опечаток

  • проверьте вручную (визуально проверив путь) ;

  • переместите все, что вызывается с помощью require* или include* в переменную, скопируйте ее и попробуйте получить к ней доступ с терминала:

2. Убедитесь, что путь к файлу правильный с точки зрения относительного и абсолютного пути

  • если он начинается с косой черты "/", то это относится не к корню папки вашего веб-сайта (корень документа), а к корню вашего сервер :

    • например, каталог вашего веб-сайта может быть /users/tony/htdocs ;

    • не относительно пути к корню вашего веб-сайта или файла ;

    • или всегда используйте абсолютные пути к файлам .

    1. используйте require __DIR__."/relative/path/from/current/file" , который возвращает каталог текущего файла ;

    2. определите SITE_ROOT константу самостоятельно:

      • в корне каталога вашего веб-сайта создайте файл, например , config.php

      • в config.php напишите :

    • в каждом файле, в котором вы хотите сослаться на корневую папку сайта, включите config.php и затем используйте SITE_ROOT константу везде, где хотите:

    3. Проверьте свои пути включения

    Другой способ включения файлов, ни относительный, ни абсолютный, - это полагаться на путь включения . Это часто бывает с библиотеками или фреймворками, такими как, например, Zend framework.

    Подобное включение будет выглядеть так:

    include "Zend/Mail/Protocol/Imap.php"

    В этом случае вы должны убедиться, что папка, в которой находится «Zend», является частью пути включения.

    Это можно проверить с помощью:

    echo get_include_path();

    Вы можете добавить в него папку с помощью:

    set_include_path(get_include_path().":"."/path/to/new/folder");

    4. Убедитесь, что у вашего сервера есть доступ к этому файлу

    Может случиться так, что у пользователя, запускающего серверный процесс (Apache или PHP), просто нет разрешения на чтение или запись в этот файл.

    Чтобы проверить, под каким пользователем запущен сервер, можно использовать posix_getpwuid :

    $user = posix_getpwuid(posix_geteuid());

    var_dump($user);

    Чтобы узнать права доступа к файлу, введите в терминале следующую команду:

    ls -l <path/to/file>

    5. Проверьте настройки PHP

      • Если установлено, PHP не сможет получить доступ к любому файлу за пределами указанного каталога (даже через символическую ссылку).

      • По умолчанию не устанавливается, и в этом случае ограничений нет.

      • Можно проверить, вызвав phpinfo() или используя ini_get("open_basedir") .

      • Вы можете изменить настройку, отредактировав файл php.ini или файл httpd.conf.

      • Е сли включено, могут быть ограничения. Однако данный режим был удален в PHP 5.4. Если вы все еще используете версию, которая поддерживает безопасный режим, обновитесь до версии PHP, которая это еще поддерживает .

      • О тносится только к включению или открытию файлов через сетевой процесс, такой как http://, но не работает для локальной файловой системы.

      • Э ти опции можно проверить, используя ini_get("allow_url_include") или установи в с помощью ini_set("allow_url_include", "1") .

    Другие случаи

    Если ничего из вышеперечисленного не помогло диагностировать проблему, могут возникнуть следующие особые ситуации:

    1. Включение библиотеки на основе пути включения

    Может случиться так, что вы подключаете библиотеку, например, платформу Zend, используя относительный или абсолютный путь. Например:

    require "/usr/share/php/libzend-framework-php/Zend/Mail/Protocol/Imap.php"

    Но по-прежнему получаете такую же ошибку.

    Это могло произойти из-за того, что файл, который вы (успешно) включили, сам имеет оператор include для другого файла, и этот второй оператор include предполагает, что вы добавили путь этой библиотеки к пути включения.

    Например, упомянутый ранее файл фреймворка Zend может включать следующее:

    include "Zend/Mail/Protocol/Exception.php"

    что не является включением ни по относительному пути, ни по абсолютному пути. Предполагается, что каталог фреймворка Zend был добавлен в путь включения.

    В таком случае единственное практическое решение - добавить каталог в ваш путь включения.

    2. SELinux

    3. Symfony

    Если вы используете Symfony и получаете эту ошибку при загрузке на сервер, возможно, к э ш приложения не был сброшен, либо потому, что app/cache был загружен, либо этот к э ш не был очищен.

    Для этого надо выполнить следующую консольную команду:

    cache:clear

    4. Внутри Zip-файла символы, отличные от A SC II

    По-видимому, эта ошибка может произойти также при вызове zip->close(), когда некоторые файлы внутри zip имеют в своем имени не-ASCII символы, такие как, например, «é».

    Потенциальное решение - обернуть имя файла, используя utf8_decode(), перед созданием целевого файла.

    Ответ 2

    В дополнение к предыдущему ответу:

    Программное обеспечение для виртуального хостинга

    Права доступа к файлам

    1. Этот пользователь владеет файлом и, возможно, родительским каталогом (особенно родительским каталогом, если вы хотите записывать файлы). В большинстве сред общего хостинга это не будет проблемой, потому что ваш пользователь должен владеть всеми файлами под вашим корневым каталогом.

    2. В Linux хорошей практикой будет использова ние chmod 600 (только владелец может читать и писать) или chmod 644 (владелец может писать, но все могут читать) .

    Ответ 3

    Samba Shares

    Если у вас есть тестовый сервер Linux и вы работаете из клиента Windows, общий ресурс Samba мешает команде chmod . Даже если вы используете:

    chmod -R 777 myfolder

    со стороны Linux вполне возможно, что Unix Group\www-data все еще не будет иметь доступ на запись. Есть рабочее решение : если ваш общий ресурс настроен так, что администраторы Windows сопоставлены с корневым каталогом – в Windows откройте разрешения, отключите наследование для вашей папки с копией, а затем предоставьте полный доступ для www-данных.

    Мы будем очень благодарны

    если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

    Читайте также: