PHP: Как мне не читать частичные файлы, отправленные мне через FTP?

Файлы отправляются на мой сервер через FTP. Я обрабатываю их с помощью кода PHP в модуле Drupal. ОС - это Ubuntu, а FTP-сервер - vsftp.

Я регулярно проверяю наличие новых файлов, обрабатываю их с помощью SimpleXML и перемещаю в папку «Готово». Как мне избежать обработки частично загруженного файла?

vsftp имеет для lock_upload_files значение по умолчанию yes. Я подумал о том, чтобы попытаться сначала переместить файлы, ожидая, что перемещение не удастся для загружаемого в данный момент файла. Похоже, этого не происходит, по крайней мере, в командной строке. Если я начинаю загружать большой файл и перемещаюсь, он просто продолжает расти в новом месте. Я предполагаю, что запись в каталоге не заблокирована.

Следует ли мне попробовать fopen с режимом 'a' или 'r +', просто чтобы увидеть, удастся ли это, прежде чем пытаться загрузить в SimpleXML, или есть лучший способ сделать это? Думаю, я мог бы просто обнаружить сбой загрузки SimpleXML, но ... это кажется беспорядочным.

Я не могу контролировать отправителя. Они не будут загружать и переименовывать. Тип System.Int32 в Недопустимый тип System.Int64. [..] Детали исключения: System.InvalidOperationException: The указанный отливок из материализованного Тип System.Int32 в Тип 'System.Int64' недействителен.

Исходный файл: C: \ TempPersonalCode \ TransportTracking \ TransportTracking \ TransportTracking \ Controllers \ AJAXController.cs Line: 35

(Line 35 is the select clause)

I'm confused because if change:

select new { ClientDataID = clntDt.ClientDataID,
    CompanyName = clntDt.CompanyName, 

to

select new { ClientDataID = (Int32)clntDt.ClientDataID,
    CompanyName = clntDt.CompanyName, 

then it works fine. Isn't an anonymous object supposed to use reflection to determine it's type? if so, why is it deciding that it's an "Int32" instead of a long? Within the EDMX I have it as an Int64.

11
задан Mark Cidade 29 April 2011 в 01:40
поделиться