Linuxを実行するサーバーに展開されるPHPアプリケーションをWindows上で効果的に開発することは可能ですか?


19

WindowsでPHPをコーディングし、後でLinuxを実行しているサーバーでPHPをホストしても問題ありませんか?そのようなプロジェクトの移行に問題はありますか?

私はPHPの初心者であり、OS固有の高度な機能は使用しないため、特に問題はないと思います。ただし、Linuxがまったく好きではないので、確認したいと思います。


1
問題の簡単な解決策は、Windowsホスト上でSambaを実行するLinux VMです。
ツリーコーダー

はい、できますが、いくつか考慮すべき点があります。詳細については、回答を確認してください。リソースが原因で開発者がしなければならないことの1つであり、彼らが気に入っているからではありません。
umlcat

回答:


27

いくつかのポインター:

ファイルシステムの大文字と小文字の区別

ファイルの名前がHelloWorld.phpの場合、次のようにします。

include "helloworld.php";

Windowsでは合法であり、動作します。しかし、Linuxのファイル名は、あなたが呼ばれるファイルを持つことができ、大文字と小文字が区別されHelloWorld.phphelloworld.phphEllOwOrlD.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が使用するセパレータを気にしないので問題ないと考えていますが、重要な問題が1つあります。セパレータは、システムにディレクトリまたはパスを要求するときにシステム固有のものになります。だから、インクルードパスをその部分に分解したいとしましょう:

$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!!!

ファイルのエンコードと区切り記号

すべてのスクリプトのファイルエンコーディングをCp *ではなくUTF-8に設定し、ファイル行の区切り文字を("\n"ではなく"\r\n")Unixに設定するようにIDEを設定する必要があります。ほとんどの場合、それは実際には重要ではありませんが、一貫性を保つ必要があり、最良の方法はUnixの方法です(Windowsでは正常に機能しますが、その逆は成り立ちません)。


1
改行の問題が発生する可能性のある文字列の場合、PHPには、現在のプラットフォームの正しい改行文字を使用するPHP_EOL定数も含まれています。
ジョナサンパット

5
人々は実際にPHP / Windowsのパスでバックスラッシュを使用していますか?LinuxでPHPを最初に使用したことがない場合でも、バックスラッシュは回避するためだけに使用します。
cHao

2
「classes \\ myClass.php」ではないでしょうか?
ルイスキューバル

@luiscubalはい、二重引用符を使用しているので...単一引用符に編集して、見つけてくれてありがとう。
ヤニス

3
大文字と小文字の区別とファイルエンコーディングは、Windows / Linux間で常に問題を引き起こす2つです。
ランゴリック

6

あなたは実行することはできませんstrftime()%eに注目されるように、Windows環境でのマニュアルのページ

すべての変換指定子がCライブラリでサポートされているわけではありません。その場合、PHPのstrftime()でサポートされていません。さらに、すべてのプラットフォームが負のタイムスタンプをサポートしているわけではないため、日付範囲はUnixエポック以前に制限される場合があります。つまり、%e、%T、%R、および%D(および場合によってはその他)と1970年1月1日より前の日付は、Windows、一部のLinuxディストリビューション、および他のいくつかのオペレーティングシステムでは動作しません。Windowsシステムの場合、サポートされている変換指定子の完全な概要は» MSDNにあります。


4

コードの実行に問題はありません。LinuxのWindowsで保存されたファイルを編集する場合、行末文字が異なる場合があることに気付くかもしれませんが、何も害はありません。わずらわしい場合は、UNIXの行末を使用するようにWindows IDE /エディターを構成します。


3

Linuxテストベッドを設定します。Windowsで実行されている仮想Linuxコンピューター、デュアルブートコンピューター、友人のシステムなどです。その後、たまに(たとえば月曜日の朝)、コードをLinuxシステムに移植してテストします。

他の答えはあなたが直面する主な問題を処理しましたが、次のような多くの小さな落とし穴があります:

  • 一時ディレクトリは別の場所にあります
  • ファイルとディレクトリのアクセス許可が異なります
  • system()関数は根本的に変化します
  • Apacheが変更として実行するユーザー名
  • Windows XPで動作するものは、Windows 8で失敗する場合があります。

はい、これらすべての違いを慎重に回避する方法がありますが、回避策を使用するように注意しましたか?もちろんそうではありません-あなたがコーディングして実行したので、大丈夫でなければなりません。

同様のオペレーティングシステムでテストされるまで、ホストコンピューターには何も置かないでください。

私はWindowsからLinuxへの移植の経験はありませんが、LinuxからWindowsへの移植の経験があり、LinuxからOS Xへの移植の経験があります。


1

LinuxのコマンドラインとvimのようなLinux編集ツールはかなり快適ですが、PHP開発のほとんどはWindowsマシンで行います。

私は、開発サーバーとして使用する仮想サーバーをインターネット上に持っており(月に約20ドル実行されます)、FileZillaを使用して接続します。FileZillaは、編集中のファイルを一時ディレクトリにダウンロードし、保存を追跡します。保存すると、それをdevサーバーにスローし、そこからテストします。

少し面倒ですが、ほとんどどこでも開発を行うことができます。FileZillaとサムドライブのシンプルなエディターを使用して、別のコンピューターから接続して変更を加えることもできます。すべてのテストは常にLinuxサーバーで行われるため、箱から出してすぐに発生する可能性のある問題をキャッチします。サーバーにコードを投げたときの不快な驚きが減ります。

安価なホスティングアカウントでも同じことができます(ただし、開発中のアプリケーションの種類によっては、通常、安価なホスティングアカウントはかなり性能が低いためパフォーマンスの問題が発生する場合があります)。アップロード機能。


1

はい、できますが、いくつか考慮すべき点があります。詳細については、回答を確認してください。

それらの1つ、時には開発者がやらなければならないことがあります。

PCにローカルWebサーバー(Apache、Cherokee、M $さえ)がインストールされていて、PHPサーバーがインストールされている場合があります。お使いのPCは、インターネットに接続されていないか、短時間しか接続できません。

後で、インターネットに接続された同じPCまたは別のPCで、ftpツールを使用して、実際のWebサイトを更新し、ファイルを実サーバーに更新できます。


0

ほとんどの人が言ったように、本当に問題はないはずです。とはいえ、VirtualBoxを使用すると、Linux仮想マシンを非常に簡単に立ち上げることができ、コードベースをテストして、本番環境を便利に使用しなくても本番環境で動作することを確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.