2011-08-19 37 views
6

Tôi có hai máy chủ cho một trang web. Một máy chủ sẽ có mã php và cơ sở dữ liệu và một máy chủ tốc độ thấp hơn để lưu trữ các tệp chỉ. Tôi cần phải thực hiện những điều này theo cách mà tệp được tải lên thông qua trang web phải lưu trữ tại một máy chủ khác và sau đó có thể tải xuống từ đó.Máy chủ tệp riêng biệt cho trang web php

Bất kỳ ai cũng có thể gợi ý cho tôi cách tốt nhất để đạt được điều đó. Tôi biết các tập tin có thể được chuyển đến máy chủ khác bằng các chức năng FTP của php ngay sau khi tải lên thông qua trang web nhưng dường như không chính xác.

Hoặc hai máy chủ có thể được sử dụng cho nội dung phương tiện tĩnh như chỉ hình ảnh.

Cảm ơn

+0

Loại tệp nào đang được lưu trữ trên máy chủ phụ? – ExtremeCoder

+0

Cần nhiều thông tin hơn. Loại hệ điều hành nào là các máy chủ đang chạy, bạn có quyền truy cập quản trị vào nó hay không .... –

+0

Cảm ơn nhận xét, Các tệp sẽ được người dùng ứng dụng tải lên. Nó có thể là pdf, doc và hình ảnh. Máy chủ phải dựa trên Linux. Tôi phải có quyền truy cập quản trị bởi vì không có điều đó, có thể không phải là có thể – phpian

Trả lời

13

Ý tưởng tốt nhất là chỉ có TẤT CẢ các tệp, bao gồm tệp trang web trên "máy chủ lưu trữ". Về cơ bản những gì bạn làm là gắn kết "thư mục được chia sẻ", điều này có nghĩa là các tệp trang web và các tệp khác mà bạn sẽ cần. (Hầu hết các lần bạn chỉ có một/var/www-local/thư mục trên máy chủ lưu trữ, mà bạn gắn kết trong/var/www/trên máy chủ web).

Đảm bảo bạn gắn kết nó bằng NFS bằng cách thêm nó vào tệp/etc/fstab trên máy chủ web. (More info on NFS)

Ưu điểm của ý tưởng này là khi bạn muốn mở rộng, đây là một cách dễ dàng có thể bằng cách đặt một loadbalancer phần mềm (như HAProxy), thêm như máy chủ web nhiều như bạn thích và bạn sẽ có dữ liệu của bạn đồng bộ .

+0

Điều đó có nghĩa là sẽ có hai máy chủ. Các máy chủ thứ hai sẽ được gắn vào máy chủ chính và bằng cách làm ứng dụng này không cần phải suy nghĩ về một máy chủ. Nó sẽ được coi là một hệ thống không có url khác cho máy chủ thứ hai. – phpian

+0

Điều này chỉ trả lời một phần câu hỏi, vì bạn sẽ không thể sử dụng không gian bên ngoài như Mạng phân phối nội dung chuyên dụng. – Lars

4

Có thể bạn có thể gắn thư mục tải lên với máy chủ web của mình. Kiểm tra Linux NFS

3

Không biết đây có phải là cách tốt nhất hay không, nhưng tại sao không chỉ có máy chủ tệp là tên miền phụ riêng biệt? Bằng cách đó, nó có thể xử lý tất cả các tập tin tải về minutia và bạn có thể kết nối với nó thông qua FTP hoặc SFTP từ máy chủ chính.

Về cơ bản, đây là một quá trình bạn có thể sử dụng:

  1. Point subdomain của bạn tại máy chủ thứ cấp. Tôi tìm thấy một số thông tin về số here.
  2. Có biểu mẫu tải lên trên máy chủ chính của bạn để xử lý và xác thực tệp.
  3. Khi tệp được coi là chấp nhận được, hãy gửi tệp đó đến máy chủ khác qua FTP hoặc SFTP. Nếu bạn không thể có được các công cụ PHP làm việc cho việc này, phpseclib có thể hữu ích. Bạn có thể muốn thực hiện bước này đa luồng.
+0

Việc này sẽ bị quá tải trên máy chủ chính vì tất cả các tệp được tải lên thông qua ứng dụng sẽ là FTP đến máy chủ khác. Người dùng cuối sẽ alsoface thêm chậm trễ vì tập tin sẽ được tải lên bởi anh ta đầu tiên đi đến máy chủ chính (anh ta sẽ làm mục nhập cơ sở dữ liệu) sau đó nó sẽ được FTP để tập tin máy chủ. – phpian

0

nếu ứng dụng của bạn yêu cầu đọc/ghi chuyên sâu vào máy chủ tệp, thì tôi nghĩ nên tách riêng nó ra. có lẽ bạn có thể phản chiếu NFS vào máy chủ web chính của bạn để giảm độ trễ!

Sử dụng nginx để xử lý tất cả các yêu cầu đến các file tĩnh (ví dụ: css, hình ảnh, javascript)

5

Tôi đã sử dụng một cái gì đó gọi là Gluster cho phép cho những thứ như thế này. Tình hình tôi sử dụng nó là nhiều hơn cho cân bằng tải hơn cho phân phối nội dung thay thế.

Ngoài ra, các trang web như sử dụng Stack Overflow Content Distribution Network dịch vụ cho một số thông tin nhất định trên trang web của họ. Một giải pháp như thế này thực sự có thể hiệu quả về chi phí hơn là mua/thiết lập/duy trì một máy chủ hoàn toàn mới.

+0

trông giống như một dự án rất thú vị, cảm ơn! – Lars

+0

+1 cho Gluster, giải pháp tuyệt vời. – ceejayoz

1

Bằng cách sử dụng url wrapper, bạn có thể sử dụng mặc định move_uploaded_file(), nếu máy chủ ftp của bạn chấp nhận loại kết nối này. Ngoài ra, bạn có thể sử dụng ftp functions của PHP, đặc biệt là ftp_put(), để tải tệp lên máy chủ.

Đối với phân phối nội dung, bạn cần phải có một cơ sở dữ liệu hoặc các phương tiện khác để có được url gốc trên máy chủ phân phối nội dung và đặt url trong các đối số html:

<img src="http://cdn1.example.com/images/68263483.png" /> 
<a href="http://cdn2.example.com/files/9872345.pdf">Download PDF</a> 

Một ví dụ mã để xử lý một tải lên file sẽ

<?php 
// ... 
$uploads_dir = 'images'; 
foreach ($_FILES["pictures"]["error"] as $key => $error) { 
    if ($error == UPLOAD_ERR_OK) { 
     $tmp_name = $_FILES["pictures"]["tmp_name"][$key]; 
     $name = $_FILES["pictures"]["name"][$key]; 
     move_uploaded_file($tmp_name, 
      "ftp://user:[email protected]/$uploads_dir/$name"); 

     // save url in your database for later retrieval ... 
    } 
} 

hoặc với ftp_put():

<?php 
// ... 
$ftpCon = ftp_connect('cdn1.example.com') 
    or die('Could not connect to ftp server'); 
$uploads_dir = 'images'; 
foreach ($_FILES["pictures"]["error"] as $key => $error) { 
    if ($error == UPLOAD_ERR_OK) { 
     $tmp_name = $_FILES["pictures"]["tmp_name"][$key]; 
     $name = $_FILES["pictures"]["name"][$key]; 
     ftp_put($ftpCon, "$uploads_dir/$name", $tmp_name) 
      or die("could not upload $name to ftp server"); 
     // save url in your database for later retrieval ... 
    } 
} 
0
  1. Tạo một chia sẻ trên máy chủ tệp để lưu thư mục mà bạn muốn tải xuống và tải tệp lên. Hai cổ phiếu nếu bạn dự định giữ tyem trong các thư mục riêng biệt.

  2. Ánh xạ các thư mục trên máy chủ web với Base code PHP. Hãy chắc chắn rằng bạn sử dụng một đăng nhập để conect để chia sẻ (s) mà sẽ có quyền truy cập đọc và ghi.

  3. Khi bạn đã ánh xạ (các) bản đồ, hãy tạo thư mục ảo trên trang web vào thư mục dùng chung (tất cả điều này phụ thuộc vào máy chủ web của bạn).

  4. Kiểm tra cách PHP xử lý việc truy cập tệp trên một ổ đĩa được chia sẻ trong một trang web, tùy thuộc vào máy chủ web của bạn có thể khác với cách bạn thường xử lý tệp.

Tôi thích phương pháp này vì hệ điều hành máy chủ xử lý việc truyền tệp đến và từ máy chủ tệp. PHP chỉ xử lý nói cho nó những tập tin cần thiết.

Các vấn đề liên quan