$name = $_POST['name'];
$email = $_POST['email'];
$reciver = '/* Reciver Email address */';
if (filter_var($reciver, FILTER_VALIDATE_EMAIL)) {
$subject = $name;
// To send HTML mail, the Content-type header must be set.
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From:' . $email. "\r\n"; // Sender's Email
//$headers .= 'Cc:' . $email. "\r\n"; // Carbon copy to Sender
$template = '<div style="padding:50px; color:white;">Hello ,<br/>'
. '<br/><br/>'
. 'Name:' .$name.'<br/>'
. 'Email:' .$email.'<br/>'
. '<br/>'
. '</div>';
$sendmessage = "<div style=\"background-color:#7E7E7E; color:white;\">" . $template . "</div>";
// Message lines should not exceed 70 characters (PHP rule), so wrap it.
$sendmessage = wordwrap($sendmessage, 70);
// Send mail by PHP Mail Function.
mail($reciver, $subject, $sendmessage, $headers);
echo "Your Query has been received, We will contact you soon.";
} else {
echo "<span>* invalid email *</span>";
}
Добавление поддержки CLR к вашему C ++-приложению только для того, чтобы получить класс Mutex чрезмерно. Существует несколько вариантов синхронизации вашего доступа к файлам между двумя приложениями.
Если вам нужно записать файл из нескольких процессов, использование мьютекса - это хороший способ сделать это. Используйте функции mutex в Win32 API. (Класс .Net Mutex - это всего лишь оболочка вокруг этих функций.)
HANDLE mutex = CreateMutex(NULL, false, "MyMutex");
DWORD waitResult = WaitForSingleObject(mutex, INFINITE);
if (waitResult == WAIT_OBJECT_0)
{
// TODO: Write the file
WriteFile(...);
ReleaseMutex(mutex);
}
Как уже отмечалось в другом ответе, вам нужно будет открыть файл с общим доступом, чтобы обе ваши приложения могли открывать это сразу. Однако этого может быть недостаточно: если оба ваших приложения пытаются записать в одну и ту же область файла, вам все равно нужно будет убедиться, что одновременно записывается только одно приложение. Представьте, что если оба приложения смотрят на размер файла, то оба попытаются одновременно записать на это смещение байта: даже если оба пытались просто добавить к концу файла, они оказались сбиты друг с другом.
Если вы чисто записываете в конец файла и никогда не пытаетесь ничего прочитать или писать где-нибудь, кроме самого конца файла , то есть специальный режим, который вы можете использовать, что позволит вам не использовать мьютекс. Если вы откроете файл с dwDesiredAccess
, установленным на FILE_APPEND_DATA | SYNCHRONIZE
, и больше ничего (не включите FILE_WRITE_DATA
), тогда ОС позаботится о том, чтобы все данные, которые были записаны в файл в конце, и два приложения, записывающие данные, не перезаписывают друг друга. Это поведение задокументировано на MSDN :
Если установлены только флаги FILE_APPEND_DATA и SYNCHRONIZE, вызывающий может писать только в конец файла и любую информацию о смещении о записи в файл игнорируется.
blockquote>Опция 3: LockFile
Еще один путь, который вы можете предпринять, - использовать
LockFile
. С помощьюLockFile
(илиLockFileEx
) вы можете открыть оба файла для обоих приложений и заблокировать каждый файл раздела файла, который он хочет записать, , Это дает вам более гранулярность, чем мьютекс, позволяя одновременно выполнять неперекрывающиеся записи. (ИспользованиеLockFile
для всего файла даст вам тот же базовый эффект, что и мьютекс, с дополнительным преимуществом, которое предотвратит использование другими приложениями файла при этом.) Есть хороший пример того, как использоватьLockFile
на блоге Раймонда Чена .
На самом деле вам не нужно использовать отдельный мьютекс вообще, вы можете просто использовать сам файл. Когда файл открывается с вызовом API CreateFile (см. https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx?f=255& ; MSPPError = -2147217396 ), вызов принимает параметр dwShareMode, который указывает, какой параллельный доступ разрешен другими процессами. Значение 0 будет препятствовать открытию файла другими процессами.
Практически все API-интерфейсы открывают карту файла CreateFile под капотом, поэтому clr может делать правильные действия для вас, когда вы открываете файл для записи уже.
В среде выполнения C также есть _fsopen, который позволяет вам открыть файл aa с помощью флагов обмена.
Я бы рекомендовал вам проверить, что такое режим совместного использования по умолчанию, когда вы открываете файл с C #. Если это не препятствует одновременному открытию для записи по умолчанию, используйте _fsopen из C (или, возможно, имеется соответствующая функция C #).