سلام وقت بخیر دوستان.
یک سوال داشتم.
سناریو به این شکل است: یک نرم افزار اتوماسیون اداری در شبکه محلی یک شرکت است که میخوام از اطلاعات دیتابیس این نرم افزار برای یک وب سایت استفاده کنم.یعنی میخوام یک صفحه وب ایجاد کنم که داخل ان یک فرم باشد و کاربر بعد از پر کردن فرم , اطلاعات در دیتابیس نرم افزار اتوماسیون شرکت ثبت شود.
راهکار چیست؟
مرسی
معمولاً نرمافزارهای اتوماسیون اداری از SQL Server استفاده میکنن. شما باید با PHP به اون دیتابیس وصل بشین و بعد هر کاری که بخواین میتونین انجام بدین. برای اتصال میتونین از SqlSrv که توسط خود مایکروسافت توسعه داده میشه استفاده کنین.
(12-12-1400، 11:36 ق.ظ)ADMIN نوشته: [ -> ]معمولاً نرمافزارهای اتوماسیون اداری از SQL Server استفاده میکنن. شما باید با PHP به اون دیتابیس وصل بشین و بعد هر کاری که بخواین میتونین انجام بدین. برای اتصال میتونین از SqlSrv که توسط خود مایکروسافت توسعه داده میشه استفاده کنین.
سلام وقت بخیر استاد شهرکی.
بله این موضوع رو میدونم و راجبش تحقیق کردم این موضوع یکی از مشکلات پیش رو هست.
من منظورم اینه که چطور ارتباط بین وب سایت که در بستر اینترنت هست با دیتابیس نرم افزار شرکت که در شبکه local شرکت میباشد برقرار شود؟
این موضوع ازطریق یک واسط برنامهنویسی یا همون API برقرار میشه. شما باید یک API بنویسین که به دیتابیس محلی شرکت وصله و روی کامپیوتری که یک IP ثابت داشته باشه این API رو قرار بدین و ازطریق اینترنت به این API وصل بشین و متدهایی که نوشتین رو صدا بزنین تا کارها رو برای شما انجام بدن و اطلاعاتی که نیاز دارین رو به شما برگردونن.
سلام وقت بخیر استاد شهرکی.
طبق توضیحاتی که شما فرمودین پروژه خودم رو جلو بردم و api رو نوشتم و اطلاعات رو از دیتابیس لوکال میگیره و نمایش میده ولی در قسمت درخواست (ریکویست) زدن به متدی که در قسمت api نوشتم با curl میخوام انجام بدم ولی نمیدونم که ip ثابت اون کامپیوتری که api روش هست رو چجوری در curl بنویسم ؟؟ تیکه کد مربوط به این قسمت رو میزارم.
متد مربوط به api که متصل است به دیتابیس محلی :
class webserviceController{
public function list_of_users(){
$db = Db::getInstance();
$result = $db->query("SELECT * FROM `user`");
echo json_encode($result);
}
}
کد مربوط به صدا زدن متد api:
<?php
class wstesterController{
public function test1(){
$data = curl_request("http://5.117.208.175/webservice/list_of_users");
echo $data;
}
}
کدهای مربوط به curl :
function curl_request($url,$return=true){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, $return);
$data = curl_exec($ch);
curl_close($ch);
if($data === false){
echo "curl Error:" .curl_error($ch);
}
if($return){
return $data;
}
}
ببینید قاعدتاً بهتنهایی با IP نمیشه چون احتمالاً هاست اشتراکی یا VPS گرفتین (برای API) و روی اون کامپیوتر با همون IP چند سایت دیگه هم درحال اجرا هستن. باید برای این منظور یک دامنه بگیرین و به هاست خودتون وصل کنین و بجای IP از اسم دامنه استفاده کنید.
(20-11-1401، 11:03 ق.ظ)ADMIN نوشته: [ -> ]ببینید قاعدتاً بهتنهایی با IP نمیشه چون احتمالاً هاست اشتراکی یا VPS گرفتین (برای API) و روی اون کامپیوتر با همون IP چند سایت دیگه هم درحال اجرا هستن. باید برای این منظور یک دامنه بگیرین و به هاست خودتون وصل کنین و بجای IP از اسم دامنه استفاده کنید.
بله استاد از هاست اشتراکی دارم استفاده میکنم. ولی یه قسمتی از پیام شما رو خوب متوجه نشدم. مگه نباید ادرس ip سیستم لوکالی که api رو اون سیستم هست رو , تو متد curl_request() بزارم؟ من تحقیق که کردم یکنفر به من گفت باید ip سیستم لوکالی که api رو تو اون سیستم نوشتی باید با استفاده از NAT تبدیلش کنم به ip public . یعنی ip لوکال سیستم خودم که تو رنج 192.168.1.54 هست از طریق اینترنت بشه به این ip لوکال دسترسی داشت
اگه اون کامپیوتری که میخواد به کامپیوتر شما وصل بشه توی همون شبکه است (به همون مودم وصله) میتونین با IP داخلی کار کنین. اما اگه بخواین از بیرون وصل بشن، باید توی گوگل سرچ کنین my ip و بعد هرچی نوشت همونو استفاده کنین (IP خارجی).
اگه میخواین هر دفعه که اون کامپیوتر (که API روش هست) به اینترنت وصل میشه IPش عوض نشه، باید براش ValidIP بخرین و تنظیم کنین که همیشه با همون IP بالا بیاد (قیمتش زیاد نیست).
(20-11-1401، 11:53 ق.ظ)hosien نوشته: [ -> ]بله استاد از هاست اشتراکی دارم استفاده میکنم. ولی یه قسمتی از پیام شما رو خوب متوجه نشدم. مگه نباید ادرس ip سیستم لوکالی که api رو اون سیستم هست رو , تو متد curl_request() بزارم؟ من تحقیق که کردم یکنفر به من گفت باید ip سیستم لوکالی که api رو تو اون سیستم نوشتی باید با استفاده از NAT تبدیلش کنم به ip public . یعنی ip لوکال سیستم خودم که تو رنج 192.168.1.54 هست از طریق اینترنت بشه به این ip لوکال دسترسی داشت
اگه از هاست اشتراکی استفاده میکنید باید برای اون هاستینگ خودتون یک Domain بخرین و به هاستتون وصل کنین (DNSهاش رو تنظیم کنید روی IP اون سرور) و بعد توی کدتون به اون Domain توی cURL وصل بشین.
سلام استاد شهرکی. مواردی که در پیام های بالا گفتین رو انجام دادم و دامین برای هاست گرفتم و به هاست وصل کردم. و با کلی سعی و خطا در کدهای خودم متاسفانه به نتیجه نرسیدم فعلا.
اگه امکانش هست در کد مربوط به این قسمت بگین که باید ادرس دهی رو در کتابخانه curl چطور باید بنویسم؟
<?php
class wstesterController{
public function test1(){
$data = curl_request("my DNS/webservice/list_of_users");
echo $data;
}
}
فرض کنید آدرس سایت شما example.com هست و شما هم توی پوشهی api کدهای API خودتون رو آپلود کردین. در این حالت باید اینطوری کار کنید:
<?php
class wstesterController {
public function test1() {
$ch = curl_init('https://example.com/api/list_of_users');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
echo $data;
}
}
دقت کنید که آدرسی که به CURL میدین باید حتماً قابل دسترسی باشه (توی مرورگر)
سلام مهندس شهرکی , اخه باید ادرس سرور لوکال شرکت رو بزارم تو curl_init() . چون باید از اطلاعات دیتابیس محلی شرکت فراخوانی بشن متدها و در صفحه وب (اینترنت) نشون بده .
ببینید شما دو سرور دارین که یکی کدهای شما رو داره اجرا میکنه و یکی دیگه هم API هست که میخواین بهش وصل بشین. حالا یا میخواین ازطریق اینترنت ارتباط برقرار کنین یا ازطریق شبکهی داخلی شرکت. اگه ارتباطتون اینترنتی هست، باید دامنه و هاست داشته باشین و اطلاعات اونجا قرار بگیره و به روشی که گفتم ازطریق دامنهی موردنظر بهش وصل بشین. اما اگه میخواین ارتباط داخلی شبکه داشته باشین، باید هر دو سرور توی یک شبکه باشن که بتونن همدیگه رو ببینن. بعد هم بجای آدرس دامنه توی cURL باید از IP داخلی شبکهی کامپیوتر مقصد استفاده کنید (مثلاً 192.168.1.101)
سلام مهندس شهرکی. شما خوب متوجه شدین و میدونید که من چی میخوام ولی نمیدونم چرا این قسمت از صحبت شما رو متوجه نمیشم " اگه ارتباطتون اینترنتی هست، باید دامنه و هاست داشته باشین و اطلاعات اونجا قرار بگیره و به روشی که گفتم ازطریق دامنهی موردنظر بهش وصل بشین"
یبار دیگه سناریو رو خلاصه بگم شاید نکته ای رو من متوجه نشدم و از قلم افتاده.
من یک صفحه وب دارم که میخوام از اطلاعات دیتابیس شبکه لوکال در صفحه وبم نمایش بدم. حال یکسری کدهای من در هاست اشتراکی قرار دارد که باید متدهای api من که در سرور لوکال هستند و وظیفه اجرای query های دیتابیس محلی رو دارند را فراخوانی کنند. کدهای مربوط به کتابخانه curl در هاست اشتراکی قرار دارد که پارامتر url ان را ip خارجی (my ip سرچ در گوگل) قرار دادم و بعد طبق route ای که نوشتم اسم کلاس کنترلر و بعد اسم متد و در صورت نیاز پارامترهای متد قرار میگیرد.
با تشکر
(01-02-1401، 04:14 ب.ظ)ADMIN نوشته: [ -> ]این موضوع ازطریق یک واسط برنامهنویسی یا همون API برقرار میشه. شما باید یک API بنویسین که به دیتابیس محلی شرکت وصله و روی کامپیوتری که یک IP ثابت داشته باشه این API رو قرار بدین و ازطریق اینترنت به این API وصل بشین و متدهایی که نوشتین رو صدا بزنین تا کارها رو برای شما انجام بدن و اطلاعاتی که نیاز دارین رو به شما برگردونن.
این پاسخ شما خیلی بهم سرنخ داده و خیلی خوب متوجه شدم