A. sae的php的curl功能是受到限制了嗎
curl到國外的webservice上面,發送數據,處理後,再返回數據。
之前使用了美國空間,香港空間,但是總不滿意,無法滿足國內各地區的快速訪問。
所以我現在放到了sae上面運行,但是sae有很多限制的,比如curl的限制如下:
connect_timeout5秒
send_timeout15秒
read_timeout20秒
抓取文件大小8MB
禁用頭,這些頭用戶無法修改Content-Length、Host、Vary、Via、X-Forwarded-For、FetchUrl、AccessKey、TimeStamp、Signature、AllowTruncated、ConnectTimeout、SendTimeout、ReadTimeout
目前就是第一條把我給限制住了,後面的限制對我沒有影響。
正是由於他的connect_timeout5秒限制,導致我的curl應用經常返回502/504錯誤提示。
這個出錯比例大概在3%左右,也就是運行100次,就會出錯3次,後來我將curl里的網址由https換成http,這樣出錯概率降低了不少,但還是存在,測試在1%左右。
對於結果我還是不滿意。因為我的curl程序在其他地方(國內三家機房測試)運行都沒有出現過錯誤。
當然我也給sae提出建議,甚至要求升級成付費用戶,都沒有回復。
惟一的一個管理員說跟我要了curl的網址說幫我找台機器測試看看是不是有這回事。
可能有人說你為什麼要在sae這棵樹上弔死?
說實話我看中sae的惟一優勢是他們是5線機房,國內大部分地區的用戶訪問速度非常不錯的。再說我申請通過開發者認證,每個月的雲豆應該足夠使用了。
現在似乎有三種選擇:
1.繼續給sae建議,讓他們修改限制參數
2.優化代碼?我實在想不出如何優化了
3.放棄sae,這不是我最終想要的結果
我的curl代碼是這樣的:
PHPcode
#POST方法
$curl=curl_init($url);
curl_setopt($curl,CURLOPT_POST,1);
curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
curl_setopt($curl,CURLOPT_HEADER,0);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
$response=curl_exec($curl);
#GET方法
$curl=curl_init($url);
curl_setopt($curl,CURLOPT_GET,1);
curl_setopt($curl,CURLOPT_GETFIELDS);
curl_setopt($curl,CURLOPT_HEADER,0);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
$response=curl_exec($curl);
------解決方案--------------------
對於限制多多的機房我個人是扭頭就走的.國內你一般只需要考慮電信網通(現在叫聯通?)雙線就行了,其他商用接入都是最後接到他們的網上。如果是用空間我還真沒啥建議,我沒用過任何一款空間,有經濟基礎的話似乎可以考慮美國的主機,或者香港的主機。
放棄sae轉戰阿里雲然後回頭來匯報一下情況好給我參考...哈哈哈
雲豆夠用嗎?我不太相信...
至於curl的優化...這還能優化么...
------解決方案--------------------
你應該給出一些測試用的url
B. php的laravel框架sae能支持嗎
支持的。
改造本地項目使其支持 SAE 運行環境
接下來我會簡要介紹本地項目的基本改造過程,從而使我們在不影響本地開發的情況下,做到本地開發和 SAE 線上運行環境的無痛切換。
1. 修改 app/config/app.php
<?php
$app = array(
'debug' => false,
'url' => 'http://www.dilicms.com',
'timezone' => 'PRC',
'locale' => 'zh-cn',
'key' => '',
'providers' => array(
'Illuminate\Foundation\Providers\ArtisanServiceProvider',
'Illuminate\Auth\AuthServiceProvider',
'Illuminate\Cache\CacheServiceProvider',
'Illuminate\Foundation\Providers\CommandCreatorServiceProvider',
'Illuminate\Session\CommandsServiceProvider',
'Illuminate\Filesystem\FilesystemServiceProvider',
'Illuminate\Foundation\Providers\ComposerServiceProvider',
'Illuminate\Routing\ControllerServiceProvider',
'Illuminate\Cookie\CookieServiceProvider',
'Illuminate\Database\DatabaseServiceProvider',
'Illuminate\Encryption\EncryptionServiceProvider',
'Illuminate\Filesystem\FilesystemServiceProvider',
'Illuminate\Hashing\HashServiceProvider',
'Illuminate\Html\HtmlServiceProvider',
'Illuminate\Foundation\Providers\KeyGeneratorServiceProvider',
'Illuminate\Log\LogServiceProvider',
'Illuminate\Mail\MailServiceProvider',
'Illuminate\Foundation\Providers\MaintenanceServiceProvider',
'Illuminate\Database\MigrationServiceProvider',
'Illuminate\Foundation\Providers\OptimizeServiceProvider',
'Illuminate\Pagination\PaginationServiceProvider',
'Illuminate\Foundation\Providers\PublisherServiceProvider',
'Illuminate\Queue\QueueServiceProvider',
'Illuminate\Redis\RedisServiceProvider',
'Illuminate\Auth\Reminders\ReminderServiceProvider',
'Illuminate\Foundation\Providers\RouteListServiceProvider',
'Illuminate\Database\SeedServiceProvider',
'Illuminate\Foundation\Providers\ServerServiceProvider',
'Illuminate\Session\SessionServiceProvider',
'Illuminate\Foundation\Providers\TinkerServiceProvider',
'Illuminate\Translation\TranslationServiceProvider',
'Illuminate\Validation\ValidationServiceProvider',
'Illuminate\View\ViewServiceProvider',
'Illuminate\Workbench\WorkbenchServiceProvider',
'Lavender\Cloud\Sina\Patcher\SaePatcherServiceProvider',
),
'manifest' => storage_path().'/meta',
'aliases' => array(
'App' => 'Illuminate\Support\Facades\App',
'Artisan' => 'Illuminate\Support\Facades\Artisan',
'Auth' => 'Illuminate\Support\Facades\Auth',
'Blade' => 'Illuminate\Support\Facades\Blade',
'Cache' => 'Illuminate\Support\Facades\Cache',
'ClassLoader' => 'Illuminate\Support\ClassLoader',
'Config' => 'Illuminate\Support\Facades\Config',
'Controller' => 'Illuminate\Routing\Controllers\Controller',
'Cookie' => 'Illuminate\Support\Facades\Cookie',
'Crypt' => 'Illuminate\Support\Facades\Crypt',
'DB' => 'Illuminate\Support\Facades\DB',
'Eloquent' => 'Illuminate\Database\Eloquent\Model',
'Event' => 'Illuminate\Support\Facades\Event',
'File' => 'Illuminate\Support\Facades\File',
'Form' => 'Illuminate\Support\Facades\Form',
'Hash' => 'Illuminate\Support\Facades\Hash',
'HTML' => 'Illuminate\Support\Facades\HTML',
'Input' => 'Illuminate\Support\Facades\Input',
'Lang' => 'Illuminate\Support\Facades\Lang',
'Log' => 'Illuminate\Support\Facades\Log',
'Mail' => 'Illuminate\Support\Facades\Mail',
'Paginator' => 'Illuminate\Support\Facades\Paginator',
'Password' => 'Illuminate\Support\Facades\Password',
'Queue' => 'Illuminate\Support\Facades\Queue',
'Redirect' => 'Illuminate\Support\Facades\Redirect',
'Redis' => 'Illuminate\Support\Facades\Redis',
'Request' => 'Illuminate\Support\Facades\Request',
'Response' => 'Illuminate\Support\Facades\Response',
'Route' => 'Illuminate\Support\Facades\Route',
'Schema' => 'Illuminate\Support\Facades\Schema',
'Seeder' => 'Illuminate\Database\Seeder',
'Session' => 'Illuminate\Support\Facades\Session',
'Str' => 'Illuminate\Support\Str',
'URL' => 'Illuminate\Support\Facades\URL',
'Validator' => 'Illuminate\Support\Facades\Validator',
'View' => 'Illuminate\Support\Facades\View',
),
);
$app['sae'] = false;
if (defined('SAE_ACCESSKEY') && (substr(SAE_ACCESSKEY, 0, 4 ) != 'kapp')) {
$removeProviders = array(
'Illuminate\Cache\CacheServiceProvider',
'Illuminate\View\ViewServiceProvider',
'Illuminate\Session\SessionServiceProvider',
);
foreach ($app['providers'] as $key => $provider) {
if (in_array($provider, $removeProviders)) {
unset($app['providers'][$key]);
}
}
$app['providers'] = array_merge($app['providers'], array(
'Lavender\Cloud\Sina\Cache\CacheServiceProvider',
'Lavender\Cloud\Sina\Storage\StorageServiceProvider',
'Lavender\Cloud\Sina\View\ViewServiceProvider',
'Lavender\Cloud\Sina\Session\SessionServiceProvider',
));
$app['aliases']['Storage'] = 'Lavender\Cloud\Sina\Storage\Storage';
$app['sae'] = true;
}
return $app;
以上代碼主要作用:在判斷程序運行在 SAE 運行環境下的時候,自動注入相應的類取代 Laravel 自帶的類實現。
2. 修改 app/config/database.php
使用 SAE 資料庫設置常量配置我們的資料庫設置。
'mysql' => array(
'driver' => 'mysql',
'host' => SAE_MYSQL_HOST_M,
'database' => SAE_MYSQL_DB,
'username' => SAE_MYSQL_USER,
'password' => SAE_MYSQL_PASS,
'charset' => 'utf8',
'collation' => 'utf8_general_ci',
'prefix' => '',
),
3. 配置 app/config/cache.php 和 app/config/session.php
'driver' => 'memcache',
使用 SAE 提供的 memcache 驅動。
4. 配置本地開發環境
Laravel 支持自定義開發環境,一般本地開發就是 local 配置啦,這里可以在bootstrap/start.php 中設置。
然後我們在 app/config/local 文件夾下配置本地開發環境配置。
經過以上配置,我們搭建了本地開發和SAE運行環境的配置分離。
然後就是盡情開發啦~~~~~~~~~
上傳代碼到 SAE
C. php+excel通用成績查詢系統+v6.8+sae怎麼使用
PHP+excel通用成績查詢系統是個極為簡單卻非常通用、非常方便的成績查詢系統,通用於幾乎所有Excel單二維數據表查詢。只需修改 查詢條件和頂部、底部文字(非常簡單),即可用於幾乎所有工資等查詢,成績查詢,物業查詢,收電費查詢,錄取查詢,證書查詢等場景哦。
使用的是PHPexcel查詢Excel,測試可用,可能速度偏慢(千條數據無影響)
直接查詢Excel數據的第一個表,修改表格後FTP上傳,快速搞定,非常方便。
當然linux可能xls文件可以倍下載,如果保密數據,請做防下載處理哦。
sae直接上傳代碼包即可和演示一樣的效果,讓你可以免費實現查詢系統
(免費代碼+免費二級域名+免費sae空間)
其他linux PHP環境,如果亂碼請用utf-8字元集上傳。
1.非常通用。無論你Excel/Wps二維表幾列,列標題各是什麼,直接支持。其他格式導出為csv或excel後同樣支持。查詢結果幾乎都由你Excel二維表控制,平時只需維護好你的Excel表,而操作Excel,幾乎每台電腦都有軟體可以打開編輯,幾乎誰都會操作。
2.使用簡單。只需修改查詢條件和標題,然後把你平時輸入的excel二維表進行:復制,粘貼,更名,上傳,特別方便,發布一次成績查詢,半分鍾內可以解決。修改查詢查詢條件等,記事本打開編輯幾個字即可,自定義是否使用驗證碼。
3.市場廣泛。可以廣泛用於一次性出來的改動很少的成績查詢,錄取查詢,證書查詢系統(每個學校,教育機構,事業單位考試等都可以用到),工資查詢系統(每個企業,學校,所有單位都可能用到),水電費查詢系統等(小區,物業公司,大學寢室等),錄取,證書查詢系統。
4.使用靈活:支持多次查詢,比如工資查詢往往多月查詢,那麼你只需一個月放一個資料庫,下拉的查詢選項自動獲取(選項即文件名);且每次查詢除了設置的查詢條件列的標題得一致外,其他的都是自定義可以不一樣(任意列數,任意列標題,任意行數);如果查詢條件不一致,將代碼文件復制一份後用不同文件夾命名,然後修改查詢條件即可使用。
http://www.2cto.com/ym/201605/63631.html
D. php部署到新浪雲sae不能正常運行了,求解
sae文檔
運行環境
基本環境
新浪雲 PHP 運行環境目前的 Web 伺服器使用的是:
CentOS-6.x
Apache-2.2.x
PHP-5.3.x / PHP-5.6.x
Web 伺服器運行在 64 位 Linux 環境下。
Apache 運行在 Prefork 模式下,即每個請求都會對應一個 Apache 進程,請求結束後該進程才能服務於下一個請求。平台通過模塊方式擴展了 Apache 和 PHP 的相關功能。
禁用函數和類
出於平台安全性考慮,我們禁用了以下函數和類,禁用的標准主要有四點:
出於對安全性的考慮
出於對資源管理的考慮
不常用的 API
我們提供更好替代方案的 API
禁用的函數:
symlink
link
exec
system
escapeshellcmd
escapeshellarg
passthru
shell_exec
proc_open
proc_close
proc_terminate
proc_get_status
proc_nice
dl
pclose
popen
stream_socket_server
stream_socket_accept
stream_socket_pair
stream_wrapper_restore
mb_send_mail
posix_kill
apache_child_terminate
apache_lookup_uri
apache_reset_timeout
apache_setenv
virtual
socket_create
socket_create_pair
realpath_cache_get
禁用的類:
SQLiteDatabase
SQLiteResult
SQLiteUnbuffered
SQLiteException
沙箱
代碼和數據的隔離:每個應用在運行期間,只能「看」到自己的代碼和數據,即 A 應用無法訪問 B 應用的代碼和數據。注意,這里提到的在 Web 伺服器上的數據,往往指一些中間處理過程的臨時數據,並非最終落地的數據,比如用戶上傳照片會臨時存儲到 TmpFS。
連接數的隔離:我們知道,程序寫的不好,很容易導致阻塞,並進一步導致連接數的飆升。單個應用過多佔用 Apache 連接數,原因往往是多方面的,應用請求外部資源被阻塞是一個最為常見的因素,另外應用頁面過大瀏覽器下載慢也是常見因素之一。公有雲平台同一時刻往往運行著大量的應用,如果某一應用出現連接數異常,最直接的後果是整個平台上的所有應用都將陷入癱瘓。新浪雲平台目前有設置「應用最大 HTTP 並發連接數」,目前這個值是 500,如果應用平均單個請求處理時長是 100ms,那麼該應用每秒的 HTTP 並發連接將可以到達 5000,每天的請求超過 1 億沒有問題。但如果您的應用平均每個請求處理時長 2 秒,那麼該應用每秒的 HTTP 並發連接只能到達 250,每天支撐的請求數將在千萬。總體而言,盡量迅速處理完請求對應用是有利的,而且也是平台所鼓勵的。
內存隔離:目前新浪雲平台上對單個 PHP 腳本的處理,設置了 128MB 的上限 (max_memory,ini_set 不可修改),我們認為這個設置是一個相對很高的值,可以說能夠滿足絕大部分應用的需求。設想一台伺服器 8G 內存,如果每個 PHP 處理都消耗 64M 內存,那麼該伺服器最多隻能同時運行 128 個 PHP 腳本。新浪雲引入了」應用最大並發內存數「的概念,目前的設置是 4GB。如果應用程序單個請求的內存消耗平均在 16MB,那麼可同時運行 256 個請求,這和上面的並發連接數的設定是基本一致的。
CPU 隔離:這主要是通過新浪雲的配額系統來達到 CPU 時間的隔離。每個應用都有 CPU 時間消耗的分鍾速度限制,避免了某一應用過多非法獲取 CPU 資源導致其它應用響應慢的問題。
目前新浪雲平台上允許的「單請求最大存活時長」是 300 秒 。
註解
當應用並發超過限制,系統會返回 508 錯誤,並顯示 Connections out of quota。當應用內存佔用超過限制,系統會返回 509 錯誤,並顯示 Memory usage out of quota。
環境變數
您可以通過列印 PHP 的全局變數$_SERVER來獲取跟新浪雲相關的環境變數信息,每個環境變數的信息如下:
變數名
說明
HTTP_APPNAME 標志該請求屬於哪個應用
HTTP_APPVERSION 標志該請求對應該應用的哪個版本
HTTP_ACCESSKEY 該應用訪問各種服務資源的帳號
HTTP_SECRETKEY 該應用訪問各種服務資源的密碼
HTTP_APPCOOKIE 一些和 app 管理相關信息
警告
不要直接列印出$_SERVER變數,這樣可能會造成應用的 AccessKey 和 SecretKey 的泄露。為了應用的安全考慮,請保護好自己的 AccessKey 和 SecretKey。
常用字體文件路徑:
constantSAE_Font_Sun
宋體字體文件路徑
constantSAE_Font_Kai
楷體字體文件路徑
constantSAE_Font_Hei
文泉驛正黑字體文件路徑
constantSAE_Font_MicroHei
文泉驛微米黑字體文件路徑
全局函數
is_https()
判斷客戶端是以 http 還是以 https 的方式連接。
返回:
如果是 https 連接返回 true,否則返回 false。