Можно ли эффективно разрабатывать PHP-приложения для Windows, которые будут развернуты на серверах под управлением Linux?

19

Можно ли кодировать PHP в Windows и размещать его позже на сервере под управлением Linux? Могут ли быть проблемы с миграцией такого проекта?

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

DotNetStudent
источник
1
Простое решение вашей проблемы - виртуальная машина Linux с Samba, работающая на хосте Windows.
Treecoder
Да, это можно сделать, но несколько вещей, которые вы должны рассмотреть. Проверьте ответы для получения дополнительной информации. Это одна из тех вещей, которую разработчики должны делать из-за ресурсов, а не потому, что им это нравится.
umlcat

Ответы:

27

Некоторые указатели:

Чувствительность к регистру файловой системы

Если ваш файл называется HelloWorld.php, это:

include "helloworld.php";

законно на винде и будет работать. Но имена файлов Linux чувствительны к регистру, вы можете иметь файлы с именами HelloWorld.php, helloworld.php, hEllOwOrlD.phpв том же каталоге. Таким образом, вы должны разрабатывать в Windows, как если бы вы разрабатывали в чувствительной к регистру файловой системе: использование точно правильных имен файлов, имен каталогов, имен расширений - .phpтакже отличается от .PHP.

Разделители каталогов и путей

В Windows мы говорим:

include 'classes\myClass.php';

Но в Linux мы бы сказали:

include 'classes/myClass.php';

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

include "classes" . DIRECTORY_SEPARATOR . "myClass.php";

То же самое касается разделителя пути, который является точкой с запятой в Windows, в противном случае - двоеточием. Поэтому, чтобы быть в безопасности, вы должны сделать:

set_include_path(get_include_path() . PATH_SEPARATOR . $path);

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

$includePath = get_include_path();

$pathParts = explode(";", $includePath) // Will only work on Windows
$pathParts = explode(":", $includePath) // Will work on other systems but not Windows
$pathParts = explode(PATH_SEPARATOR, $includePath) // Will work everywhere!!!

Кодировка и разделитель файлов

Вы должны установить в своей среде IDE для установки кодировки файлов для всех ваших сценариев значение UTF-8 вместо Cp *, а разделитель строк файла - Unix ( "\n"вместо "\r\n"). В большинстве случаев это не имеет большого значения, но вы должны быть последовательны, и лучший способ - это способ Unix (который отлично работает в Windows, но не наоборот).

Яннис
источник
1
Для строк, где вы можете столкнуться с проблемами новой строки, PHP также включает константу PHP_EOL, которая использует правильный символ новой строки для текущей платформы.
Джонатан Патт
5
Люди на самом деле используют обратную косую черту в своих путях в PHP / Windows? Даже если бы я сначала не использовал PHP в Linux, я бы избегал обратной косой черты только потому, что она для экранирования.
Цао
2
Разве это не должно быть "classes \\ myClass.php"?
luiscubal
@luiscubal Да, так как я использую двойные кавычки ... Спасибо за это, отредактировал в одинарные кавычки.
Яннис
3
Чувствительность к регистру и кодировка файлов - это две проблемы, которые всегда вызывают у меня проблемы между Windows / Linux.
Rangoric
6

Вы не можете работать strftime()с %eв среде Windows , как отмечается в справочной странице :

Не все спецификаторы преобразования могут поддерживаться вашей библиотекой C, и в этом случае они не будут поддерживаться PHP-функцией strftime (). Кроме того, не все платформы поддерживают отрицательные временные метки, поэтому ваш диапазон дат может быть ограничен не ранее эпохи Unix. Это означает, что% e,% T,% R и,% D (и, возможно, другие), а также даты до 1 января 1970 года, не будут работать в Windows, некоторых дистрибутивах Linux и некоторых других операционных системах. Для систем Windows полный обзор поддерживаемых спецификаторов преобразования можно найти на » MSDN .

Илхан
источник
4

Там не будет никаких проблем с запуском кода. Если вы отредактируете файлы, сохраненные в Windows в Linux, вы можете заметить, что символы конца строки могут отличаться, но это не повредит. Если это не сработает, настройте IDE / редактор Windows для использования конца строки Unix.

пьер
источник
3

Настройте себя на тестовом стенде Linux. Это может быть виртуальный компьютер с Linux, работающий под Windows, это может быть компьютер с двойной загрузкой, это может быть система друга. Затем, время от времени (например, по понедельникам), переносите ваш код в систему Linux и тестируйте его.

Другие ответы касались основных проблем, с которыми вы столкнетесь, но есть множество мелких ошибок, таких как:

  • временный каталог находится в другом месте
  • разрешения для файлов и каталогов разные
  • функция system () радикально меняется
  • Имя пользователя, которое Apache запускает как изменения
  • Вещи, которые работают под Windows XP, могут не работать под Windows 8.

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

Не помещайте ничего на хост-компьютер, пока он не будет протестирован в аналогичной операционной системе.

У меня нет опыта переноса с Windows на Linux, но у меня есть некоторый опыт переноса с Linux на Windows и больше опыта переноса с Linux на OS X. Это может быть сделано, но ключи - это тестирование, тестирование и тестирование.

Энди Кэнфилд
источник
1

Несмотря на то, что я довольно комфортно отношусь к командной строке Linux и к инструментам редактирования Linux, таким как vim, я делаю большую часть своей разработки PHP на машине с Windows.

У меня есть виртуальный сервер в интернете (работает около 20 долларов в месяц), который я использую в качестве сервера разработки, и я подключаюсь к нему с помощью FileZilla. FileZilla загружает файлы, которые я редактирую, во временный каталог и отслеживает сохраненные файлы, а когда я сохраняю их, возвращает их обратно на сервер dev, и я проверяю их оттуда.

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

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

кори
источник
1

Да, это можно сделать, но несколько вещей, которые вы должны рассмотреть. Проверьте ответы для получения дополнительной информации.

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

У вас может быть локальный веб-сервер (apache, cherokee, даже M $) на вашем ПК и установленный PHP-сервер. И ваш компьютер может не иметь подключения к Интернету или может подключаться только в течение коротких периодов времени.

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

umlcat
источник
0

Как сказал большинство людей, проблем не должно быть. Тем не менее, VirtualBox позволяет действительно легко установить виртуальную машину Linux, на которой вы можете протестировать свою кодовую базу, чтобы убедиться, что она работает в производственной среде, не имея удобной рабочей среды.

Уайетт Барнетт
источник