当前位置: 首页>>代码示例>>PHP>>正文


PHP ilUtil::getASCIIFilename方法代码示例

本文整理汇总了PHP中ilUtil::getASCIIFilename方法的典型用法代码示例。如果您正苦于以下问题:PHP ilUtil::getASCIIFilename方法的具体用法?PHP ilUtil::getASCIIFilename怎么用?PHP ilUtil::getASCIIFilename使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ilUtil的用法示例。


在下文中一共展示了ilUtil::getASCIIFilename方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: recurseFolder

 /**
  * private functions which iterates through all folders and files 
  * and create an according file structure in a temporary directory. This function works recursive. 
  *
  * @param integer $refid reference it
  * @param tmpdictory $tmpdir
  * @return returns first created directory
  */
 private static function recurseFolder($refid, $title, $tmpdir)
 {
     global $rbacsystem, $tree, $ilAccess;
     $tmpdir = $tmpdir . DIRECTORY_SEPARATOR . ilUtil::getASCIIFilename($title);
     ilUtil::makeDir($tmpdir);
     $subtree = $tree->getChildsByTypeFilter($refid, array("fold", "file"));
     foreach ($subtree as $child) {
         if (!$ilAccess->checkAccess("read", "", $child["ref_id"])) {
             continue;
         }
         if (ilObject::_isInTrash($child["ref_id"])) {
             continue;
         }
         if ($child["type"] == "fold") {
             ilObjFolder::recurseFolder($child["ref_id"], $child["title"], $tmpdir);
         } else {
             $newFilename = $tmpdir . DIRECTORY_SEPARATOR . ilUtil::getASCIIFilename($child["title"]);
             // copy to temporal directory
             $oldFilename = ilObjFile::_lookupAbsolutePath($child["obj_id"]);
             if (!copy($oldFilename, $newFilename)) {
                 throw new ilFileException("Could not copy " . $oldFilename . " to " . $newFilename);
             }
             touch($newFilename, filectime($oldFilename));
         }
     }
 }
开发者ID:arlendotcn,项目名称:ilias,代码行数:34,代码来源:class.ilObjWorkspaceFolder.php

示例2: importBookingsFromDaVinciFile

 /**
  * Imports rooms and bookings from a given daVinci file
  *
  * @param type    $file            daVinci text file from file upload form
  * @param boolean $import_rooms    true to import rooms
  * @param boolean $import_bookings true to import bookings
  * @param int     $default_cap     sets the default room capacity
  */
 public function importBookingsFromDaVinciFile($file, $import_rooms, $import_bookings, $default_cap)
 {
     $this->count_Bookings_without_Room = 0;
     $this->count_Rooms_created = 0;
     $this->count_Bookings_created = 0;
     $file_name = ilUtil::getASCIIFilename($file["name"]);
     $file_name_mod = str_replace(" ", "_", $file_name);
     $file_path = "templates" . "/" . $file_name_mod;
     // construct file path
     ilUtil::moveUploadedFile($file["tmp_name"], $file_name_mod, $file_path);
     $fileAsString = file_get_contents($file_path);
     ilUtil::sendInfo($this->lng->txt("rep_robj_xrs_daVinci_import_message_start"), true);
     foreach (preg_split("/((\r?\n)|(\r\n?))/", $fileAsString) as $line) {
         $this->checkForKey($line);
     }
     ilUtil::sendInfo($this->createInfoMessage($import_rooms, $import_bookings), true);
     if ($import_rooms === "1") {
         foreach ($this->rooms as $room) {
             if (!($this->ilRoomSharingDatabase->getRoomWithName($room['name']) !== array())) {
                 if ($room['cap'] == 0) {
                     $room['cap'] = (int) $default_cap;
                 }
                 //$a_name, $a_type, $a_min_alloc, $a_max_alloc, $a_file_id, $a_building_id
                 $this->ilRoomSharingDatabase->insertRoom($room['name'], $room['type'], 1, $room['cap'], array(), array());
                 $this->count_Rooms_created++;
             }
         }
     }
     if ($import_bookings === "1") {
         foreach ($this->appointments as $booking) {
             if ($booking['day'] != 0) {
                 $usedWeek = clone $this->startingDate;
                 for ($i = 0; $i < strlen($this->activeWeeks); $i++) {
                     if ($booking['week'] != NULL) {
                         if ($booking['week'][$i] === 'X') {
                             $this->addDaVinciBooking($booking['day'], $booking['start'], $booking['end'], $booking['room'], $booking['prof'], $booking['subject'], $booking['classes'], $usedWeek);
                         }
                     } else {
                         if ($this->activeWeeks[$i] === 'X') {
                             $this->addDaVinciBooking($booking['day'], $booking['start'], $booking['end'], $booking['room'], $booking['prof'], $booking['subject'], $booking['classes'], $usedWeek);
                         }
                     }
                     $usedWeek->add(new DateInterval('P7D'));
                 }
             }
         }
     }
     $this->displayInfo();
 }
开发者ID:studer-raimann,项目名称:RoomSharing,代码行数:57,代码来源:class.ilRoomSharingDaVinciImport.php

示例3: sendMultiFeedbackStructureFile

 /**
  * Create member status record for a new assignment for all participants
  */
 function sendMultiFeedbackStructureFile()
 {
     global $ilDB;
     // send and delete the zip file
     $deliverFilename = trim(str_replace(" ", "_", $this->getTitle() . "_" . $this->getId()));
     $deliverFilename = ilUtil::getASCIIFilename($deliverFilename);
     $deliverFilename = "multi_feedback_" . $deliverFilename;
     $exc = new ilObjExercise($this->getExerciseId(), false);
     $cdir = getcwd();
     // create temporary directoy
     $tmpdir = ilUtil::ilTempnam();
     ilUtil::makeDir($tmpdir);
     $mfdir = $tmpdir . "/" . $deliverFilename;
     ilUtil::makeDir($mfdir);
     // create subfolders <lastname>_<firstname>_<id> for each participant
     include_once "./Modules/Exercise/classes/class.ilExerciseMembers.php";
     $exmem = new ilExerciseMembers($exc);
     $mems = $exmem->getMembers();
     foreach ($mems as $mem) {
         $name = ilObjUser::_lookupName($mem);
         $subdir = $name["lastname"] . "_" . $name["firstname"] . "_" . $name["login"] . "_" . $name["user_id"];
         $subdir = ilUtil::getASCIIFilename($subdir);
         ilUtil::makeDir($mfdir . "/" . $subdir);
     }
     // create the zip file
     chdir($tmpdir);
     $tmpzipfile = $tmpdir . "/multi_feedback.zip";
     ilUtil::zip($tmpdir, $tmpzipfile, true);
     chdir($cdir);
     ilUtil::deliverFile($tmpzipfile, $deliverFilename . ".zip", "", false, true);
 }
开发者ID:Walid-Synakene,项目名称:ilias,代码行数:34,代码来源:class.ilExAssignment.php

示例4: fixFilename

 /**
  * Fix filename of uploaded file
  *
  * @param string $a_name upload file name
  * @return string fixed file name
  */
 static function fixFilename($a_name)
 {
     $a_name = ilUtil::getASCIIFilename($a_name);
     $rchars = array("`", "=", "\$", "{", "}", "'", ";", " ", "(", ")");
     $a_name = str_replace($rchars, "_", $a_name);
     $a_name = str_replace("__", "_", $a_name);
     return $a_name;
 }
开发者ID:bheyser,项目名称:qplskl,代码行数:14,代码来源:class.ilObjMediaObject.php

示例5: updateMediaItem

 /**
  * update media item from form
  *
  * @param IlObjectMediaObject $mob
  * @param IlMediaItem $mediaItem
  * @return string file
  */
 private function updateMediaItem($mob, &$mediaItem)
 {
     $purpose = $mediaItem->getPurpose();
     $url_gui = $this->form_gui->getInput("url_" . $purpose);
     $file_gui = $this->form_gui->getInput("file_" . $purpose);
     if ($url_gui) {
         // http
         $file = $this->form_gui->getInput("url_" . $purpose);
         $title = basename($file);
         $location = $this->form_gui->getInput("url_" . $purpose);
         $locationType = "Reference";
     } elseif ($file_gui["size"] > 0) {
         // lokal
         // determine and create mob directory, move uploaded file to directory
         $mob_dir = ilObjMediaObject::_getDirectory($mob->getId());
         if (!is_dir($mob_dir)) {
             $mob->createDirectory();
         }
         $file_name = ilUtil::getASCIIFilename($_FILES['file_' . $purpose]['name']);
         $file_name = str_replace(" ", "_", $file_name);
         $file = $mob_dir . "/" . $file_name;
         $title = $file_name;
         $locationType = "LocalFile";
         $location = $title;
         ilUtil::moveUploadedFile($_FILES['file_' . $purpose]['tmp_name'], $file_name, $file);
         ilUtil::renameExecutables($mob_dir);
     }
     // check if not automatic mimetype detection
     if ($_POST["mimetype_" . $purpose] != "") {
         $mediaItem->setFormat($_POST["mimetype_" . $purpose]);
     } elseif ($mediaItem->getLocation() != "") {
         $format = ilObjMediaObject::getMimeType($mediaItem->getLocation());
         $mediaItem->setFormat($format);
     }
     if (isset($file)) {
         // get mime type, if not already set!
         if (!isset($format)) {
             $format = ilObjMediaObject::getMimeType($file);
         }
         // set real meta and object data
         $mediaItem->setFormat($format);
         $mediaItem->setLocation($location);
         $mediaItem->setLocationType($locationType);
         $mediaItem->setHAlign("Left");
         $mediaItem->setHeight(self::isAudio($format) ? 0 : 180);
     }
     if ($purpose == "Standard") {
         if (isset($title)) {
             $mob->setTitle($title);
         }
         if (isset($format)) {
             $mob->setDescription($format);
         }
     }
     return $file;
 }
开发者ID:khanhnnvn,项目名称:ilias_E-learning,代码行数:63,代码来源:class.ilObjMediaCastGUI.php

示例6: uploadRoomsAgreement

 /**
  * Uploads a new rooms agreement by using the ILIAS MediaObject Service.
  * If the old file id is given, the old file will be deleted.
  *
  * @param array  $a_newfile   an array containing the input values of the form
  * @param string $a_oldFileId to delete trash
  *
  * @return string uploaded file id
  */
 public function uploadRoomsAgreement($a_newfile, $a_oldFileId = "0")
 {
     if (!empty($a_oldFileId) && $a_oldFileId != "0") {
         $agreementFile = new ilObjMediaObject($a_oldFileId);
         $agreementFile->delete();
     }
     $mediaObj = new ilObjMediaObject();
     $mediaObj->setTitle("RoomSharingRoomsAgreement");
     $mediaObj->setDescription("RoomSharingRoomsAgreement");
     $mediaObj->create();
     $mob_dir = ilObjMediaObject::_getDirectory($mediaObj->getId());
     if (!is_dir($mob_dir)) {
         $mediaObj->createDirectory();
     }
     $file_name = ilUtil::getASCIIFilename($a_newfile["name"]);
     $file_name_mod = str_replace(" ", "_", $file_name);
     $file = $mob_dir . "/" . $file_name_mod;
     ilUtil::moveUploadedFile($a_newfile["tmp_name"], $file_name_mod, $file);
     ilUtil::renameExecutables($mob_dir);
     $format = ilObjMediaObject::getMimeType($file);
     $media_item = new ilMediaItem();
     $mediaObj->addMediaItem($media_item);
     $media_item->setPurpose("Standard");
     $media_item->setFormat($format);
     $media_item->setLocation($file_name_mod);
     $media_item->setLocationType("LocalFile");
     $mediaObj->update();
     return $mediaObj->getId();
 }
开发者ID:studer-raimann,项目名称:RoomSharing,代码行数:38,代码来源:class.ilObjRoomSharing.php

示例7: configureFile

 /**
  * Configures the file for the updateFloorPlanInfosWithFile and addFloorPlan function.
  *
  * @param ilObjMediaObject $a_mediaObj
  * @param array            $a_newfile
  *
  * @return array with format and filename
  */
 private function configureFile($a_mediaObj, $a_newfile = NULL)
 {
     if ($this->mobjMock) {
         return $a_newfile;
     }
     $mob_dir = ilObjMediaObject::_getDirectory($a_mediaObj->getId());
     if (!is_dir($mob_dir)) {
         $a_mediaObj->createDirectory();
     }
     $file_name = ilUtil::getASCIIFilename($a_newfile["name"]);
     $file_name_mod = str_replace(" ", "_", $file_name);
     $file = $mob_dir . "/" . $file_name_mod;
     // construct file path
     ilUtil::moveUploadedFile($a_newfile["tmp_name"], $file_name_mod, $file);
     ilUtil::renameExecutables($mob_dir);
     $format = ilObjMediaObject::getMimeType($file);
     return array("format" => $format, "filename" => $file_name_mod);
 }
开发者ID:studer-raimann,项目名称:RoomSharing,代码行数:26,代码来源:class.ilRoomSharingFloorPlans.php

示例8: downloadFolderObject

 public function downloadFolderObject()
 {
     global $ilAccess, $ilErr, $lng;
     if (!$ilAccess->checkAccess("read", "", $this->ref_id)) {
         $this->ilias->raiseError($this->lng->txt("msg_no_perm_read"), $this->ilias->error_obj->MESSAGE);
     }
     $filename = $this->object->downloadFolder();
     ilUtil::deliverFile($filename, ilUtil::getASCIIFilename($this->object->getTitle() . ".zip"));
 }
开发者ID:bheyser,项目名称:qplskl,代码行数:9,代码来源:class.ilObjFolderGUI.php

示例9: deliverPDFfromFO

 /**
  * Delivers a PDF file from a XSL-FO string
  *
  * @param string $fo The XSL-FO string
  * @access public
  */
 public function deliverPDFfromFO($fo, $title = null)
 {
     global $ilLog;
     include_once "./Services/Utilities/classes/class.ilUtil.php";
     $fo_file = ilUtil::ilTempnam() . ".fo";
     $fp = fopen($fo_file, "w");
     fwrite($fp, $fo);
     fclose($fp);
     include_once './Services/WebServices/RPC/classes/class.ilRpcClientFactory.php';
     try {
         $pdf_base64 = ilRpcClientFactory::factory('RPCTransformationHandler')->ilFO2PDF($fo);
         $filename = strlen($title) ? $title : $this->getTitle();
         ilUtil::deliverData($pdf_base64->scalar, ilUtil::getASCIIFilename($filename) . ".pdf", "application/pdf", false, true);
         return true;
     } catch (XML_RPC2_FaultException $e) {
         $ilLog->write(__METHOD__ . ': ' . $e->getMessage());
         return false;
     } catch (Exception $e) {
         $ilLog->write(__METHOD__ . ': ' . $e->getMessage());
         return false;
     }
     /*
     include_once "./Services/Transformation/classes/class.ilFO2PDF.php";
     $fo2pdf = new ilFO2PDF();
     $fo2pdf->setFOString($fo);
     $result = $fo2pdf->send();
     $filename = (strlen($title)) ? $title : $this->getTitle();
     ilUtil::deliverData($result, ilUtil::getASCIIFilename($filename) . ".pdf", "application/pdf", false, true);
     */
 }
开发者ID:bheyser,项目名称:qplskl,代码行数:36,代码来源:class.ilObjTest.php

示例10: deliverFile

 /**
  *   deliver file for download via browser.
  * @param $mime Mime of the file
  * @param $isInline Set this to true, if the file shall be shown in browser
  * @static
  * 
  */
 public static function deliverFile($a_file, $a_filename, $a_mime = '', $isInline = false, $removeAfterDelivery = false, $a_exit_after = true)
 {
     // should we fail silently?
     if (!file_exists($a_file)) {
         return false;
     }
     if ($isInline) {
         $disposition = "inline";
         // "inline" to view file in browser
     } else {
         $disposition = "attachment";
         // "attachment" to download to hard disk
         //$a_mime = "application/octet-stream"; // override mime type to ensure that no browser tries to show the file anyway.
     }
     // END WebDAV: Show file in browser or provide it as attachment
     if (strlen($a_mime)) {
         $mime = $a_mime;
     } else {
         $mime = "application/octet-stream";
         // or whatever the mime type is
     }
     // BEGIN WebDAV: Removed broken HTTPS code.
     // END WebDAV: Removed broken HTTPS code.
     if ($disposition == "attachment") {
         header("Cache-control: private");
     } else {
         header("Cache-Control: no-cache, must-revalidate");
         header("Pragma: no-cache");
     }
     $ascii_filename = ilUtil::getASCIIFilename($a_filename);
     header("Content-Type: {$mime}");
     header("Content-Disposition:{$disposition}; filename=\"" . $ascii_filename . "\"");
     header("Content-Description: " . $ascii_filename);
     // #7271: if notice gets thrown download will fail in IE
     $filesize = @filesize($a_file);
     if ($filesize) {
         header("Content-Length: " . (string) $filesize);
     }
     include_once './Services/Http/classes/class.ilHTTPS.php';
     #if($_SERVER['HTTPS'])
     if (ilHTTPS::getInstance()->isDetected()) {
         header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
         header('Pragma: public');
     }
     header("Connection: close");
     ilUtil::readFile($a_file);
     if ($removeAfterDelivery) {
         unlink($a_file);
     }
     if ($a_exit_after) {
         exit;
     }
 }
开发者ID:khanhnnvn,项目名称:ilias_E-learning,代码行数:60,代码来源:class.ilUtil.php

示例11: exportAllCodesObject

 /**
  * Exports all survey codes
  */
 public function exportAllCodesObject()
 {
     $export = $this->object->getSurveyCodesForExport();
     ilUtil::deliverData($export, ilUtil::getASCIIFilename($this->object->getTitle() . ".csv"));
 }
开发者ID:arlendotcn,项目名称:ilias,代码行数:8,代码来源:class.ilSurveyParticipantsGUI.php

示例12: copyFile

 private static function copyFile($obj_id, $title, $tmpdir)
 {
     $newFilename = $tmpdir . DIRECTORY_SEPARATOR . ilUtil::getASCIIFilename($title);
     // copy to temporary directory
     $oldFilename = ilObjFile::_lookupAbsolutePath($obj_id);
     if (!copy($oldFilename, $newFilename)) {
         throw new ilFileException("Could not copy " . $oldFilename . " to " . $newFilename);
     }
     touch($newFilename, filectime($oldFilename));
 }
开发者ID:bheyser,项目名称:qplskl,代码行数:10,代码来源:class.ilContainerGUI.php

示例13: getOfflineFilename

 public function getOfflineFilename()
 {
     return ilUtil::getASCIIFilename($this->getTitle()) . ".pdf";
 }
开发者ID:arlendotcn,项目名称:ilias,代码行数:4,代码来源:class.ilVerificationObject.php

示例14: exportCertificate

 /**
  * Exports the user results as PDF certificates using
  * XSL-FO via XML:RPC calls
  *
  * @access public
  */
 public function exportCertificate()
 {
     global $ilUser;
     include_once "./Services/Utilities/classes/class.ilUtil.php";
     include_once "./Services/Certificate/classes/class.ilCertificate.php";
     include_once "./Modules/Test/classes/class.ilTestCertificateAdapter.php";
     $certificate = new ilCertificate(new ilTestCertificateAdapter($this->object));
     $archive_dir = $certificate->createArchiveDirectory();
     $total_users = array();
     $total_users =& $this->object->evalTotalPersonsArray();
     if (count($total_users)) {
         foreach ($total_users as $active_id => $name) {
             $user_id = $this->object->_getUserIdFromActiveId($active_id);
             $pdf = $certificate->outCertificate(array("active_id" => $active_id, "userfilter" => $userfilter, "passedonly" => $passedonly), FALSE);
             if (strlen($pdf)) {
                 $certificate->addPDFtoArchiveDirectory($pdf, $archive_dir, $user_id . "_" . str_replace(" ", "_", ilUtil::getASCIIFilename($name)) . ".pdf");
             }
         }
         $zipArchive = $certificate->zipCertificatesInArchiveDirectory($archive_dir, TRUE);
     }
 }
开发者ID:arlendotcn,项目名称:ilias,代码行数:27,代码来源:class.ilTestEvaluationGUI.php

示例15: downloadAllDeliveredFiles

 /**
  * Download all submitted files of an assignment (all user)
  *
  * @param	$members		array of user names, key is user id
  */
 function downloadAllDeliveredFiles($a_eph_id, $a_ass_id, $members)
 {
     global $lng, $ilObjDataCache, $ilias;
     include_once "./Services/Utilities/classes/class.ilUtil.php";
     include_once "./Customizing/global/plugins/Services/Repository/RepositoryObject/Ephorus/classes/class.ilFSStorageEphorus.php";
     $storage = new ilFSStorageEphorus($a_eph_id, $a_ass_id);
     $storage->create();
     ksort($members);
     //$savepath = $this->getEphorusPath() . "/" . $this->obj_id . "/";
     $savepath = $storage->getAbsoluteSubmissionPath();
     $cdir = getcwd();
     // important check: if the directory does not exist
     // ILIAS stays in the current directory (echoing only a warning)
     // and the zip command below archives the whole ILIAS directory
     // (including the data directory) and sends a mega file to the user :-o
     if (!is_dir($savepath)) {
         return;
     }
     // Safe mode fix
     //		chdir($this->getEphorusPath());
     chdir($storage->getTempPath());
     $zip = PATH_TO_ZIP;
     // check first, if we have enough free disk space to copy all files to temporary directory
     $tmpdir = ilUtil::ilTempnam();
     ilUtil::makeDir($tmpdir);
     chdir($tmpdir);
     $dirsize = 0;
     foreach ($members as $id => $object) {
         $directory = $savepath . DIRECTORY_SEPARATOR . $id;
         $dirsize += ilUtil::dirsize($directory);
     }
     if ($dirsize > disk_free_space($tmpdir)) {
         return -1;
     }
     // copy all member directories to the temporary folder
     // switch from id to member name and append the login if the member name is double
     // ensure that no illegal filenames will be created
     // remove timestamp from filename
     $cache = array();
     foreach ($members as $id => $user) {
         $sourcedir = $savepath . DIRECTORY_SEPARATOR . $id;
         if (!is_dir($sourcedir)) {
             continue;
         }
         $userName = ilObjUser::_lookupName($id);
         $directory = ilUtil::getASCIIFilename(trim($userName["lastname"]) . "_" . trim($userName["firstname"]));
         if (array_key_exists($directory, $cache)) {
             // first try is to append the login;
             $directory = ilUtil::getASCIIFilename($directory . "_" . trim(ilObjUser::_lookupLogin($id)));
             if (array_key_exists($directory, $cache)) {
                 // second and secure: append the user id as well.
                 $directory .= "_" . $id;
             }
         }
         $cache[$directory] = $directory;
         ilUtil::makeDir($directory);
         $sourcefiles = scandir($sourcedir);
         foreach ($sourcefiles as $sourcefile) {
             if ($sourcefile == "." || $sourcefile == "..") {
                 continue;
             }
             $targetfile = trim(basename($sourcefile));
             $pos = strpos($targetfile, "_");
             if ($pos === false) {
             } else {
                 $targetfile = substr($targetfile, $pos + 1);
             }
             $targetfile = $directory . DIRECTORY_SEPARATOR . $targetfile;
             $sourcefile = $sourcedir . DIRECTORY_SEPARATOR . $sourcefile;
             if (!copy($sourcefile, $targetfile)) {
                 //echo 'Could not copy '.$sourcefile.' to '.$targetfile;
                 $ilias->raiseError('Could not copy ' . basename($sourcefile) . " to '" . $targetfile . "'.", $ilias->error_obj->MESSAGE);
             } else {
                 // preserve time stamp
                 touch($targetfile, filectime($sourcefile));
             }
         }
     }
     $tmpfile = ilUtil::ilTempnam();
     $tmpzipfile = $tmpfile . ".zip";
     // Safe mode fix
     $zipcmd = $zip . " -r " . ilUtil::escapeShellArg($tmpzipfile) . " .";
     exec($zipcmd);
     ilUtil::delDir($tmpdir);
     $assTitle = ilEphAssignment::lookupTitle($a_ass_id);
     chdir($cdir);
     ilUtil::deliverFile($tmpzipfile, (strlen($assTitle) == 0 ? strtolower($lng->txt("rep_robj_xeph_ephorus_assignment")) : $assTitle) . ".zip", "", false, true);
 }
开发者ID:jmcgettrick,项目名称:ilias-ephorus,代码行数:93,代码来源:class.ilEphAssignment.php


注:本文中的ilUtil::getASCIIFilename方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。